package clientserver.server; import clientserver.client.Client; import java.net.DatagramSocket; public class MessageProcessor { private final Client client; private final DatagramSocket clientHandlerSocket; private final ClientHandler clientHandler; public MessageProcessor( Client client, DatagramSocket clientHandlerSocket, ClientHandler clientHandler ) { this.client = client; this.clientHandlerSocket = clientHandlerSocket; this.clientHandler = clientHandler; } public void processMessage(String message) { if (message == null) { return; } if (message.startsWith("/msg ")) { handlePrivateMessage(message); return; } switch (message) { case "/list": handleListCommand(); break; case "/help": handleHelpCommand(); break; case "/msg": handleMsgCommand(); break; case "/disconnect": handleDisconnect(); break; } } private void handlePrivateMessage(String message) { String[] parts = message.split(" ", 3); if (parts.length < 3) { handleMsgCommand(); return; } String targetPseudo = parts[1]; String messageContent = parts[2]; ClientHandler targetHandler = Server.getClientHandler(targetPseudo); if (targetHandler == null) { Server.sendMessage( clientHandlerSocket, "> User " + targetPseudo + " not found", client.getAddress(), client.getPort() ); return; } // Send private message to target Client targetClient = targetHandler.getClient(); Server.sendMessage( clientHandlerSocket, "> " + client.getPseudo() + " -> " + targetClient.getPseudo() + ": " + messageContent, targetClient.getAddress(), targetClient.getPort() ); // Send confirmation to sender Server.sendMessage( clientHandlerSocket, "> " + client.getPseudo() + " -> " + targetClient.getPseudo() + ": " + messageContent, client.getAddress(), client.getPort() ); } private void handleMsgCommand() { Server.sendMessage( clientHandlerSocket, "> /msg : send a message to a client", client.getAddress(), client.getPort() ); } private void handleListCommand() { Server.sendMessage( clientHandlerSocket, Server.getPseudos(), client.getAddress(), client.getPort() ); } private void handleHelpCommand() { Server.sendMessage( clientHandlerSocket, "> /list : list all connected clients" + "\n> /msg : send a message to a client" + "\n> /disconnect : disconnect from the server", client.getAddress(), client.getPort() ); } private void handleDisconnect() { System.out.println( "Client deconnection : " + ClientHandler.prettyPrint(client) ); Server.removeClientHandler(client.getPseudo()); clientHandler.stop(); } }