Compare commits

...

1 Commits

Author SHA1 Message Date
Clément
6d3bca136a Handshake to test if the server exists
simplification of some commands
2025-03-01 13:18:14 +01:00
7 changed files with 77 additions and 44 deletions

View File

@@ -29,4 +29,11 @@ You will also be able to create a new room.
- /listRooms - /listRooms
- /joinRoom *roomName* - /joinRoom *roomName*
- /leaveRoom - /leaveRoom
- /help - /help
> [!NOTE]
> There are some aliases for the commands:
> - /create
> - /list
> - /join
> - /leave

View File

@@ -6,8 +6,9 @@ import server.Server;
public class ChatApp { public class ChatApp {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Server server = new Server(6665); int port = 6665;
Client client = new Client(new InetSocketAddress("localhost", 6665)); Server server = new Server(port);
Client client = new Client(new InetSocketAddress("localhost", port));
client.SendCreateRoom("101"); client.SendCreateRoom("101");

View File

@@ -7,6 +7,7 @@ import java.net.SocketException;
import java.util.Objects; import java.util.Objects;
import java.util.Scanner; import java.util.Scanner;
import network.protocol.ANSIColor;
import network.protocol.packets.*; import network.protocol.packets.*;
public class Client { public class Client {
@@ -30,6 +31,23 @@ public class Client {
public Client(InetSocketAddress serverAddress) throws SocketException { public Client(InetSocketAddress serverAddress) throws SocketException {
this.connexion = new ClientConnexion(new DatagramSocket(), serverAddress); 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); Scanner scanner = new Scanner(System.in);
System.out.println("Enter your pseudo:"); System.out.println("Enter your pseudo:");
String pseudo = scanner.nextLine(); String pseudo = scanner.nextLine();
@@ -39,17 +57,23 @@ public class Client {
public void visitMessage(String message){ public void visitMessage(String message){
try { try {
if(message.startsWith("/")){ if(message.startsWith("/")){
if(message.startsWith("/createRoom")) { if(message.startsWith("/createRoom ")) {
String roomName = message.substring(12).trim(); String roomName = message.substring(12).trim();
SendCreateRoom(roomName); 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(); RequestRoomList();
} else if(message.startsWith("/joinRoom")) { } else if(message.startsWith("/joinRoom ")) {
String roomName = message.substring(10).trim(); String roomName = message.substring(10).trim();
SendJoinRoom(roomName); 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(); SendLeaveRoom();
} else if(message.startsWith("/help")) { } else if(message.equals("/help")) {
System.out.println("Available commands:"); System.out.println("Available commands:");
System.out.println("\t/createRoom <roomName>"); System.out.println("\t/createRoom <roomName>");
System.out.println("\t/listRooms"); System.out.println("\t/listRooms");
@@ -58,7 +82,7 @@ public class Client {
System.out.println("\t/help"); System.out.println("\t/help");
} }
else { else {
System.out.println("Unknown command"); System.out.println(ANSIColor.formatString("&rUnknown command&n"));
} }
} else { } else {
SendChatMessage(message); SendChatMessage(message);

View File

@@ -10,21 +10,14 @@ import network.SocketWriter;
import network.protocol.ANSIColor; import network.protocol.ANSIColor;
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.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{
private final InetSocketAddress serverAddress; private final InetSocketAddress serverAddress;
private final SocketWriter writer; private final SocketWriter writer;
private final SocketReader reader; private final SocketReader reader;
protected boolean connected = false;
public ClientConnexion(DatagramSocket socket, InetSocketAddress serverAddress) { public ClientConnexion(DatagramSocket socket, InetSocketAddress serverAddress) {
this.serverAddress = serverAddress; this.serverAddress = serverAddress;
@@ -50,13 +43,13 @@ public class ClientConnexion implements PacketVisitor, PacketHandler{
public void visitPacket(ChatMessagePacket packet) { public void visitPacket(ChatMessagePacket packet) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
String time = packet.getTime().toString(); String time = packet.getTime().toString();
sb.append("&y["); sb.append("&y[")
sb.append(time, 11, 19); // We only take the HH:MM:SS part .append(time, 11, 19) // We only take the HH:MM:SS part
sb.append("]&n"); .append("]&n")
sb.append(" "); .append(" ")
sb.append(packet.getChatter()); .append(packet.getChatter())
sb.append(" : "); .append(" : ")
sb.append(packet.getContent()).append("&n"); // make the color back to normal at the end of every message .append(packet.getContent()).append("&n"); // make the color back to normal at the end of every message
System.out.println(ANSIColor.formatString(sb.toString())); System.out.println(ANSIColor.formatString(sb.toString()));
} }
@@ -106,4 +99,8 @@ public class ClientConnexion implements PacketVisitor, PacketHandler{
System.out.println(packet.getResponse()); System.out.println(packet.getResponse());
} }
@Override
public void visitPacket(HandshakePacket packet) {
connected = true;
}
} }

View File

@@ -1,14 +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.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 {
@@ -25,5 +17,5 @@ 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(HandshakePacket packet);
} }

View File

@@ -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);
}
}

View File

@@ -8,15 +8,7 @@ import java.net.SocketException;
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.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.ServerResponsePacket.Response; import network.protocol.packets.ServerResponsePacket.Response;
public class ServerConnexion implements PacketVisitor { public class ServerConnexion implements PacketVisitor {
@@ -118,4 +110,10 @@ public class ServerConnexion implements PacketVisitor {
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'"); throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
} }
@Override
public void visitPacket(HandshakePacket packet) {
System.out.println("[Server] Handshake received from " + clientAddress);
sendPacket(new HandshakePacket());
}
} }