diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java index b1ab13d..96ac01a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java @@ -1,6 +1,7 @@ package it.polimi.ingsw.gc14.Network.TCP.Server; import it.polimi.ingsw.gc14.Controller.GameController; +import it.polimi.ingsw.gc14.LimitedList; import it.polimi.ingsw.gc14.Model.Game; import it.polimi.ingsw.gc14.Network.NetworkEvent; import it.polimi.ingsw.gc14.Network.NetworkEvents.AddPlayer; @@ -18,7 +19,7 @@ public class TCPServer { ServerSocket serverTCP = null; GameController gameController; BlockingQueue actionQueue; - + private LimitedList playerList; private List clientHandlers; @@ -48,15 +49,32 @@ public class TCPServer { ObjectInputStream clientSocketObj = new ObjectInputStream(clientSocket.getInputStream()); NetworkEvent event = (NetworkEvent) clientSocketObj.readObject(); - //sincronizzazione su gameController - if(!(event instanceof AddPlayer) || (ConnectedPlayers >= gameController.getModel().getCurrentPlayerNumber() && gameController.getModel() != null)){ - clientSocket.getOutputStream().write((int)(-1)); - clientSocket.close(); - System.out.println("Invalid parameters. Connection terminated.\n"); - } - else{ - actionQueue.add(event); - clientSocket.getOutputStream().write((int)(1)); + synchronized (gameController){ + if(!(event instanceof AddPlayer) || (gameController.getModel() != null && gameController.getModel().getCurrentPlayerNumber() >= gameController.getModel().getNPlayers())){ + clientSocket.getOutputStream().write((int)(-1)); + clientSocket.close(); + System.out.println("Invalid parameters. Connection terminated.\n"); + } + else{ + synchronized (gameController) { + AddPlayer addPlayer = (AddPlayer) event; + if(playerList.isEmpty() && (addPlayer.getProposedNPlayer() < 2 || addPlayer.getProposedNPlayer() > 5)){ + clientSocket.getOutputStream().write((int)(-1)); + clientSocket.close(); + System.out.println("Invalid parameters. Connection terminated.\n"); + } + else if(gameController.addPlayer(addPlayer.getUsername())){ + if(playerList.isEmpty()){ + Game game = new Game(addPlayer.getProposedNPlayer()); + gameController.setModel(game); + playerList.setLimit(addPlayer.getProposedNPlayer()); + } + playerList.add(addPlayer.getUsername()); + clientSocket.getOutputStream().write((int)(1)); + } + } + + } } // gestione di ADD_PLAYER } @@ -93,10 +111,11 @@ public class TCPServer { } } - public TCPServer(GameController gameController, int port, BlockingQueue actionQueue){ + public TCPServer(GameController gameController, int port, BlockingQueue actionQueue, LimitedList players){ this.port = port; this.gameController = gameController; this.actionQueue = actionQueue; + this.playerList = players; } public void broadcastUpdate(NetworkEvent event){