Add: shared actionQueue between ServerLauncher, ServerRMI and ServerTCP
This commit is contained in:
@@ -11,6 +11,7 @@ import java.rmi.registry.LocateRegistry;
|
|||||||
import java.rmi.registry.Registry;
|
import java.rmi.registry.Registry;
|
||||||
import java.rmi.server.UnicastRemoteObject;
|
import java.rmi.server.UnicastRemoteObject;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.BlockingQueue;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
|
||||||
@@ -22,12 +23,14 @@ public class RMIServer implements IGameServer {
|
|||||||
private Registry registry;
|
private Registry registry;
|
||||||
private int nPort;
|
private int nPort;
|
||||||
private final Map<String, IClientCallback> clients = new ConcurrentHashMap<>();
|
private final Map<String, IClientCallback> clients = new ConcurrentHashMap<>();
|
||||||
|
BlockingQueue<NetworkEvent> actionQueue;
|
||||||
|
|
||||||
|
|
||||||
// Costruttore
|
// Costruttore
|
||||||
public RMIServer(GameController controller, int nPort) throws RemoteException {
|
public RMIServer(GameController controller, int nPort, BlockingQueue<NetworkEvent> actionQueue) throws RemoteException {
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
this.nPort = nPort;
|
this.nPort = nPort;
|
||||||
|
this.actionQueue = actionQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -49,13 +52,7 @@ public class RMIServer implements IGameServer {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public boolean doEvent(NetworkEvent event) throws RemoteException {
|
public boolean doEvent(NetworkEvent event) throws RemoteException {
|
||||||
boolean result = event.apply(controller);
|
return actionQueue.offer(event);
|
||||||
if (!result) {
|
|
||||||
notifyError(event.getUsername(),"Mossa non valida");
|
|
||||||
} else {
|
|
||||||
notifyAll(event);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ import java.io.*;
|
|||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.BlockingQueue;
|
||||||
|
|
||||||
public class TCPServer {
|
public class TCPServer {
|
||||||
int port = -1;
|
int port = -1;
|
||||||
int ConnectedPlayers = 0;
|
int ConnectedPlayers = 0;
|
||||||
ServerSocket serverTCP = null;
|
ServerSocket serverTCP = null;
|
||||||
GameController gameController;
|
GameController gameController;
|
||||||
|
BlockingQueue<NetworkEvent> actionQueue;
|
||||||
|
|
||||||
private List<ClientHandler> clientHandlers;
|
private List<ClientHandler> clientHandlers;
|
||||||
|
|
||||||
@@ -80,9 +82,10 @@ public class TCPServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TCPServer(GameController gameController, int port){
|
public TCPServer(GameController gameController, int port, BlockingQueue<NetworkEvent> actionQueue){
|
||||||
this.port = port;
|
this.port = port;
|
||||||
this.gameController = gameController;
|
this.gameController = gameController;
|
||||||
|
this.actionQueue = actionQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastUpdate(NetworkEvent event){
|
public void broadcastUpdate(NetworkEvent event){
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ public class ServerLauncher {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public ServerLauncher(GameController gameController, RMIServer serverRMI, TCPServer serverTCP) {
|
public ServerLauncher(BlockingQueue<NetworkEvent> actionQueue, GameController gameController, RMIServer serverRMI, TCPServer serverTCP) {
|
||||||
this.actionQueue = new LinkedBlockingQueue<>();
|
this.actionQueue = actionQueue;
|
||||||
this.serverRMI = serverRMI;
|
this.serverRMI = serverRMI;
|
||||||
this.gameController = gameController;
|
this.gameController = gameController;
|
||||||
this.serverTCP = serverTCP;
|
this.serverTCP = serverTCP;
|
||||||
@@ -33,30 +33,27 @@ public class ServerLauncher {
|
|||||||
serverTCP.broadcastUpdate(event);
|
serverTCP.broadcastUpdate(event);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} 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
|
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
|
//serverTCP // TODO non esiste un notify error (guarda sopra)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addEvent(NetworkEvent event) {
|
|
||||||
return actionQueue.offer(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public static void main() throws RemoteException {
|
||||||
public static void main(String[] args) throws RemoteException {
|
|
||||||
// TODO
|
// TODO
|
||||||
// Deve avere una coda con gli eventi.
|
// 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
|
// 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
|
// Questa classe esegue gli eventi nella coda e chiama il notify all e notify error sia RMI che TCP
|
||||||
|
|
||||||
|
BlockingQueue<NetworkEvent> actionQueue = new LinkedBlockingQueue<>();
|
||||||
GameController gameController = new GameController();
|
GameController gameController = new GameController();
|
||||||
RMIServer serverRMI = new RMIServer(gameController, 1099);
|
RMIServer serverRMI = new RMIServer(gameController, 1099, actionQueue);
|
||||||
TCPServer serverTCP = new TCPServer(gameController, 8080);
|
TCPServer serverTCP = new TCPServer(gameController, 8080, actionQueue);
|
||||||
|
|
||||||
ServerLauncher launcher = new ServerLauncher(gameController, serverRMI, serverTCP);
|
ServerLauncher launcher = new ServerLauncher(actionQueue, gameController, serverRMI, serverTCP);
|
||||||
launcher.run();
|
launcher.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user