From 1b27a601f07ba5f9b0783df9e2e511e0fe17da3c Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 7 Apr 2022 13:13:09 +0200 Subject: [PATCH] updated nameDuplicateChecker to remove $ and : and deal with empty names. Also renamed singularName() to checkName(). Some other minor adjustments --- .../dbis/cs108/multiplayer/server/ClientHandler.java | 11 +++-------- .../multiplayer/server/JServerProtocolParser.java | 2 +- .../multiplayer/server/nameDuplicateChecker.java | 11 ++++++++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java index d7195ff..53e7caa 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java @@ -38,7 +38,7 @@ public class ClientHandler implements Runnable { this.socket = socket; this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); this.in = new BufferedReader(new InputStreamReader((socket.getInputStream()))); - this.clientUserName = nameDuplicateChecker.singularName("U.N. Owen"); + this.clientUserName = nameDuplicateChecker.checkName("U.N. Owen"); connectedClients.add(this); serverPinger = new ServerPinger(socket, this); Thread sP = new Thread(serverPinger); @@ -77,11 +77,6 @@ public class ClientHandler implements Runnable { @Override - /** - * The main logic of the client handler. - * Since every client is put on a string this is where - * most interactions between client and server are held - **/ public void run() { String msg; while (socket.isConnected() && !socket.isClosed()) { @@ -109,7 +104,7 @@ public class ClientHandler implements Runnable { */ public void changeUsername(String newName) { String helper = this.getClientUserName(); - this.clientUserName = nameDuplicateChecker.singularName(newName); + this.clientUserName = nameDuplicateChecker.checkName(newName); broadcastAnnouncement(helper + " has changed their nickname to " + clientUserName); } @@ -121,7 +116,7 @@ public class ClientHandler implements Runnable { * @param name The desired name. */ public void setUsernameOnLogin(String name) { - this.clientUserName = nameDuplicateChecker.singularName(name); + this.clientUserName = nameDuplicateChecker.checkName(name); broadcastAnnouncement( clientUserName + " has joined the Server"); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java index e651911..d5bcb5d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java @@ -38,7 +38,7 @@ public class JServerProtocolParser { try { h.setUsernameOnLogin(msg.substring(6)); } catch (Exception e) { - h.setUsernameOnLogin("A Mysterious Passenger"); + h.setUsernameOnLogin("U.N. Owen"); } break; case "NAMEC": diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/nameDuplicateChecker.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/nameDuplicateChecker.java index 43c5956..8959a1d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/nameDuplicateChecker.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/nameDuplicateChecker.java @@ -48,12 +48,17 @@ public class nameDuplicateChecker { } /** - * Returns the name as a String, if that name is already used by some other ClientHandler, - * it returns the name with some suffix. + * Adjusts the name to avoid conflicts and returns it as a String. Namely: + * If that name is already used by some other ClientHandler, it returns the name with some suffix. + * Also, any ":" or "$" are removed, so they can be used for whisper chat. + * Also, if the name is empty, it assigns a default value ("U.N. Owen"). */ - public static String singularName(String name) { + public static String checkName(String name) { String rtrn = name; //if this line is used, only duplicate names get a suffix. //String rtrn = extendName(name); //if this line is used, all clients get a suffix + rtrn = rtrn.replace("$",""); + rtrn = rtrn.replace(":",""); + if (rtrn.equalsIgnoreCase("")) {rtrn = "U.N. Owen";} while (isTaken(rtrn)) { //todo: handle the (very unlikely) case that all names are taken. rtrn = extendName(name); }