feat: subdivide clienthandler into messageprocessor

This commit is contained in:
2025-04-04 23:12:38 +02:00
parent 55a7499339
commit bd0cf3c601
2 changed files with 76 additions and 37 deletions

View File

@@ -9,24 +9,16 @@ public class ClientHandler implements Runnable {
private final DatagramSocket clientHandlerSocket; private final DatagramSocket clientHandlerSocket;
private final Client client; private final Client client;
private boolean running = true; private boolean running = true;
private final MessageProcessor messageProcessor;
public ClientHandler(DatagramSocket socket, Client client) { public ClientHandler(DatagramSocket socket, Client client) {
this.clientHandlerSocket = socket; this.clientHandlerSocket = socket;
this.client = client; this.client = client;
} this.messageProcessor = new MessageProcessor(
client,
private void sendConnectedClients(String message) { clientHandlerSocket,
if (message.equals("/list")) { this
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();
}
} }
public void stop() { 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(); StringBuilder str = new StringBuilder();
str.append(client.getPseudo() + str.append(
client.getPseudo() +
" (" + " (" +
client.getAddress() + client.getAddress() +
":" + ":" +
client.getPort() + client.getPort() +
")"); ")"
);
return str.toString(); return str.toString();
} }
@Override @Override
public void run() { public void run() {
System.out.println( System.out.println("Started handler for client " + prettyPrint(client));
"Started handler for client " +
prettyPrint(client));
while (running && !clientHandlerSocket.isClosed()) { while (running && !clientHandlerSocket.isClosed()) {
DatagramPacket packet = Server.receivedPacket(clientHandlerSocket); DatagramPacket packet = Server.receivedPacket(clientHandlerSocket);
if (packet == null) if (packet == null) continue;
continue;
String message = new String( String message = new String(
packet.getData(), packet.getData(),
0, 0,
packet.getLength()); packet.getLength()
System.out.println( );
prettyPrint(client) + " : " + System.out.println(prettyPrint(client) + " : " + message);
message);
// Possibilies messageProcessor.processMessage(message);
sendConnectedClients(message); // /list command
handleDeconnexion(message); // exit command or DISCONNECT
} }
System.out.println( System.out.println(
"Client handler terminated for " + "Client handler terminated for " + prettyPrint(client)
prettyPrint(client)); );
} }
} }

View File

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