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 b959a9f..9d47a9d 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 @@ -14,6 +14,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ClientHandler implements Runnable { + public static final Logger LOGGER = LogManager.getLogger(); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); @@ -41,7 +42,8 @@ public class ClientHandler implements Runnable { /** * Implements the login logic in client-server architecture. - * @param ip the ip of the client, used for re-connection. + * + * @param ip the ip of the client, used for re-connection. * @param socket the socket on which to make the connection. */ public ClientHandler(Socket socket, InetAddress ip, CentralServerData serverData) { @@ -118,10 +120,9 @@ public class ClientHandler implements Runnable { } - /** - * Lets the client change their username, if the username is already taken, a similar - * option is chosen. + * Lets the client change their username, if the username is already taken, a similar option is + * chosen. * * @param newName The desired new name to replace the old one with. */ @@ -132,15 +133,15 @@ public class ClientHandler implements Runnable { } /** - * Sets the client's username on login, if the username is already taken, a similar - * option is chosen. Functionally, the only difference between this method and changeUsername - * is that it doesn't print out the name change. + * Sets the client's username on login, if the username is already taken, a similar option is + * chosen. Functionally, the only difference between this method and changeUsername is that it + * doesn't print out the name change. * * @param name The desired name. */ public void setUsernameOnLogin(String name) { this.clientUserName = nameDuplicateChecker.checkName(name); - broadcastAnnouncement( clientUserName + " has joined the Server"); + broadcastAnnouncement(clientUserName + " has joined the Server"); } /** @@ -155,10 +156,10 @@ public class ClientHandler implements Runnable { } /** - * Broadcasts a non-chat Message to all active clients. This can be used for server - * messages / announcements rather than chat messages. The message will be printed to the user - * exactly as it is given to this method. Unlike broadcastChatMessage, it will also be printed - * onto the server console. + * Broadcasts a non-chat Message to all active clients. This can be used for server messages / + * announcements rather than chat messages. The message will be printed to the user exactly as it + * is given to this method. Unlike broadcastChatMessage, it will also be printed onto the server + * console. * * @param msg the Message to be broadcast */ @@ -169,8 +170,10 @@ public class ClientHandler implements Runnable { } } - /** Sends a given message to client. The message has to already be protocol-formatted. ALL + /** + * Sends a given message to client. The message has to already be protocol-formatted. ALL * communication with the client has to happen via this method! + * * @param msg the given message. Should already be protocol-formatted. */ public void sendMsgToClient(String msg) { @@ -186,10 +189,11 @@ public class ClientHandler implements Runnable { } /** - * Removes & disconnects the client. To be used if a severe connection loss is detected (i.e. if trying to - * send / receive a message throws an exception, not just if ping-pong detects a connection loss). - * This is very similar to removeClientOnLogout(), however removeClientOnLogout() should only be used for - * regular quitting, since removeClientOnLogout() cannot handle a client with connection loss. + * Removes & disconnects the client. To be used if a severe connection loss is detected (i.e. if + * trying to send / receive a message throws an exception, not just if ping-pong detects a + * connection loss). This is very similar to removeClientOnLogout(), however + * removeClientOnLogout() should only be used for regular quitting, since removeClientOnLogout() + * cannot handle a client with connection loss. */ public void removeClientOnConnectionLoss() { connectedClients.remove(this); @@ -210,8 +214,15 @@ public class ClientHandler implements Runnable { disconnectClient(); } + /** + * Invoked by CRTGM. Creates a new lobby with the ClientHandler as admin and adds the lobby to the + * server data. + */ public void createNewLobby() { Lobby newGame = new Lobby(this); + serverData.addLobbyToListOfAllLobbies(newGame); + LOGGER.debug( + this.getClientUserName() + " created a new lobby with ID: " + newGame.getLobbyID()); } /** 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 0983bd4..30d506a 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 @@ -59,6 +59,7 @@ public class JServerProtocolParser { break; case Protocol.createNewGame: // TODO add h.openLobby(h) method + h.createNewLobby(); LOGGER.debug(Protocol.createNewGame + " command reached in JServerProtocolParser. Command issued by: " + h.getClientUserName()); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/Lobby.java b/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/Lobby.java index 5109794..b6baa9f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/Lobby.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/Lobby.java @@ -71,6 +71,14 @@ public class Lobby { return this.admin; } + /** + * getter for the lobby ID + * @return lobbyID as set in constructor based on number of lobbies. + */ + public int getLobbyID(){ + return this.lobbyID; + } + /** * Adds a player to the lobby. * TODO: ad an appropriate response. Currently hardcoded.