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 a3336b8..b959a9f 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 @@ -3,6 +3,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.server; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ServerPinger; +import ch.unibas.dmi.dbis.cs108.sebaschi.CentralServerData; import ch.unibas.dmi.dbis.cs108.sebaschi.Lobby; import java.io.*; import java.net.InetAddress; @@ -16,6 +17,8 @@ public class ClientHandler implements Runnable { public static final Logger LOGGER = LogManager.getLogger(); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); + CentralServerData serverData; + private String clientUserName; private BufferedWriter out; private BufferedReader in; @@ -41,8 +44,9 @@ public class ClientHandler implements Runnable { * @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) { + public ClientHandler(Socket socket, InetAddress ip, CentralServerData serverData) { try { + this.serverData = serverData; this.ip = ip; this.socket = socket; this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java index d9c9a93..647e419 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java @@ -13,7 +13,7 @@ import org.apache.logging.log4j.Logger; public class Server { public static final Logger LOGGER = LogManager.getLogger(); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); - private static CentralServerData allData; + private static CentralServerData allData = new CentralServerData(); private static final int gamePort = 42069; private HashSet connectedClients = new HashSet<>(); @@ -32,9 +32,10 @@ public class Server { System.out.println("Port 42069 is open."); while (!serverSocket.isClosed()) { Socket socket = serverSocket.accept(); - ClientHandler nextClient = new ClientHandler(socket, socket.getInetAddress()); + ClientHandler nextClient = new ClientHandler(socket, socket.getInetAddress(), allData); Thread th = new Thread(nextClient); - connectedClients.add(nextClient); + connectedClients.add(nextClient); // will leave be for now + allData.addClientToSetOfAllClients(nextClient); th.start(); } } catch (IOException e) { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/CentralServerData.java b/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/CentralServerData.java index 89f59f4..b085635 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/CentralServerData.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/sebaschi/CentralServerData.java @@ -1,8 +1,6 @@ package ch.unibas.dmi.dbis.cs108.sebaschi; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.gamelogic.Game; -import ch.unibas.dmi.dbis.cs108.multiplayer.client.Client; import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import java.net.Socket; import java.util.ArrayList; @@ -25,7 +23,6 @@ public class CentralServerData { public static final BudaLogConfig l = new BudaLogConfig(LOGGER); private Set clientsOnServer; - private List allLobbies; private Map lobbyIDMap; @@ -49,11 +46,11 @@ public class CentralServerData { * Used to add the client to the set of all clients on server. * @param client */ - public void addClientToSetOfAllClients(ClientHandler client) { + public synchronized void addClientToSetOfAllClients(ClientHandler client) { this.getClientsOnServer().add(client); } - public void removeClientFromSetOfAllClients(){ + public synchronized void removeClientFromSetOfAllClients(){ //TODO implement or make sure something equivalent is implemented somewhere else } @@ -65,6 +62,10 @@ public class CentralServerData { return allLobbies; } + public synchronized void addLobbyToListOfAllLobbies(Lobby lobby) { + allLobbies.add(lobby); + } + /** * Mapping from an Integer that repesents a LobbyID to the lobby * should be set in {@link Lobby} and is then used by clients to join a lobby.