Fix: Fixed Model Setting Logic In RMIServer.java And TCPServer.java When A Game Is Restored From Disk.

This commit is contained in:
GabrieleRadice
2026-05-08 19:34:20 +02:00
parent 506e6677af
commit 875a986602
2 changed files with 52 additions and 43 deletions
@@ -83,9 +83,14 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer {
} }
synchronized (controller) { synchronized (controller) {
if(playerList.isEmpty()){ if(playerList.isEmpty()){
model = new Game(preferredInt); if(controller.getModel() == null){
controller.setModel(model); model = new Game(preferredInt);
playerList.setLimit(preferredInt); controller.setModel(model);
playerList.setLimit(preferredInt);
}
else{
model = controller.getModel();
}
} }
if (controller.addPlayer(username)) { if (controller.addPlayer(username)) {
clients.put(username, callback); clients.put(username, callback);
@@ -88,57 +88,61 @@ public class TCPServer {
continue; continue;
} }
if (playerList.isEmpty()) {
if (playerList.isEmpty()) { if(controller.getModel() == null){
Game model = new Game(eventAddPlayer.getProposedNPlayer()); Game model = new Game(eventAddPlayer.getProposedNPlayer());
controller.setModel(model); controller.setModel(model);
playerList.setLimit(eventAddPlayer.getProposedNPlayer()); playerList.setLimit(eventAddPlayer.getProposedNPlayer());
} }
}
String username = eventAddPlayer.getUsername(); String username = eventAddPlayer.getUsername();
if (controller.addPlayer(username)) { if (controller.addPlayer(username)) {
// nuovo giocatore // nuovo giocatore
playerList.put(username, true); playerList.put(username, true);
System.out.println("Accepted player: " + username); System.out.println("Accepted player: " + username);
ClientHandler handler = new ClientHandler( ClientHandler handler = new ClientHandler(
username, clientSocket, clientSend, clientReceive, username, clientSocket, clientSend, clientReceive,
clientHandlers,playerList, actionQueue clientHandlers,playerList, actionQueue
); );
clientSocket.getOutputStream().write(1); clientSocket.getOutputStream().write(1);
pendingHeartbeat.put(username, handler); pendingHeartbeat.put(username, handler);
Thread thread = new Thread(handler); Thread thread = new Thread(handler);
thread.start(); thread.start();
clientHandlers.add(handler); clientHandlers.add(handler);
connectedPlayers++; connectedPlayers++;
// metti in attesa del socket heartbeat // metti in attesa del socket heartbeat
} else if (playerList.containsKey(username) && !playerList.get(username)) { }
// riconnessione else if(playerList.containsKey(username) && !playerList.get(username)){
playerList.put(username, true); // riconnessione
System.out.println("Reconnected player: " + username); playerList.put(username, true);
System.out.println("Reconnected player: " + username);
ClientHandler handler = new ClientHandler( ClientHandler handler = new ClientHandler(
username, clientSocket, clientSend, clientReceive, username, clientSocket, clientSend, clientReceive,
clientHandlers, playerList, actionQueue clientHandlers, playerList, actionQueue
); );
clientSocket.getOutputStream().write(1); clientSocket.getOutputStream().write(1);
pendingHeartbeat.put(username, handler); pendingHeartbeat.put(username, handler);
handler.notifyModel(controller.getModel()); handler.notifyModel(controller.getModel());
Thread thread = new Thread(handler); Thread thread = new Thread(handler);
thread.start(); thread.start();
clientHandlers.add(handler); clientHandlers.add(handler);
connectedPlayers++; connectedPlayers++;
actionQueue.add(new ReconnectPlayer(username)); actionQueue.add(new ReconnectPlayer(username));
} else { }
clientSocket.getOutputStream().write(-1); else{
clientSocket.close(); clientSocket.getOutputStream().write(-1);
System.out.println("Player could not be added. Connection terminated."); clientSocket.close();
} System.out.println("Player could not be added. Connection terminated.");
}
} catch (IOException | ClassNotFoundException e) { }
catch(IOException | ClassNotFoundException e){
e.printStackTrace(); e.printStackTrace();
} }
} }