From 47e03dc4f46d475d6cd3619e8dd0a1f738124cb5 Mon Sep 17 00:00:00 2001
From: DieGurke <55625494+DieGurke@users.noreply.github.com>
Date: Tue, 9 Jun 2020 21:05:30 +0200
Subject: [PATCH] Started implementing group message status handling
* Group creation works
---
src/main/java/envoy/server/Startup.java | 12 ++++++++-
.../java/envoy/server/data/GroupMessage.java | 27 ++++++++++++++++---
.../processors/GroupCreationProcessor.java | 9 +++++--
.../processors/GroupMessageProcessor.java | 7 ++---
4 files changed, 46 insertions(+), 9 deletions(-)
diff --git a/src/main/java/envoy/server/Startup.java b/src/main/java/envoy/server/Startup.java
index 0811bbb..bdcac7d 100755
--- a/src/main/java/envoy/server/Startup.java
+++ b/src/main/java/envoy/server/Startup.java
@@ -11,7 +11,16 @@ import envoy.server.data.PersistenceManager;
import envoy.server.net.ConnectionManager;
import envoy.server.net.ObjectMessageProcessor;
import envoy.server.net.ObjectMessageReader;
-import envoy.server.processors.*;
+import envoy.server.processors.ContactOperationProcessor;
+import envoy.server.processors.ContactsRequestEventProcessor;
+import envoy.server.processors.GroupCreationProcessor;
+import envoy.server.processors.GroupMessageProcessor;
+import envoy.server.processors.IDGeneratorRequestProcessor;
+import envoy.server.processors.LoginCredentialProcessor;
+import envoy.server.processors.MessageProcessor;
+import envoy.server.processors.MessageStatusChangeProcessor;
+import envoy.server.processors.ObjectProcessor;
+import envoy.server.processors.UserStatusChangeProcessor;
/**
* Starts the server.
@@ -36,6 +45,7 @@ public class Startup {
Set> processors = new HashSet<>();
processors.add(new LoginCredentialProcessor());
processors.add(new MessageProcessor());
+ processors.add(new GroupCreationProcessor());
processors.add(new GroupMessageProcessor());
processors.add(new MessageStatusChangeProcessor());
processors.add(new UserStatusChangeProcessor());
diff --git a/src/main/java/envoy/server/data/GroupMessage.java b/src/main/java/envoy/server/data/GroupMessage.java
index ad9da17..bc9fed7 100644
--- a/src/main/java/envoy/server/data/GroupMessage.java
+++ b/src/main/java/envoy/server/data/GroupMessage.java
@@ -1,9 +1,12 @@
package envoy.server.data;
+import java.util.Date;
import java.util.Map;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
import envoy.data.MessageBuilder;
@@ -22,6 +25,9 @@ public class GroupMessage extends Message {
@ElementCollection
private Map memberMessageStatus;
+ @Temporal(TemporalType.TIMESTAMP)
+ protected Date lastStatusChangeDate;
+
/**
* The constructor for a database object.
*
@@ -32,13 +38,16 @@ public class GroupMessage extends Message {
/**
* Constructs a database groupMessage from a common groupMessage.
*
- * @param groupMessage the {@link envoy.data.GroupMessage} to convert into a
- * database {@link GroupMessage}
+ * @param groupMessage the {@link envoy.data.GroupMessage} to convert
+ * into a
+ * database {@link GroupMessage}
+ * @param lastStatusChangeDate the {@link Date} to set
* @since Envoy Server Standalone v0.1-beta
*/
- public GroupMessage(envoy.data.GroupMessage groupMessage) {
+ public GroupMessage(envoy.data.GroupMessage groupMessage, Date lastStatusChangeDate) {
super(groupMessage);
memberMessageStatus = groupMessage.getMemberStatuses();
+ this.lastStatusChangeDate = lastStatusChangeDate;
}
/**
@@ -76,4 +85,16 @@ public class GroupMessage extends Message {
public void setMemberMessageStatus(Map memberMessageStatus) {
this.memberMessageStatus = memberMessageStatus;
}
+
+ /**
+ * @return the date at which one of the member statuses changed last
+ * @since Envoy Server Standalone v0.1-beta
+ */
+ public Date getLastStatusChangeDate() { return lastStatusChangeDate; }
+
+ /**
+ * @param date the date to set
+ * @since Envoy Server Standalone v0.1-beta
+ */
+ public void setLastStatusChangeDate(Date date) { lastStatusChangeDate = date; }
}
diff --git a/src/main/java/envoy/server/processors/GroupCreationProcessor.java b/src/main/java/envoy/server/processors/GroupCreationProcessor.java
index 7bb71b3..8e4cf1b 100644
--- a/src/main/java/envoy/server/processors/GroupCreationProcessor.java
+++ b/src/main/java/envoy/server/processors/GroupCreationProcessor.java
@@ -1,8 +1,11 @@
package envoy.server.processors;
import java.io.IOException;
+import java.util.HashSet;
+import envoy.event.ElementOperation;
import envoy.event.GroupCreationEvent;
+import envoy.event.contact.ContactOperationEvent;
import envoy.server.data.Contact;
import envoy.server.data.PersistenceManager;
import envoy.server.net.ConnectionManager;
@@ -25,10 +28,12 @@ public class GroupCreationProcessor implements ObjectProcessor());
input.getInitialMemberIDs().stream().map(persistenceManager::getUserByID).forEach(group.getContacts()::add);
+ group.getContacts().add(persistenceManager.getContactByID(connectionManager.getUserIdBySocketId(socketID)));
+ group.getContacts().forEach(c -> c.getContacts().add(group));
group.getContacts().add(persistenceManager.getUserByID(connectionManager.getUserIdBySocketId(socketID)));
persistenceManager.addContact(group);
- writeProxy.write(socketID, group);
group.getContacts()
.stream()
.map(Contact::getID)
@@ -36,7 +41,7 @@ public class GroupCreationProcessor implements ObjectProcessor {
try {
- writeProxy.write(memberSocketID, group);
+ writeProxy.write(memberSocketID, new ContactOperationEvent(group.toCommon(), ElementOperation.ADD));
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/envoy/server/processors/GroupMessageProcessor.java b/src/main/java/envoy/server/processors/GroupMessageProcessor.java
index e1815b3..48f1441 100644
--- a/src/main/java/envoy/server/processors/GroupMessageProcessor.java
+++ b/src/main/java/envoy/server/processors/GroupMessageProcessor.java
@@ -1,6 +1,7 @@
package envoy.server.processors;
import java.io.IOException;
+import java.util.Date;
import javax.persistence.EntityExistsException;
@@ -33,7 +34,7 @@ public class GroupMessageProcessor implements ObjectProcessor {
}
final var members = PersistenceManager.getInstance().getGroupByID(groupMessage.getRecipientID()).getContacts();
- for (long i = 0; i < groupMessage.getMemberStatuses().keySet().size(); i++) {
+ for (long i = 0; i < groupMessage.getMemberStatuses().size(); i++) {
groupMessage.getMemberStatuses().replace(i, MessageStatus.SENT);
}
members.forEach(user -> { setMemberStatus(connectionManager, groupMessage, user.getID()); });
@@ -45,9 +46,9 @@ public class GroupMessageProcessor implements ObjectProcessor {
members.forEach(user -> { sendToMember(connectionManager, groupMessage, user.getID(), writeProxy); });
try {
- PersistenceManager.getInstance().addMessage(new envoy.server.data.Message(groupMessage));
+ PersistenceManager.getInstance().addMessage(new envoy.server.data.GroupMessage(groupMessage, new Date()));
} catch (EntityExistsException e) {
- System.err.println("Received a groupMessage with an id that already exists");
+ System.err.println("Received a groupMessage with an ID that already exists");
}
}