From 39457df5f0fceb13e3a4d5795504e27d9782756a Mon Sep 17 00:00:00 2001 From: AleandroPagani Date: Fri, 24 Apr 2026 11:55:06 +0200 Subject: [PATCH] Add: shared actionQueue between ServerLauncher, ServerRMI and ServerTCP --- .../gc14/Network/RMI/Server/RMIServer.java | 13 +++++------- .../gc14/Network/TCP/Server/TCPServer.java | 5 ++++- .../it/polimi/ingsw/gc14/ServerLauncher.java | 21 ++++++++----------- 3 files changed, 18 insertions(+), 21 deletions(-) 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 0c4fd8d..d81eb96 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 @@ -11,6 +11,7 @@ import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import java.util.Map; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; @@ -22,12 +23,14 @@ public class RMIServer implements IGameServer { private Registry registry; private int nPort; private final Map clients = new ConcurrentHashMap<>(); + BlockingQueue actionQueue; // Costruttore - public RMIServer(GameController controller, int nPort) throws RemoteException { + public RMIServer(GameController controller, int nPort, BlockingQueue actionQueue) throws RemoteException { this.controller = controller; this.nPort = nPort; + this.actionQueue = actionQueue; } @@ -49,13 +52,7 @@ public class RMIServer implements IGameServer { } @Override public boolean doEvent(NetworkEvent event) throws RemoteException { - boolean result = event.apply(controller); - if (!result) { - notifyError(event.getUsername(),"Mossa non valida"); - } else { - notifyAll(event); - } - return result; + return actionQueue.offer(event); } 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 970d032..8421d0e 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 @@ -7,12 +7,14 @@ import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.BlockingQueue; public class TCPServer { int port = -1; int ConnectedPlayers = 0; ServerSocket serverTCP = null; GameController gameController; + BlockingQueue actionQueue; private List clientHandlers; @@ -80,9 +82,10 @@ public class TCPServer { } } - public TCPServer(GameController gameController, int port){ + public TCPServer(GameController gameController, int port, BlockingQueue actionQueue){ this.port = port; this.gameController = gameController; + this.actionQueue = actionQueue; } public void broadcastUpdate(NetworkEvent event){ diff --git a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java index 14d4c4d..8658dde 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java +++ b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java @@ -18,8 +18,8 @@ public class ServerLauncher { - public ServerLauncher(GameController gameController, RMIServer serverRMI, TCPServer serverTCP) { - this.actionQueue = new LinkedBlockingQueue<>(); + public ServerLauncher(BlockingQueue actionQueue, GameController gameController, RMIServer serverRMI, TCPServer serverTCP) { + this.actionQueue = actionQueue; this.serverRMI = serverRMI; this.gameController = gameController; this.serverTCP = serverTCP; @@ -33,30 +33,27 @@ public class ServerLauncher { serverTCP.broadcastUpdate(event); return true; } else { - //serverRMI.notifyError(); // TODO difficile trovare username. Converrebbe mettere in network event un booleano che dice se è stato accettato e fare una notifyAll anche per errori - //serverTCP // TODO non esiste un notify error + serverRMI.notifyError(event.getUsername(), "Mossa non valida"); // TODO Converrebbe mettere in network event un booleano che dice se è stato accettato e fare una notifyAll anche per errori + //serverTCP // TODO non esiste un notify error (guarda sopra) return false; } } return false; } - public boolean addEvent(NetworkEvent event) { - return actionQueue.offer(event); - } - - public static void main(String[] args) throws RemoteException { + public static void main() throws RemoteException { // TODO // Deve avere una coda con gli eventi. // Il server RMI e il server TCP quando ricevono un doEvent devono aggiungere l'evento alla coda condivisa // Questa classe esegue gli eventi nella coda e chiama il notify all e notify error sia RMI che TCP + BlockingQueue actionQueue = new LinkedBlockingQueue<>(); GameController gameController = new GameController(); - RMIServer serverRMI = new RMIServer(gameController, 1099); - TCPServer serverTCP = new TCPServer(gameController, 8080); + RMIServer serverRMI = new RMIServer(gameController, 1099, actionQueue); + TCPServer serverTCP = new TCPServer(gameController, 8080, actionQueue); - ServerLauncher launcher = new ServerLauncher(gameController, serverRMI, serverTCP); + ServerLauncher launcher = new ServerLauncher(actionQueue, gameController, serverRMI, serverTCP); launcher.run(); }