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) {
if(playerList.isEmpty()){
model = new Game(preferredInt);
controller.setModel(model);
playerList.setLimit(preferredInt);
if(controller.getModel() == null){
model = new Game(preferredInt);
controller.setModel(model);
playerList.setLimit(preferredInt);
}
else{
model = controller.getModel();
}
}
if (controller.addPlayer(username)) {
clients.put(username, callback);
@@ -88,57 +88,61 @@ public class TCPServer {
continue;
}
if (playerList.isEmpty()) {
if (playerList.isEmpty()) {
if(controller.getModel() == null){
Game model = new Game(eventAddPlayer.getProposedNPlayer());
controller.setModel(model);
playerList.setLimit(eventAddPlayer.getProposedNPlayer());
}
}
String username = eventAddPlayer.getUsername();
String username = eventAddPlayer.getUsername();
if (controller.addPlayer(username)) {
// nuovo giocatore
playerList.put(username, true);
System.out.println("Accepted player: " + username);
ClientHandler handler = new ClientHandler(
username, clientSocket, clientSend, clientReceive,
clientHandlers,playerList, actionQueue
);
clientSocket.getOutputStream().write(1);
pendingHeartbeat.put(username, handler);
Thread thread = new Thread(handler);
thread.start();
clientHandlers.add(handler);
connectedPlayers++;
// metti in attesa del socket heartbeat
if (controller.addPlayer(username)) {
// nuovo giocatore
playerList.put(username, true);
System.out.println("Accepted player: " + username);
ClientHandler handler = new ClientHandler(
username, clientSocket, clientSend, clientReceive,
clientHandlers,playerList, actionQueue
);
clientSocket.getOutputStream().write(1);
pendingHeartbeat.put(username, handler);
Thread thread = new Thread(handler);
thread.start();
clientHandlers.add(handler);
connectedPlayers++;
// metti in attesa del socket heartbeat
} else if (playerList.containsKey(username) && !playerList.get(username)) {
// riconnessione
playerList.put(username, true);
System.out.println("Reconnected player: " + username);
}
else if(playerList.containsKey(username) && !playerList.get(username)){
// riconnessione
playerList.put(username, true);
System.out.println("Reconnected player: " + username);
ClientHandler handler = new ClientHandler(
username, clientSocket, clientSend, clientReceive,
clientHandlers, playerList, actionQueue
);
clientSocket.getOutputStream().write(1);
pendingHeartbeat.put(username, handler);
handler.notifyModel(controller.getModel());
Thread thread = new Thread(handler);
thread.start();
clientHandlers.add(handler);
connectedPlayers++;
actionQueue.add(new ReconnectPlayer(username));
} else {
clientSocket.getOutputStream().write(-1);
clientSocket.close();
System.out.println("Player could not be added. Connection terminated.");
}
ClientHandler handler = new ClientHandler(
username, clientSocket, clientSend, clientReceive,
clientHandlers, playerList, actionQueue
);
clientSocket.getOutputStream().write(1);
pendingHeartbeat.put(username, handler);
handler.notifyModel(controller.getModel());
Thread thread = new Thread(handler);
thread.start();
clientHandlers.add(handler);
connectedPlayers++;
actionQueue.add(new ReconnectPlayer(username));
}
else{
clientSocket.getOutputStream().write(-1);
clientSocket.close();
System.out.println("Player could not be added. Connection terminated.");
}
} catch (IOException | ClassNotFoundException e) {
}
catch(IOException | ClassNotFoundException e){
e.printStackTrace();
}
}