diff --git a/src/main/java/it/polimi/ingsw/gc14/ErrorType.java b/src/main/java/it/polimi/ingsw/gc14/ErrorType.java index 8f92add..df3e1bc 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ErrorType.java +++ b/src/main/java/it/polimi/ingsw/gc14/ErrorType.java @@ -10,6 +10,8 @@ public enum ErrorType { WRONG_PLAYER_NUMBER("Wrong player number"), /** The server has crashed or become unreachable. */ SERVER_CRASHED("Server crashed"), + /** The server is unreachable. */ + SERVER_UNREACHABLE("Server unreachable"), /** A generic, unclassified error occurred. */ GENERIC_ERROR("Generic error"), /** The game has already started and cannot accept new players. */ diff --git a/src/main/java/it/polimi/ingsw/gc14/GameEventProcessor.java b/src/main/java/it/polimi/ingsw/gc14/GameEventProcessor.java index a8aae23..08ae45c 100644 --- a/src/main/java/it/polimi/ingsw/gc14/GameEventProcessor.java +++ b/src/main/java/it/polimi/ingsw/gc14/GameEventProcessor.java @@ -208,6 +208,9 @@ public class GameEventProcessor { if (!saveManager.save(game)) { System.out.println("\n!!! Save failed !!!\n"); } + else { + System.out.println(event.getUsername()+": "+ event.getEventType() + " save successful."); + } // During the lobby phase a disconnection only removes the player // from the list; no broadcast is needed. @@ -268,12 +271,14 @@ public class GameEventProcessor { if (disconnectionTimer != null && !disconnectionTimer.isDone()) { disconnectionTimer.cancel(false); + System.out.println("Disconnection TIMER reset"); } disconnectionTimer = timerExecutor.schedule( () -> endGameForfeit(game), 1, TimeUnit.MINUTES ); + System.out.println("Disconnection TIMER started, 60 seconds from now..." ); } /** diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 9171afc..732463e 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -162,6 +162,7 @@ public class Game implements Serializable { nextPlayerSetup(); } else { + totemChoiceQueue.removeIf(x->x.getUserName().equals(player.getUserName())); if (totemChoiceQueue.isEmpty()) { player.setTotem(getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size()))); } else { @@ -207,6 +208,11 @@ public class Game implements Serializable { disconnectedPlayers.remove(player); } } + else if(currentState.getGameStage() == GameStages.TOTEM_CHOICE) + { + totemChoiceQueue.removeIf(x->x.getUserName().equals(player.getUserName())); + totemChoiceQueue.add(player); + } return true; } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java index ca3951f..5475951 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Client/RMIClient.java @@ -70,7 +70,7 @@ public class RMIClient implements IClient { return status; } catch (Exception e) { e.printStackTrace(); - return ErrorType.GENERIC_ERROR; + return ErrorType.SERVER_UNREACHABLE; } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIHeartbeat.java b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIHeartbeat.java index e77a5b6..961ddd0 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIHeartbeat.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIHeartbeat.java @@ -98,6 +98,6 @@ public class RMIHeartbeat { clients.remove(username); actionQueue.add(new DisconnectedPlayer(username)); - System.out.println("RMI disconnected: " + username); + System.err.println("(RMI) Disconnected player: " + username); } } \ No newline at end of file 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 1fcc083..14e2c80 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 @@ -96,7 +96,7 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer { if (playerList.isEmpty() &&(controller.getModel()==null || controller.getModel().getCurrentState().getGameStage().equals(GameStages.WAITING))) { controller.setModel(new Game(preferredInt)); playerList.setLimit(preferredInt); - System.out.println("Game Created With :"+preferredInt+" Players"); + System.out.println("Game Created With: "+preferredInt+" Players"); } if(controller.getModel().getCurrentState().getGameStage()!= GameStages.WAITING ) { if (controller.getModel().getPlayers().stream().noneMatch(p -> p.getUserName().equals(username))|| controller.getModel().getCurrentState().getGameStage()==GameStages.ENDED) { @@ -107,8 +107,9 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer { if (controller.addPlayer(username)) { clients.put(username, callback); playerList.put(username, true); - startWatchdog(username); System.out.println("Accepted player: " + username); + startWatchdog(username); + System.out.println("Heartbeat connected for: " + username); return null; } else { return ErrorType.USERNAME_ALREADY_USED; @@ -119,8 +120,9 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer { if(!playerList.containsKey(username)){ clients.put(username, callback); playerList.put(username, true); - startWatchdog(username); System.out.println("(After crash)Reconnected player: " + username); + startWatchdog(username); + System.out.println("Heartbeat connected for: " + username); return null; } else { @@ -130,6 +132,7 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer { clients.put(username, callback); System.out.println("Reconnected player: " + username); startWatchdog(username); + System.out.println("Heartbeat connected for: " + username); Game game = controller.getModel(); callback.onGameInit(new MiniModel( game.getSlotMap(), game.getOrderLogicCard(), game.getCurrentState(), diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java index c6868b6..9bb6183 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java @@ -105,7 +105,7 @@ public class TCPClient implements IClient { } catch (IOException e) { e.printStackTrace(); - return ErrorType.GENERIC_ERROR; + return ErrorType.SERVER_UNREACHABLE; } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java index f74cb8f..c7a82a6 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java @@ -91,7 +91,6 @@ public class ClientHandler implements Runnable { } } } catch (IOException e) { - System.err.println("Error in incoming connection/disconnection: " + username); } catch (ClassNotFoundException e) { System.err.println("Class not found: " + username); } finally { @@ -144,7 +143,7 @@ public class ClientHandler implements Runnable { clientHandlers.remove(this); limitedMap.put(username, false); actionQueue.add(new DisconnectedPlayer(username)); - System.out.println("Disconnected player: " + username); + System.err.println("(TCP) Disconnected player: " + username); try { clientSocket.close(); } catch (IOException ignored) {} } } \ No newline at end of file diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/HeartbeatHandler.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/HeartbeatHandler.java index 16e6a58..fbb2447 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/HeartbeatHandler.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/HeartbeatHandler.java @@ -124,8 +124,7 @@ public class HeartbeatHandler implements Runnable { private synchronized void disconnect() { running = false; watchdog.shutdownNow(); - mainHandler.disconnect(); // disconnette anche il socket principale - System.out.println("Disconnected: " + username); + mainHandler.disconnect(); try { socket.close(); } catch (IOException ignored) {} } } 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 63779e3..9ab2df7 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 @@ -164,7 +164,7 @@ public class TCPServer { Game model = new Game(eventAddPlayer.getProposedNPlayer()); controller.setModel(model); playerList.setLimit(eventAddPlayer.getProposedNPlayer()); - System.out.println("Game Created With :"+eventAddPlayer.getProposedNPlayer()+" Players"); + System.out.println("Game Created With: "+eventAddPlayer.getProposedNPlayer()+" Players"); } if(controller.getModel().getCurrentState().getGameStage()!= GameStages.WAITING ) { if (controller.getModel().getPlayers().stream().noneMatch(p -> p.getUserName().equals(username))|| controller.getModel().getCurrentState().getGameStage()==GameStages.ENDED) { diff --git a/src/main/java/it/polimi/ingsw/gc14/SaveManager.java b/src/main/java/it/polimi/ingsw/gc14/SaveManager.java index f699164..ee6f996 100644 --- a/src/main/java/it/polimi/ingsw/gc14/SaveManager.java +++ b/src/main/java/it/polimi/ingsw/gc14/SaveManager.java @@ -65,7 +65,6 @@ public class SaveManager { try (ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(new FileOutputStream(filePath.toFile())))) { oos.writeObject(game); - System.out.println("Game saved to: " + filePath.toAbsolutePath()); return true; } } catch (IOException e) {