Fix: Fixed Player Adding Logic In TCPServer.java.

This commit is contained in:
GabrieleRadice
2026-04-24 18:50:21 +02:00
parent ed18008525
commit ce75e470c2
@@ -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<NetworkEvent> actionQueue;
private LimitedList<String> playerList;
private List<ClientHandler> clientHandlers;
@@ -48,16 +49,33 @@ 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)){
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{
actionQueue.add(event);
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
}
catch(IOException e){
@@ -93,10 +111,11 @@ public class TCPServer {
}
}
public TCPServer(GameController gameController, int port, BlockingQueue<NetworkEvent> actionQueue){
public TCPServer(GameController gameController, int port, BlockingQueue<NetworkEvent> actionQueue, LimitedList<String> players){
this.port = port;
this.gameController = gameController;
this.actionQueue = actionQueue;
this.playerList = players;
}
public void broadcastUpdate(NetworkEvent event){