Files
ClientServer/app/src/main/java/clientserver/server/MessageProcessor.java
2025-04-05 00:06:46 +02:00

135 lines
3.5 KiB
Java

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 <target> <message> : 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 <target> <message> : 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();
}
}