This commit is contained in:
GabrieleRadice
2026-04-24 18:37:18 +02:00
6 changed files with 108 additions and 22 deletions
@@ -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;
@@ -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;
}
@@ -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<String, IClientCallback> clients = new ConcurrentHashMap<>();
BlockingQueue<NetworkEvent> actionQueue;
private LimitedList<String> playerList;
// Costruttore
public RMIServer(GameController controller, int nPort, BlockingQueue<NetworkEvent> actionQueue) throws RemoteException {
public RMIServer(GameController controller, int nPort, BlockingQueue<NetworkEvent> actionQueue,LimitedList<String> 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.setLimit(preferredInt);
}
playerList.add(username);
clients.put(username, callback);
return true;
}
return false;
}
return false;
}
@Override
public boolean doEvent(NetworkEvent event) throws RemoteException {