From 10bbcdf69e319f605a43fb983e436aacf78861ed Mon Sep 17 00:00:00 2001 From: Alexander Sazonov Date: Sun, 27 Mar 2022 00:38:48 +0100 Subject: [PATCH] Added name duplicate handler by modifying the ClientHandler class as well as adding a class where all Client names are stored --- .../dmi/dbis/cs108/multiplayer/client/Client.java | 4 +++- .../cs108/multiplayer/server/AllClientNames.java | 14 ++++++++++++++ .../cs108/multiplayer/server/ClientHandler.java | 8 ++++++++ .../{client => server}/NameGenerator.java | 2 +- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/AllClientNames.java rename src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/{client => server}/NameGenerator.java (90%) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index c6c7db5..8844233 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -1,6 +1,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client; import ch.unibas.dmi.dbis.cs108.multiplayer.protocol.NoLegalProtocolCommandStringFoundException; +import ch.unibas.dmi.dbis.cs108.multiplayer.server.NameGenerator; import java.net.Socket; import java.io.*; @@ -20,7 +21,6 @@ public class Client { this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); this.in = new BufferedReader((new InputStreamReader((socket.getInputStream())))); - String randomUserName = NameGenerator.randomName(); //TODO hide connecting logik(next 4 lines) this.userName = userName; this.out.write(getUsername()); @@ -147,4 +147,6 @@ public class Client { public String getUsername() { return userName; } + } + diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/AllClientNames.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/AllClientNames.java new file mode 100644 index 0000000..aea8c71 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/AllClientNames.java @@ -0,0 +1,14 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.server; + +/* This class is built to contain the usernames of all players in a single string. +* This allows a duplicate check (--> ClientHandler) when a new player chooses +* a name: does the string with all the previous names contain the new player's +* desired username? If yes, he is being assigned a random name. If no, he can keep +* his desired name. */ + +public class AllClientNames { + static StringBuilder names = new StringBuilder(); + public static String allNames(String currentName) { + return names.append(currentName).toString(); + } +} 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 5ffa196..657eb6c 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 @@ -28,6 +28,14 @@ public class ClientHandler implements Runnable { this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); this.in = new BufferedReader((new InputStreamReader((socket.getInputStream())))); this.clientUserName = in.readLine(); + + // duplicate handling: if username already taken, assign random name to client + if (AllClientNames.allNames("").contains(clientUserName)) { + clientUserName = NameGenerator.randomName(); + } + // add username to list of all client names for future duplicate checking + AllClientNames.allNames(clientUserName); + connectedClients.add(this); broadcastMessage("SERVER: " + clientUserName + " has joined the Server"); } catch (IOException e) { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NameGenerator.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/NameGenerator.java similarity index 90% rename from src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NameGenerator.java rename to src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/NameGenerator.java index 7ec6886..2739cf7 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NameGenerator.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/NameGenerator.java @@ -1,4 +1,4 @@ -package ch.unibas.dmi.dbis.cs108.multiplayer.client; +package ch.unibas.dmi.dbis.cs108.multiplayer.server; import java.util.Random;