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 babc276..08e7c1b 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 @@ -103,16 +103,18 @@ public class RMIClient implements IClient { stub.ping(username); } catch (RemoteException e) { disconnect(); + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); } }); try { future.get(PING_TIMEOUT_MS, TimeUnit.MILLISECONDS); // mirrors setSoTimeout(5000) } catch (TimeoutException e) { future.cancel(true); - //error sending + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); disconnect(); } catch (Exception e) { disconnect(); + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); } }, 0, PING_INTERVAL_S, TimeUnit.SECONDS); } @@ -128,7 +130,6 @@ public class RMIClient implements IClient { if (pingSender != null) pingSender.shutdownNow(); controller.miniModel=null; controller.setClient(null); - controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); } 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 8182ec4..6091937 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 @@ -121,7 +121,12 @@ public class TCPClient implements IClient { } catch (IOException e) { sender.shutdownNow(); - disconnect(); + if(running) + { + disconnect(); + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); + } + } }, 0, 3, TimeUnit.SECONDS); @@ -131,6 +136,7 @@ public class TCPClient implements IClient { int b = heartbeatIn.read(); if (b == -1 || b != PONG) { disconnect(); + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); break; } // pong ricevuto → server vivo @@ -138,8 +144,15 @@ public class TCPClient implements IClient { } catch (SocketTimeoutException e) { System.out.println("Server heartbeat timeout"); disconnect(); + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); + } catch (IOException e) { - disconnect(); + if(running) + { + disconnect(); + controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); + } + } finally { sender.shutdownNow(); } @@ -151,7 +164,6 @@ public class TCPClient implements IClient { try { heartbeatSocket.close(); } catch (IOException ignored) {} controller.setClient(null); controller.setModel(null); - controller.view.showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString()); } @@ -168,7 +180,6 @@ public class TCPClient implements IClient { try { read = socketReceive.readObject(); } catch (IOException e) { - e.printStackTrace(); break; } diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/GUI.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/GUI.java index feb66be..994cdfe 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/GUI.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/GUI.java @@ -62,7 +62,10 @@ public class GUI extends Application implements IView { loaderLeaderboard = new FXMLLoader(getClass().getResource("/GUIScene/standing.fxml")); leaderboardScene = new Scene(loaderLeaderboard.load()); controllerLeaderboard = loaderLeaderboard.getController(); - controllerLeaderboard.setController(controller,primaryStage,loginScene); + controllerLeaderboard.setController(controller,()->{ + primaryStage.setScene(loginScene); + controllerLogin.showError(""); + },loginScene); diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java index 8e5b716..13f82ae 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java @@ -46,6 +46,7 @@ public class LeaderboardFXMLController { private static final Map imageCache = new HashMap<>(); private Scene loginScene; private Stage primaryStage; + private Runnable action; private Image loadImage(String path) { return imageCache.computeIfAbsent(path, @@ -53,10 +54,10 @@ public class LeaderboardFXMLController { } - public void setController(ClientController controller, Stage primaryStage, Scene loginScene) { + public void setController(ClientController controller, Runnable action, Scene loginScene) { this.controller = controller; this.loginScene=loginScene; - this.primaryStage=primaryStage; + this.action=action; } @@ -363,6 +364,6 @@ public class LeaderboardFXMLController { @FXML private void onNewGame() { controller.disconnect(); - primaryStage.setScene(loginScene); + action.run(); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java index 8307a7b..aa14fed 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java @@ -176,7 +176,7 @@ public class LoginFXMLController { labelErrore.setTextFill(Color.web("#e05050")); labelErrore.setText(errorType.toString()); } - private void showError(String msg) { + public void showError(String msg) { labelErrore.setTextFill(Color.web("#e05050")); labelErrore.setText(msg); }