71 lines
1.9 KiB
Java
71 lines
1.9 KiB
Java
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)
|
|
);
|
|
}
|
|
}
|