135 lines
3.5 KiB
Java
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();
|
|
}
|
|
}
|