Added /room command to know in which room the user is

This commit is contained in:
Clément
2025-03-02 12:28:53 +01:00
parent e9f1feaaad
commit e52066ce17
9 changed files with 80 additions and 31 deletions

View File

@@ -29,6 +29,8 @@ You will also be able to create a new room.
- /listRooms - /listRooms
- /joinRoom *roomName* - /joinRoom *roomName*
- /leaveRoom - /leaveRoom
- /room
- /bye
- /help - /help
> [!NOTE] > [!NOTE]

View File

@@ -4,13 +4,7 @@ import java.net.DatagramSocket;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketException; import java.net.SocketException;
import network.protocol.packets.CreateRoomPacket; import network.protocol.packets.*;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.JoinRoomPacket;
import network.protocol.packets.LeaveRoomPacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.RequestRoomListPacket;
import network.protocol.packets.SendChatMessagePacket;
public class Client { public class Client {
@@ -52,4 +46,8 @@ public class Client {
public void RequestRoomList() { public void RequestRoomList() {
this.connexion.sendPacket(new RequestRoomListPacket()); this.connexion.sendPacket(new RequestRoomListPacket());
} }
public void RequestActualRoom() {
this.connexion.sendPacket(new RequestActualRoomPacket());
}
} }

View File

@@ -9,17 +9,7 @@ import network.SocketReader;
import network.SocketWriter; import network.SocketWriter;
import network.protocol.Packet; import network.protocol.Packet;
import network.protocol.PacketVisitor; import network.protocol.PacketVisitor;
import network.protocol.packets.ChatMessagePacket; import network.protocol.packets.*;
import network.protocol.packets.CreateRoomPacket;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.HandshakePacket;
import network.protocol.packets.JoinRoomPacket;
import network.protocol.packets.LeaveRoomPacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.RequestRoomListPacket;
import network.protocol.packets.RoomListPacket;
import network.protocol.packets.SendChatMessagePacket;
import network.protocol.packets.ServerResponsePacket;
public class ClientConnexion implements PacketVisitor, PacketHandler { public class ClientConnexion implements PacketVisitor, PacketHandler {
@@ -92,6 +82,16 @@ public class ClientConnexion implements PacketVisitor, PacketHandler {
this.callback.handleServerResponse(packet.getResponse()); this.callback.handleServerResponse(packet.getResponse());
} }
@Override
public void visitPacket(RequestActualRoomPacket packet) {
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
}
@Override
public void visitPacket(ActualRoomPacket packet) {
this.callback.handleActualRoom(packet.getRoomName());
}
@Override @Override
public void visitPacket(DisconnectPacket packet) { public void visitPacket(DisconnectPacket packet) {
this.close(); this.close();

View File

@@ -84,7 +84,10 @@ public class ClientConsole implements ClientListener {
this.client.SendJoinRoom(roomName); this.client.SendJoinRoom(roomName);
} else if (message.equals("/leaveRoom") || message.equals("/leave")) { } else if (message.equals("/leaveRoom") || message.equals("/leave")) {
this.client.SendLeaveRoom(); this.client.SendLeaveRoom();
} else if (message.equals("/bye")) { } else if (message.equals("/room")) {
this.client.RequestActualRoom();
}
else if (message.equals("/bye")) {
this.client.close(); this.client.close();
} else if (message.equals("/help")) { } else if (message.equals("/help")) {
System.out.println("Available commands:"); System.out.println("Available commands:");
@@ -92,6 +95,8 @@ public class ClientConsole implements ClientListener {
System.out.println("\t/listRooms"); System.out.println("\t/listRooms");
System.out.println("\t/joinRoom <roomName>"); System.out.println("\t/joinRoom <roomName>");
System.out.println("\t/leaveRoom"); System.out.println("\t/leaveRoom");
System.out.println("\t/room");
System.out.println("\t/bye");
System.out.println("\t/help"); System.out.println("\t/help");
} else { } else {
System.out.println(ANSIColor.formatString("&rUnknown command&n")); System.out.println(ANSIColor.formatString("&rUnknown command&n"));
@@ -145,6 +150,11 @@ public class ClientConsole implements ClientListener {
} }
} }
@Override
public void handleActualRoom(String roomName) {
System.out.println(roomName != null ? ANSIColor.formatString("You are now in room &b" + roomName + "&n") : "You are not in a room");
}
@Override @Override
public void handleServerResponse(Response response) { public void handleServerResponse(Response response) {
if (response == ServerResponsePacket.Response.MessageSent if (response == ServerResponsePacket.Response.MessageSent

View File

@@ -13,5 +13,6 @@ public interface ClientListener {
void handleChatMessage(Instant time, String chatter, String content); void handleChatMessage(Instant time, String chatter, String content);
void handleRoomList(List<String> roomNames); void handleRoomList(List<String> roomNames);
void handleServerResponse(ServerResponsePacket.Response response); void handleServerResponse(ServerResponsePacket.Response response);
void handleActualRoom(String roomName);
} }

View File

@@ -1,16 +1,6 @@
package network.protocol; package network.protocol;
import network.protocol.packets.ChatMessagePacket; import network.protocol.packets.*;
import network.protocol.packets.CreateRoomPacket;
import network.protocol.packets.DisconnectPacket;
import network.protocol.packets.HandshakePacket;
import network.protocol.packets.JoinRoomPacket;
import network.protocol.packets.LeaveRoomPacket;
import network.protocol.packets.LoginPacket;
import network.protocol.packets.RequestRoomListPacket;
import network.protocol.packets.RoomListPacket;
import network.protocol.packets.SendChatMessagePacket;
import network.protocol.packets.ServerResponsePacket;
public interface PacketVisitor { public interface PacketVisitor {
@@ -29,5 +19,7 @@ public interface PacketVisitor {
void visitPacket(RoomListPacket packet); void visitPacket(RoomListPacket packet);
void visitPacket(SendChatMessagePacket packet); void visitPacket(SendChatMessagePacket packet);
void visitPacket(ServerResponsePacket packet); void visitPacket(ServerResponsePacket packet);
void visitPacket(RequestActualRoomPacket packet);
void visitPacket(ActualRoomPacket packet);
} }

View File

@@ -0,0 +1,21 @@
package network.protocol.packets;
import network.protocol.Packet;
import network.protocol.PacketVisitor;
public class ActualRoomPacket extends Packet {
private final String roomName;
public ActualRoomPacket(String roomName) {
this.roomName = roomName;
}
public String getRoomName() {
return roomName;
}
@Override
public void accept(PacketVisitor packetVisitor) {
packetVisitor.visitPacket(this);
}
}

View File

@@ -0,0 +1,14 @@
package network.protocol.packets;
import network.protocol.Packet;
import network.protocol.PacketVisitor;
public class RequestActualRoomPacket extends Packet {
public RequestActualRoomPacket() {
}
@Override
public void accept(PacketVisitor packetVisitor) {
packetVisitor.visitPacket(this);
}
}

View File

@@ -136,4 +136,15 @@ public class ServerConnexion implements PacketVisitor {
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'"); throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
} }
@Override
public void visitPacket(RequestActualRoomPacket packet) {
sendPacket(new ActualRoomPacket(server.getRoomName(this)));
}
@Override
public void visitPacket(ActualRoomPacket packet) {
// I'm never supposed to receive this from the client
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
}
} }