diff --git a/src/main/java/envoy/client/net/Client.java b/src/main/java/envoy/client/net/Client.java
index d742f1b..6199b3b 100644
--- a/src/main/java/envoy/client/net/Client.java
+++ b/src/main/java/envoy/client/net/Client.java
@@ -14,9 +14,7 @@ import envoy.client.data.Config;
import envoy.client.data.LocalDb;
import envoy.client.util.EnvoyLog;
import envoy.data.*;
-import envoy.event.Event;
-import envoy.event.IdGeneratorRequest;
-import envoy.event.MessageStatusChangeEvent;
+import envoy.event.*;
import envoy.util.SerializationUtils;
/**
@@ -100,6 +98,8 @@ public class Client implements Closeable {
receiver.removeAllProcessors();
// Register processors for message and status handling
+
+ // Process incoming messages
final ReceivedMessageProcessor receivedMessageProcessor = new ReceivedMessageProcessor();
receiver.registerProcessor(Message.class, receivedMessageProcessor);
@@ -109,6 +109,9 @@ public class Client implements Closeable {
// Process message status changes
receiver.registerProcessor(MessageStatusChangeEvent.class, new MessageStatusChangeEventProcessor());
+ // Process user status changes
+ receiver.registerProcessor(UserStatusChangeEvent.class, new UserStatusChangeProcessor(this));
+
// Process message ID generation
receiver.registerProcessor(IdGenerator.class, localDb::setIdGenerator);
@@ -207,4 +210,16 @@ public class Client implements Closeable {
* @since Envoy v0.2-alpha
*/
public boolean isOnline() { return online; }
-}
\ No newline at end of file
+
+ /**
+ * @return the contacts of this {@link Client}
+ * @since Envoy v0.3-alpha
+ */
+ public Contacts getContacts() { return contacts; }
+
+ /**
+ * @param contacts the contacts to set
+ * @since Envoy v0.3-alpha
+ */
+ public void setContacts(Contacts contacts) { this.contacts = contacts; }
+}
diff --git a/src/main/java/envoy/client/net/UserStatusChangeProcessor.java b/src/main/java/envoy/client/net/UserStatusChangeProcessor.java
new file mode 100644
index 0000000..744e6e8
--- /dev/null
+++ b/src/main/java/envoy/client/net/UserStatusChangeProcessor.java
@@ -0,0 +1,37 @@
+package envoy.client.net;
+
+import java.util.function.Consumer;
+import java.util.logging.Logger;
+
+import envoy.client.util.EnvoyLog;
+import envoy.event.EventBus;
+import envoy.event.UserStatusChangeEvent;
+
+/**
+ * Project: envoy-client
+ * File: UserStatusChangeProcessor.java
+ * Created: 2 Feb 2020
+ *
+ * @author Leon Hofmeister
+ * @since Envoy v0.3-alpha
+ */
+public class UserStatusChangeProcessor implements Consumer {
+
+ private Client client;
+
+ private static final Logger logger = EnvoyLog.getLogger(UserStatusChangeProcessor.class.getSimpleName());
+
+ /**
+ * @param client the {@link Client} who receives an
+ * {@link UserStatusChangeEvent}
+ * @since Envoy v0.3-alpha
+ */
+ public UserStatusChangeProcessor(Client client) { this.client = client; }
+
+ @Override
+ public void accept(UserStatusChangeEvent evt) {
+ logger.info("Received " + evt);
+ client.getContacts().getContacts().stream().filter((user) -> user.getId() == evt.getId()).findFirst().get().setStatus(evt.get());
+ EventBus.getInstance().dispatch(evt);
+ }
+}
diff --git a/src/main/java/envoy/client/ui/ChatWindow.java b/src/main/java/envoy/client/ui/ChatWindow.java
index 7d537bf..0e12611 100644
--- a/src/main/java/envoy/client/ui/ChatWindow.java
+++ b/src/main/java/envoy/client/ui/ChatWindow.java
@@ -26,6 +26,7 @@ import envoy.data.MessageBuilder;
import envoy.data.User;
import envoy.event.EventBus;
import envoy.event.MessageStatusChangeEvent;
+import envoy.event.UserStatusChangeEvent;
/**
* Project: envoy-client
@@ -211,6 +212,9 @@ public class ChatWindow extends JFrame {
// Listen to theme changes
EventBus.getInstance().register(ThemeChangeEvent.class, (evt) -> applyTheme((Theme) evt.get()));
+ // Listen to user status changes
+ EventBus.getInstance().register(UserStatusChangeEvent.class, (evt) -> { userList.revalidate(); userList.repaint(); });
+
// Listen to received messages
EventBus.getInstance().register(MessageCreationEvent.class, (evt) -> {
Message message = ((MessageCreationEvent) evt).get();