From 75ec382fb7528493237ebb53c2a8ee24140a373d Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Wed, 16 Dec 2020 18:00:03 +0100 Subject: [PATCH] improve user disconnection detection --- .../users/UserActiveIndicatorController.java | 21 ++++++++++--------- .../fr/insa/clavardator/users/PeerUser.java | 8 ++----- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java b/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java index 6c4c987..6ce832a 100644 --- a/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java +++ b/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java @@ -1,6 +1,7 @@ package fr.insa.clavardator.ui.users; import fr.insa.clavardator.users.PeerUser; +import fr.insa.clavardator.util.Log; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.shape.Circle; @@ -20,20 +21,20 @@ public class UserActiveIndicatorController implements Initializable { } - private void updateState() { - if (user != null) { - circle.getStyleClass().clear(); - if (user.isActive()) { - circle.getStyleClass().add("active-user-dot"); - } else { - circle.getStyleClass().add("inactive-user-dot"); - } + private void updateState(boolean isActive) { + circle.getStyleClass().clear(); + if (isActive) { + circle.getStyleClass().add("active-user-dot"); + } else { + circle.getStyleClass().add("inactive-user-dot"); } } private void onStateChange(PropertyChangeEvent propertyChangeEvent) { if (propertyChangeEvent.getPropertyName().equals("state")) { - updateState(); + final PeerUser.State newState = (PeerUser.State) propertyChangeEvent.getNewValue(); + Log.v(this.getClass().getSimpleName(), "User state updated to " + newState.toString()); + updateState(newState == PeerUser.State.CONNECTED); } } @@ -44,7 +45,7 @@ public class UserActiveIndicatorController implements Initializable { } this.user = user; user.addObserver(this::onStateChange); - updateState(); + updateState(user.isActive()); } public void setSize(double value) { diff --git a/src/main/java/fr/insa/clavardator/users/PeerUser.java b/src/main/java/fr/insa/clavardator/users/PeerUser.java index 1329577..5240258 100644 --- a/src/main/java/fr/insa/clavardator/users/PeerUser.java +++ b/src/main/java/fr/insa/clavardator/users/PeerUser.java @@ -129,10 +129,10 @@ public class PeerUser extends User implements Comparable { } }, e -> { - Log.e(this.getClass().getSimpleName(), "Error receiving message from " + id, e); if (e instanceof EOFException) { disconnect(); } else { + Log.e(this.getClass().getSimpleName(), "Error receiving message from " + id, e); errorCallback.onError(e); } }); @@ -158,10 +158,6 @@ public class PeerUser extends User implements Comparable { return history; } - public State getState() { - return state; - } - private void setState(State state) { pcs.firePropertyChange("state", this.state, state); this.state = state; @@ -181,7 +177,7 @@ public class PeerUser extends User implements Comparable { return getUsername().compareTo(peerUser.getUsername()); } - enum State { + public enum State { CONNECTING, CONNECTED, DISCONNECTED,