package clientserver.server; import clientserver.client.Client; import java.net.DatagramPacket; import java.net.DatagramSocket; 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; this.messageProcessor = new MessageProcessor( client, clientHandlerSocket, this ); } public Client getClient() { return client; } public void stop() { running = false; if (clientHandlerSocket != null && !clientHandlerSocket.isClosed()) { clientHandlerSocket.close(); } } public static String prettyPrint(Client client) { StringBuilder str = new StringBuilder(); str.append( client.getPseudo() + " (" + client.getAddress() + ":" + client.getPort() + ")" ); return str.toString(); } @Override public void run() { System.out.println("Started handler for client " + prettyPrint(client)); while (running && !clientHandlerSocket.isClosed()) { DatagramPacket packet = Server.receivedPacket(clientHandlerSocket); if (packet == null) continue; String message = new String( packet.getData(), 0, packet.getLength() ); System.out.println(prettyPrint(client) + " : " + message); messageProcessor.processMessage(message); } System.out.println( "Client handler terminated for " + prettyPrint(client) ); } }