diff --git a/ChatApp/README.md b/ChatApp/README.md index 071e771..a29ec88 100644 --- a/ChatApp/README.md +++ b/ChatApp/README.md @@ -29,6 +29,8 @@ You will also be able to create a new room. - /listRooms - /joinRoom *roomName* - /leaveRoom +- /room +- /bye - /help > [!NOTE] diff --git a/ChatApp/src/client/Client.java b/ChatApp/src/client/Client.java index da92c4a..be21f4e 100644 --- a/ChatApp/src/client/Client.java +++ b/ChatApp/src/client/Client.java @@ -4,13 +4,7 @@ import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; -import network.protocol.packets.CreateRoomPacket; -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; +import network.protocol.packets.*; public class Client { @@ -52,4 +46,8 @@ public class Client { public void RequestRoomList() { this.connexion.sendPacket(new RequestRoomListPacket()); } + + public void RequestActualRoom() { + this.connexion.sendPacket(new RequestActualRoomPacket()); + } } diff --git a/ChatApp/src/client/ClientConnexion.java b/ChatApp/src/client/ClientConnexion.java index c463a46..9edadfc 100644 --- a/ChatApp/src/client/ClientConnexion.java +++ b/ChatApp/src/client/ClientConnexion.java @@ -9,17 +9,7 @@ import network.SocketReader; import network.SocketWriter; import network.protocol.Packet; import network.protocol.PacketVisitor; -import network.protocol.packets.ChatMessagePacket; -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; +import network.protocol.packets.*; public class ClientConnexion implements PacketVisitor, PacketHandler { @@ -92,6 +82,16 @@ public class ClientConnexion implements PacketVisitor, PacketHandler { 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 public void visitPacket(DisconnectPacket packet) { this.close(); diff --git a/ChatApp/src/client/ClientConsole.java b/ChatApp/src/client/ClientConsole.java index 607d0f3..720a082 100644 --- a/ChatApp/src/client/ClientConsole.java +++ b/ChatApp/src/client/ClientConsole.java @@ -84,7 +84,10 @@ public class ClientConsole implements ClientListener { this.client.SendJoinRoom(roomName); } else if (message.equals("/leaveRoom") || message.equals("/leave")) { this.client.SendLeaveRoom(); - } else if (message.equals("/bye")) { + } else if (message.equals("/room")) { + this.client.RequestActualRoom(); + } + else if (message.equals("/bye")) { this.client.close(); } else if (message.equals("/help")) { System.out.println("Available commands:"); @@ -92,6 +95,8 @@ public class ClientConsole implements ClientListener { System.out.println("\t/listRooms"); System.out.println("\t/joinRoom "); System.out.println("\t/leaveRoom"); + System.out.println("\t/room"); + System.out.println("\t/bye"); System.out.println("\t/help"); } else { 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 public void handleServerResponse(Response response) { if (response == ServerResponsePacket.Response.MessageSent diff --git a/ChatApp/src/client/ClientListener.java b/ChatApp/src/client/ClientListener.java index 04d9f24..5aa6f6e 100644 --- a/ChatApp/src/client/ClientListener.java +++ b/ChatApp/src/client/ClientListener.java @@ -13,5 +13,6 @@ public interface ClientListener { void handleChatMessage(Instant time, String chatter, String content); void handleRoomList(List roomNames); void handleServerResponse(ServerResponsePacket.Response response); + void handleActualRoom(String roomName); } \ No newline at end of file diff --git a/ChatApp/src/network/protocol/PacketVisitor.java b/ChatApp/src/network/protocol/PacketVisitor.java index 66edc28..07c5f20 100644 --- a/ChatApp/src/network/protocol/PacketVisitor.java +++ b/ChatApp/src/network/protocol/PacketVisitor.java @@ -1,16 +1,6 @@ package network.protocol; -import network.protocol.packets.ChatMessagePacket; -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; +import network.protocol.packets.*; public interface PacketVisitor { @@ -29,5 +19,7 @@ public interface PacketVisitor { void visitPacket(RoomListPacket packet); void visitPacket(SendChatMessagePacket packet); void visitPacket(ServerResponsePacket packet); - + void visitPacket(RequestActualRoomPacket packet); + void visitPacket(ActualRoomPacket packet); + } diff --git a/ChatApp/src/network/protocol/packets/ActualRoomPacket.java b/ChatApp/src/network/protocol/packets/ActualRoomPacket.java new file mode 100644 index 0000000..4fd7dc1 --- /dev/null +++ b/ChatApp/src/network/protocol/packets/ActualRoomPacket.java @@ -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); + } +} diff --git a/ChatApp/src/network/protocol/packets/RequestActualRoomPacket.java b/ChatApp/src/network/protocol/packets/RequestActualRoomPacket.java new file mode 100644 index 0000000..5a3a543 --- /dev/null +++ b/ChatApp/src/network/protocol/packets/RequestActualRoomPacket.java @@ -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); + } +} diff --git a/ChatApp/src/server/ServerConnexion.java b/ChatApp/src/server/ServerConnexion.java index 533c85e..03c3a04 100644 --- a/ChatApp/src/server/ServerConnexion.java +++ b/ChatApp/src/server/ServerConnexion.java @@ -136,4 +136,15 @@ public class ServerConnexion implements PacketVisitor { 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'"); + } + }