From 0ff7d63a4b8104439fd73da19009d09c8723c13f Mon Sep 17 00:00:00 2001 From: Yohan Simard Date: Mon, 14 Dec 2020 15:26:20 +0100 Subject: [PATCH] Change User to UserInformation in Message --- .../fr/insa/clavardator/chat/Message.java | 21 ++++++++++++++----- .../ui/chat/MessageListItemController.java | 3 +-- .../fr/insa/clavardator/users/PeerUser.java | 18 +++++++++++++--- .../clavardator/users/UserInformation.java | 8 +++---- .../fr/insa/clavardator/users/UserList.java | 7 +++++++ 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/main/java/fr/insa/clavardator/chat/Message.java b/src/main/java/fr/insa/clavardator/chat/Message.java index 9f5619c..ecfa47a 100644 --- a/src/main/java/fr/insa/clavardator/chat/Message.java +++ b/src/main/java/fr/insa/clavardator/chat/Message.java @@ -1,33 +1,44 @@ package fr.insa.clavardator.chat; import fr.insa.clavardator.users.User; +import fr.insa.clavardator.users.UserInformation; import java.io.Serializable; public class Message implements Serializable { private final String text; - private final User sender; // Send only ids ? - private final User recipient; // Send only ids ? + private final UserInformation sender; + private final UserInformation recipient; + + public Message(UserInformation sender, UserInformation recipient) { + this(sender, recipient, ""); + } public Message(User sender, User recipient) { this(sender, recipient, ""); } - public Message(User sender, User recipient, String text) { + public Message(UserInformation sender, UserInformation recipient, String text) { this.sender = sender; this.recipient = recipient; this.text = text; } + public Message(User sender, User recipient, String text) { + this.sender = new UserInformation(sender); + this.recipient = new UserInformation(recipient); + this.text = text; + } + public String getText() { return text; } - public User getSender() { + public UserInformation getSender() { return sender; } - public User getRecipient() { + public UserInformation getRecipient() { return recipient; } } diff --git a/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemController.java b/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemController.java index e18708f..5fcd4db 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemController.java @@ -3,7 +3,6 @@ package fr.insa.clavardator.ui.chat; import com.jfoenix.controls.JFXButton; import fr.insa.clavardator.chat.Message; import fr.insa.clavardator.users.CurrentUser; -import fr.insa.clavardator.users.User; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.geometry.Pos; @@ -29,7 +28,7 @@ public class MessageListItemController implements Initializable { public void setMessage(Message message) { button.setText(message.getText()); - if (message.getSender() instanceof CurrentUser) { + if (message.getSender().id == CurrentUser.getInstance().getId()) { container.setAlignment(Pos.CENTER_RIGHT); button.getStyleClass().add("message-self"); } else { diff --git a/src/main/java/fr/insa/clavardator/users/PeerUser.java b/src/main/java/fr/insa/clavardator/users/PeerUser.java index ec577af..2f6a064 100644 --- a/src/main/java/fr/insa/clavardator/users/PeerUser.java +++ b/src/main/java/fr/insa/clavardator/users/PeerUser.java @@ -21,6 +21,11 @@ public class PeerUser extends User implements Comparable { history = new ChatHistory(this); } + public PeerUser(int id) { + super(id); + history = new ChatHistory(this); + } + /** * Asynchronously connects to the user and receives its information (id, username) * @@ -29,6 +34,10 @@ public class PeerUser extends User implements Comparable { * @param errorCallback The function to call on socket error */ public void connect(InetAddress ipAddr, UserConnectedCallback callback, ErrorCallback errorCallback) { + if (connection != null && connection.isOpen()) { + connection.close(); + } + // Connect to the peer setState(State.CONNECTING); connection = new PeerConnection(ipAddr, (thisConnection) -> { @@ -47,6 +56,9 @@ public class PeerUser extends User implements Comparable { * @param errorCallback The function to call on socket error */ public void connect(Socket socket, UserConnectedCallback callback, ErrorCallback errorCallback) { + if (connection != null && connection.isOpen()) { + connection.close(); + } setState(State.CONNECTING); connection = new PeerConnection(socket); @@ -68,7 +80,7 @@ public class PeerUser extends User implements Comparable { assert msg instanceof UserInformation; UserInformation userInfo = (UserInformation) msg; // TODO : Check username unique - assert id == userInfo.getId(); + assert id == userInfo.id; setUsername(userInfo.getUsername()); callback.onUserConnected(); @@ -90,11 +102,11 @@ public class PeerUser extends User implements Comparable { connection.receive( msg -> { if (msg.getClass().isInstance(UserInformation.class)) { - assert ((UserInformation) msg).getId() == getId(); + assert ((UserInformation) msg).id == getId(); setUsername(((UserInformation) msg).getUsername()); } else if (msg.getClass().isInstance(Message.class)) { - assert ((Message) msg).getRecipient() != this; + assert ((Message) msg).getRecipient().id != id; history.addMessage((Message) msg); } }, diff --git a/src/main/java/fr/insa/clavardator/users/UserInformation.java b/src/main/java/fr/insa/clavardator/users/UserInformation.java index 637ff38..a878895 100644 --- a/src/main/java/fr/insa/clavardator/users/UserInformation.java +++ b/src/main/java/fr/insa/clavardator/users/UserInformation.java @@ -3,16 +3,16 @@ package fr.insa.clavardator.users; import java.io.Serializable; public class UserInformation implements Serializable { - private final int id; + public final int id; private final String username; public UserInformation(int id, String username) { this.id = id; this.username = username; } - - public int getId() { - return id; + public UserInformation(User user) { + this.id = user.getId(); + this.username = user.getUsername(); } public String getUsername() { diff --git a/src/main/java/fr/insa/clavardator/users/UserList.java b/src/main/java/fr/insa/clavardator/users/UserList.java index d1992bb..1728007 100644 --- a/src/main/java/fr/insa/clavardator/users/UserList.java +++ b/src/main/java/fr/insa/clavardator/users/UserList.java @@ -33,6 +33,12 @@ public class UserList { public void discoverActiveUsers(ErrorCallback errorCallback) { netDiscoverer.discoverActiveUsers("CLAVARDATOR_BROADCAST", (ipAddr, data) -> { int id = getIdFromIp(ipAddr); + + // If already connected, do not modify + if (activeUsers.containsKey(id)) { + return; + } + PeerUser user = inactiveUsers.get(id); if (user == null) { user = new PeerUser(id, ""); @@ -53,6 +59,7 @@ public class UserList { return ipAddr.hashCode(); } + public void addActiveUsersObserver(UserConnectionCallback connectionCallback, UserDisconnectionCallback disconnectionCallback) { userConnectionObservers.add(connectionCallback); userDisconnectionObservers.add(disconnectionCallback);