Compare commits

...

2 commits

Author SHA1 Message Date
Arnaud Vergnet
81673e44b3 Fix username not updating on user list 2020-12-16 18:21:09 +01:00
Arnaud Vergnet
7075c9e0b6 Fix user duplication on new session start 2020-12-16 18:20:56 +01:00
3 changed files with 23 additions and 12 deletions

View file

@ -34,7 +34,6 @@ public class UserActiveIndicatorController implements Initializable {
private void onStateChange(PropertyChangeEvent propertyChangeEvent) { private void onStateChange(PropertyChangeEvent propertyChangeEvent) {
if (propertyChangeEvent.getPropertyName().equals("state")) { if (propertyChangeEvent.getPropertyName().equals("state")) {
final PeerUser.State newState = (PeerUser.State) propertyChangeEvent.getNewValue(); final PeerUser.State newState = (PeerUser.State) propertyChangeEvent.getNewValue();
Log.v(this.getClass().getSimpleName(), "User state updated to " + newState.toString());
Platform.runLater(() -> updateState(newState == PeerUser.State.CONNECTED)); Platform.runLater(() -> updateState(newState == PeerUser.State.CONNECTED));
} }
} }

View file

@ -3,9 +3,11 @@ package fr.insa.clavardator.ui.users;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import fr.insa.clavardator.ui.ButtonPressEvent; import fr.insa.clavardator.ui.ButtonPressEvent;
import fr.insa.clavardator.users.PeerUser; import fr.insa.clavardator.users.PeerUser;
import javafx.application.Platform;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import java.beans.PropertyChangeEvent;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -42,8 +44,21 @@ public class UserListItemController implements Initializable {
resetBackground(); resetBackground();
} }
private void onUsernameChange(PropertyChangeEvent propertyChangeEvent) {
if (propertyChangeEvent.getPropertyName().equals("username")) {
final String newUsername = (String) propertyChangeEvent.getNewValue();
Platform.runLater(() -> button.setText(newUsername));
}
}
public void setUser(PeerUser user) { public void setUser(PeerUser user) {
if (this.user != null) {
// remove old observer before setting new user
this.user.removeObserver(this::onUsernameChange);
}
this.user = user; this.user = user;
user.addObserver(this::onUsernameChange);
indicatorController.setUser(user); indicatorController.setUser(user);
button.setText(user.getUsername()); button.setText(user.getUsername());
resetBackground(); resetBackground();

View file

@ -40,10 +40,8 @@ public class UserList {
Log.v(this.getClass().getSimpleName(), "Discovered new user: " + id); Log.v(this.getClass().getSimpleName(), "Discovered new user: " + id);
final PeerUser finalUser = createNewUser(id); final PeerUser finalUser = createNewUser(id);
if (finalUser != null) { if (finalUser != null) {
finalUser.connect(ipAddr, () -> { finalUser.connect(ipAddr, () ->
notifyNewUserObservers(finalUser); finalUser.addObserver(evt -> userChangeObserver(finalUser, evt)), errorCallback);
finalUser.addObserver(evt -> userChangeObserver(finalUser, evt));
}, errorCallback);
} }
}, errorCallback); }, errorCallback);
} }
@ -62,10 +60,8 @@ public class UserList {
Log.v(this.getClass().getSimpleName(), "new connection from user: " + id); Log.v(this.getClass().getSimpleName(), "new connection from user: " + id);
final PeerUser finalUser = createNewUser(id); final PeerUser finalUser = createNewUser(id);
if (finalUser != null) { if (finalUser != null) {
finalUser.connect(clientSocket, () -> { finalUser.connect(clientSocket, () ->
notifyNewUserObservers(finalUser); finalUser.addObserver(evt -> userChangeObserver(finalUser, evt)), errorCallback);
finalUser.addObserver(evt -> userChangeObserver(finalUser, evt));
}, errorCallback);
} }
}, },
errorCallback); errorCallback);
@ -84,8 +80,9 @@ public class UserList {
// else create it // else create it
if (user == null) { if (user == null) {
// Username is set on TCP connection start // Username is set on TCP connection start
user = new PeerUser(id, ""); user = new PeerUser(id);
inactiveUsers.put(id, user); inactiveUsers.put(id, user);
notifyNewUserObservers(user);
} }
return user; return user;
@ -103,9 +100,9 @@ public class UserList {
// Connection handling // Connection handling
if (!inactiveUsers.containsKey(id)) { if (!inactiveUsers.containsKey(id)) {
if (activeUsers.containsKey(id)) { if (activeUsers.containsKey(id)) {
Log.e(getClass().getSimpleName(), "Tried to set state CONNECTED on an already connected user: user id " + id); Log.w(getClass().getSimpleName(), "Tried to set state CONNECTED on an already connected user: user id " + id);
} else { } else {
Log.e(getClass().getSimpleName(), "Tried to set state CONNECTED on an unknown user: user id " + id); Log.w(getClass().getSimpleName(), "Tried to set state CONNECTED on an unknown user: user id " + id);
} }
return; return;
} }