From bd0cf3c601a8ed9aa7194e35ef417bc4ca7e6db6 Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Fri, 4 Apr 2025 23:12:38 +0200 Subject: [PATCH] feat: subdivide clienthandler into messageprocessor --- .../clientserver/server/ClientHandler.java | 62 ++++++++----------- .../clientserver/server/MessageProcessor.java | 51 +++++++++++++++ 2 files changed, 76 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/clientserver/server/MessageProcessor.java diff --git a/app/src/main/java/clientserver/server/ClientHandler.java b/app/src/main/java/clientserver/server/ClientHandler.java index aca2804..d54d337 100644 --- a/app/src/main/java/clientserver/server/ClientHandler.java +++ b/app/src/main/java/clientserver/server/ClientHandler.java @@ -9,24 +9,16 @@ public class ClientHandler implements Runnable { private final DatagramSocket clientHandlerSocket; private final Client client; private boolean running = true; + private final MessageProcessor messageProcessor; public ClientHandler(DatagramSocket socket, Client client) { this.clientHandlerSocket = socket; this.client = client; - } - - private void sendConnectedClients(String message) { - if (message.equals("/list")) { - Server.sendMessage(clientHandlerSocket, Server.getPseudos(), client.getAddress(), client.getPort()); - } - } - - private void handleDeconnexion(String message) { - if (message.equals("DISCONNECT")) { - System.out.println("Client deconnection : " + prettyPrint(client)); - Server.removeClientHandler(client.getPseudo()); - stop(); - } + this.messageProcessor = new MessageProcessor( + client, + clientHandlerSocket, + this + ); } public void stop() { @@ -36,43 +28,39 @@ public class ClientHandler implements Runnable { } } - public String prettyPrint(Client client) { + public static String prettyPrint(Client client) { StringBuilder str = new StringBuilder(); - str.append(client.getPseudo() + - " (" + - client.getAddress() + - ":" + - client.getPort() + - ")"); + str.append( + client.getPseudo() + + " (" + + client.getAddress() + + ":" + + client.getPort() + + ")" + ); return str.toString(); } @Override public void run() { - System.out.println( - "Started handler for client " + - prettyPrint(client)); + System.out.println("Started handler for client " + prettyPrint(client)); while (running && !clientHandlerSocket.isClosed()) { DatagramPacket packet = Server.receivedPacket(clientHandlerSocket); - if (packet == null) - continue; + if (packet == null) continue; String message = new String( - packet.getData(), - 0, - packet.getLength()); - System.out.println( - prettyPrint(client) + " : " + - message); + packet.getData(), + 0, + packet.getLength() + ); + System.out.println(prettyPrint(client) + " : " + message); - // Possibilies - sendConnectedClients(message); // /list command - handleDeconnexion(message); // exit command or DISCONNECT + messageProcessor.processMessage(message); } System.out.println( - "Client handler terminated for " + - prettyPrint(client)); + "Client handler terminated for " + prettyPrint(client) + ); } } diff --git a/app/src/main/java/clientserver/server/MessageProcessor.java b/app/src/main/java/clientserver/server/MessageProcessor.java new file mode 100644 index 0000000..73f7949 --- /dev/null +++ b/app/src/main/java/clientserver/server/MessageProcessor.java @@ -0,0 +1,51 @@ +package clientserver.server; + +import clientserver.client.Client; +import java.net.DatagramPacket; +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.equals("/list")) { + handleListCommand(); + } else if (message.equals("DISCONNECT")) { + handleDisconnect(); + } + } + + private void handleListCommand() { + Server.sendMessage( + clientHandlerSocket, + Server.getPseudos(), + client.getAddress(), + client.getPort() + ); + } + + private void handleDisconnect() { + System.out.println( + "Client deconnection : " + ClientHandler.prettyPrint(client) + ); + Server.removeClientHandler(client.getPseudo()); + clientHandler.stop(); + } +}