feat: add private message
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package clientserver.server;
|
||||
|
||||
import clientserver.client.Client;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
|
||||
public class MessageProcessor {
|
||||
@@ -25,11 +24,84 @@ public class MessageProcessor {
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.equals("/list")) {
|
||||
handleListCommand();
|
||||
} else if (message.equals("DISCONNECT")) {
|
||||
handleDisconnect();
|
||||
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() {
|
||||
@@ -41,6 +113,17 @@ public class MessageProcessor {
|
||||
);
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user