diff --git a/ChatApp/README.md b/ChatApp/README.md index 20e6708..071e771 100644 --- a/ChatApp/README.md +++ b/ChatApp/README.md @@ -29,4 +29,11 @@ You will also be able to create a new room. - /listRooms - /joinRoom *roomName* - /leaveRoom -- /help \ No newline at end of file +- /help + +> [!NOTE] +> There are some aliases for the commands: +> - /create +> - /list +> - /join +> - /leave \ No newline at end of file diff --git a/ChatApp/src/ChatApp.java b/ChatApp/src/ChatApp.java index 26ba79e..85f3b2c 100644 --- a/ChatApp/src/ChatApp.java +++ b/ChatApp/src/ChatApp.java @@ -6,8 +6,9 @@ import server.Server; public class ChatApp { public static void main(String[] args) throws Exception { - Server server = new Server(6665); - Client client = new Client(new InetSocketAddress("localhost", 6665)); + int port = 6665; + Server server = new Server(port); + Client client = new Client(new InetSocketAddress("localhost", port)); client.SendCreateRoom("101"); diff --git a/ChatApp/src/client/Client.java b/ChatApp/src/client/Client.java index 52f5bb5..374f587 100644 --- a/ChatApp/src/client/Client.java +++ b/ChatApp/src/client/Client.java @@ -7,6 +7,7 @@ import java.net.SocketException; import java.util.Objects; import java.util.Scanner; +import network.protocol.ANSIColor; import network.protocol.packets.*; public class Client { @@ -30,6 +31,23 @@ public class Client { public Client(InetSocketAddress serverAddress) throws SocketException { this.connexion = new ClientConnexion(new DatagramSocket(), serverAddress); + int tries = 0; + try { + connexion.sendPacket(new HandshakePacket()); + } catch (IOException e) { + e.printStackTrace(); + } + while(!connexion.connected) { + try { + Thread.sleep(100); + if(tries++ > 5) { + System.out.println("Server is not responding"); + System.exit(1); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } Scanner scanner = new Scanner(System.in); System.out.println("Enter your pseudo:"); String pseudo = scanner.nextLine(); @@ -39,17 +57,23 @@ public class Client { public void visitMessage(String message){ try { if(message.startsWith("/")){ - if(message.startsWith("/createRoom")) { + if(message.startsWith("/createRoom ")) { String roomName = message.substring(12).trim(); SendCreateRoom(roomName); - } else if(message.startsWith("/listRooms")) { + } else if(message.startsWith("/create ")){ + String roomName = message.substring(8).trim(); + SendCreateRoom(roomName); + } else if(message.equals("/listRooms") || message.equals("/list")) { RequestRoomList(); - } else if(message.startsWith("/joinRoom")) { + } else if(message.startsWith("/joinRoom ")) { String roomName = message.substring(10).trim(); SendJoinRoom(roomName); - } else if(message.startsWith("/leaveRoom")) { + } else if(message.startsWith("/join ")){ + String roomName = message.substring(6).trim(); + SendJoinRoom(roomName); + } else if(message.equals("/leaveRoom") || message.equals("/leave")) { SendLeaveRoom(); - } else if(message.startsWith("/help")) { + } else if(message.equals("/help")) { System.out.println("Available commands:"); System.out.println("\t/createRoom "); System.out.println("\t/listRooms"); @@ -58,7 +82,7 @@ public class Client { System.out.println("\t/help"); } else { - System.out.println("Unknown command"); + System.out.println(ANSIColor.formatString("&rUnknown command&n")); } } else { SendChatMessage(message); diff --git a/ChatApp/src/client/ClientConnexion.java b/ChatApp/src/client/ClientConnexion.java index 4a40f04..b8f688d 100644 --- a/ChatApp/src/client/ClientConnexion.java +++ b/ChatApp/src/client/ClientConnexion.java @@ -10,21 +10,14 @@ import network.SocketWriter; import network.protocol.ANSIColor; import network.protocol.Packet; import network.protocol.PacketVisitor; -import network.protocol.packets.ChatMessagePacket; -import network.protocol.packets.CreateRoomPacket; -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{ private final InetSocketAddress serverAddress; private final SocketWriter writer; private final SocketReader reader; + protected boolean connected = false; public ClientConnexion(DatagramSocket socket, InetSocketAddress serverAddress) { this.serverAddress = serverAddress; @@ -50,13 +43,13 @@ public class ClientConnexion implements PacketVisitor, PacketHandler{ public void visitPacket(ChatMessagePacket packet) { StringBuilder sb = new StringBuilder(); String time = packet.getTime().toString(); - sb.append("&y["); - sb.append(time, 11, 19); // We only take the HH:MM:SS part - sb.append("]&n"); - sb.append(" "); - sb.append(packet.getChatter()); - sb.append(" : "); - sb.append(packet.getContent()).append("&n"); // make the color back to normal at the end of every message + sb.append("&y[") + .append(time, 11, 19) // We only take the HH:MM:SS part + .append("]&n") + .append(" ") + .append(packet.getChatter()) + .append(" : ") + .append(packet.getContent()).append("&n"); // make the color back to normal at the end of every message System.out.println(ANSIColor.formatString(sb.toString())); } @@ -106,4 +99,8 @@ public class ClientConnexion implements PacketVisitor, PacketHandler{ System.out.println(packet.getResponse()); } + @Override + public void visitPacket(HandshakePacket packet) { + connected = true; + } } diff --git a/ChatApp/src/network/protocol/PacketVisitor.java b/ChatApp/src/network/protocol/PacketVisitor.java index d073f6a..ef82111 100644 --- a/ChatApp/src/network/protocol/PacketVisitor.java +++ b/ChatApp/src/network/protocol/PacketVisitor.java @@ -1,14 +1,6 @@ package network.protocol; -import network.protocol.packets.ChatMessagePacket; -import network.protocol.packets.CreateRoomPacket; -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 { @@ -25,5 +17,5 @@ public interface PacketVisitor { void visitPacket(RoomListPacket packet); void visitPacket(SendChatMessagePacket packet); void visitPacket(ServerResponsePacket packet); - + void visitPacket(HandshakePacket packet); } diff --git a/ChatApp/src/network/protocol/packets/HandshakePacket.java b/ChatApp/src/network/protocol/packets/HandshakePacket.java new file mode 100644 index 0000000..156d2fd --- /dev/null +++ b/ChatApp/src/network/protocol/packets/HandshakePacket.java @@ -0,0 +1,14 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; + +public class HandshakePacket extends Packet { + public HandshakePacket() { + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } +} diff --git a/ChatApp/src/server/ServerConnexion.java b/ChatApp/src/server/ServerConnexion.java index 5112dfa..e0673fe 100644 --- a/ChatApp/src/server/ServerConnexion.java +++ b/ChatApp/src/server/ServerConnexion.java @@ -8,15 +8,7 @@ import java.net.SocketException; 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.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.*; import network.protocol.packets.ServerResponsePacket.Response; public class ServerConnexion implements PacketVisitor { @@ -118,4 +110,10 @@ public class ServerConnexion implements PacketVisitor { throw new UnsupportedOperationException("Unimplemented method 'visitPacket'"); } + @Override + public void visitPacket(HandshakePacket packet) { + System.out.println("[Server] Handshake received from " + clientAddress); + sendPacket(new HandshakePacket()); + } + }