Add: first implementation of ServerLauncher
This commit is contained in:
@@ -63,17 +63,17 @@ public class RMIServer implements IGameServer {
|
|||||||
|
|
||||||
|
|
||||||
// Metodi interni del server
|
// Metodi interni del server
|
||||||
private void notifyAll(NetworkEvent action) throws RemoteException {
|
public void notifyAll(NetworkEvent action) throws RemoteException {
|
||||||
for (IClientCallback cb : clients.values()) {
|
for (IClientCallback cb : clients.values()) {
|
||||||
cb.onAction(action);
|
cb.onAction(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void notifyAll(Game model) throws RemoteException {
|
public void notifyAll(Game model) throws RemoteException {
|
||||||
for (IClientCallback cb : clients.values()) {
|
for (IClientCallback cb : clients.values()) {
|
||||||
cb.onGameInit(model);
|
cb.onGameInit(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void notifyError(String username, String message) throws RemoteException {
|
public void notifyError(String username, String message) throws RemoteException {
|
||||||
IClientCallback cb = clients.get(username);
|
IClientCallback cb = clients.get(username);
|
||||||
if (cb != null) cb.onError(message);
|
if (cb != null) cb.onError(message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public class TCPServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private TCPServer(GameController gameController, int port){
|
public TCPServer(GameController gameController, int port){
|
||||||
this.port = port;
|
this.port = port;
|
||||||
this.gameController = gameController;
|
this.gameController = gameController;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,75 @@
|
|||||||
package it.polimi.ingsw.gc14;
|
package it.polimi.ingsw.gc14;
|
||||||
|
|
||||||
|
|
||||||
|
import it.polimi.ingsw.gc14.Controller.GameController;
|
||||||
|
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
||||||
|
import it.polimi.ingsw.gc14.Network.RMI.Server.RMIServer;
|
||||||
|
import it.polimi.ingsw.gc14.Network.TCP.Server.TCPServer;
|
||||||
|
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
import java.util.concurrent.BlockingQueue;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
public class ServerLauncher {
|
public class ServerLauncher {
|
||||||
public static void main(String[] args){
|
BlockingQueue<NetworkEvent> actionQueue;
|
||||||
|
GameController gameController;
|
||||||
|
RMIServer serverRMI;
|
||||||
|
TCPServer serverTCP;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public ServerLauncher(GameController gameController, RMIServer serverRMI, TCPServer serverTCP) {
|
||||||
|
this.actionQueue = new LinkedBlockingQueue<>();
|
||||||
|
this.serverRMI = serverRMI;
|
||||||
|
this.gameController = gameController;
|
||||||
|
this.serverTCP = serverTCP;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean doFirstEven() throws InterruptedException, RemoteException {
|
||||||
|
if(!actionQueue.isEmpty()) {
|
||||||
|
NetworkEvent event = actionQueue.take();
|
||||||
|
if(event.apply(gameController)) {
|
||||||
|
serverRMI.notifyAll(event);
|
||||||
|
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
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addEvent(NetworkEvent event) {
|
||||||
|
return actionQueue.offer(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
GameController gameController = new GameController();
|
||||||
|
RMIServer serverRMI = new RMIServer(gameController, 1099);
|
||||||
|
TCPServer serverTCP = new TCPServer(gameController, 8080);
|
||||||
|
|
||||||
|
ServerLauncher launcher = new ServerLauncher(gameController, serverRMI, serverTCP);
|
||||||
|
launcher.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
this.doFirstEven();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
break;
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user