diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java index ac0e14b..8d0721c 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java @@ -18,7 +18,7 @@ public class RMIClient { } - public boolean connect(String username,ClientController clientController) { + public boolean connect(String username,int preferredInt,ClientController clientController) { // 1. Connettiti al registry try { Registry registry = LocateRegistry.getRegistry(host, port); @@ -29,7 +29,7 @@ public class RMIClient { // 3. Crea il callback e registralo ClientCallbackImpl callback = new ClientCallbackImpl(clientController); - if (!stub.joinGame(username, callback)) + if (!stub.joinGame(username,preferredInt, callback)) { stub = null; return false; diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Common/IGameServer.java b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Common/IGameServer.java index 8bcaff6..7a1ef25 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Common/IGameServer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Common/IGameServer.java @@ -6,7 +6,7 @@ import java.rmi.*; public interface IGameServer extends Remote { - boolean joinGame(String username, IClientCallback callback) throws RemoteException; + boolean joinGame(String username,int preferredInt, IClientCallback callback) throws RemoteException; boolean doEvent(NetworkEvent event) throws RemoteException; } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java index d81eb96..9e3d0e8 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java @@ -1,6 +1,7 @@ package it.polimi.ingsw.gc14.Network.RMI.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.RMI.Common.IClientCallback; @@ -24,31 +25,43 @@ public class RMIServer implements IGameServer { private int nPort; private final Map clients = new ConcurrentHashMap<>(); BlockingQueue actionQueue; - + private LimitedList playerList; // Costruttore - public RMIServer(GameController controller, int nPort, BlockingQueue actionQueue) throws RemoteException { + public RMIServer(GameController controller, int nPort, BlockingQueue actionQueue,LimitedList playerList) throws RemoteException { this.controller = controller; this.nPort = nPort; this.actionQueue = actionQueue; + this.playerList = playerList; } + // Metodi esposti RMI public void setController (GameController controller) { this.controller = controller; } @Override - public boolean joinGame(String username, IClientCallback callback) { - if(controller.addPlayer(username)) - { - clients.put(username, callback); - return true; + public boolean joinGame(String username, int preferredInt,IClientCallback callback) { + synchronized (controller) { + if(playerList.size()==0 && (preferredInt<2||preferredInt>5)) + return false; + if (controller.addPlayer(username)) { + if(playerList.size()==0) + { + Game game= new Game(preferredInt); + controller.setModel(game); + playerList.setElement(preferredInt); + } + playerList.add(username); + clients.put(username, callback); + return true; + } + return false; } - return false; } @Override public boolean doEvent(NetworkEvent event) throws RemoteException {