diff --git a/src/main/java/envoy/server/data/GroupMessage.java b/src/main/java/envoy/server/data/GroupMessage.java index 176c82e..9f9a72a 100644 --- a/src/main/java/envoy/server/data/GroupMessage.java +++ b/src/main/java/envoy/server/data/GroupMessage.java @@ -24,7 +24,8 @@ import envoy.data.MessageBuilder; @Entity @NamedQuery( name = GroupMessage.getPendingGroupMsg, - query = "SELECT m FROM GroupMessage m JOIN m.memberMessageStatus s WHERE (KEY(s) = :userId) AND (m.creationDate > :lastSeen)" + query = "SELECT m FROM GroupMessage m JOIN m.memberMessageStatus s WHERE (KEY(s) = :userId) AND ((m.creationDate > :lastSeen)" + + "OR ((m.status = envoy.data.Message$MessageStatus.RECEIVED) AND (m.receivedDate > :lastSeen)))" ) public class GroupMessage extends Message { diff --git a/src/main/java/envoy/server/processors/LoginCredentialProcessor.java b/src/main/java/envoy/server/processors/LoginCredentialProcessor.java index f0da20f..86ccdfb 100755 --- a/src/main/java/envoy/server/processors/LoginCredentialProcessor.java +++ b/src/main/java/envoy/server/processors/LoginCredentialProcessor.java @@ -11,6 +11,7 @@ import java.time.LocalDateTime; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.logging.Logger; import javax.persistence.NoResultException; @@ -120,6 +121,7 @@ public final class LoginCredentialProcessor implements ObjectProcessor m instanceof GroupMessage); logger.fine("Sending " + pendingMessages.size() + " pending messages to " + user + "..."); List pendingGroupMessages = PersistenceManager.getInstance().getPendingGroupMessages(user); @@ -146,17 +148,22 @@ public final class LoginCredentialProcessor implements ObjectProcessor entry : gmsg.getMemberMessageStatus().entrySet()) { + if (entry.getKey() == connectionManager.getUserIdBySocketID(socketID)) continue; + if (connectionManager.isOnline(entry.getKey())) { + writeProxy.write(connectionManager.getSocketID(entry.getKey()), new MessageStatusChange(gmsg.toCommon())); + } + } } PersistenceManager.getInstance().updateMessage(gmsg); } else { // Sending memberStatusEvents and MessageStatusChange Events + writeProxy.write(socketID, new MessageStatusChange(gmsg.toCommon())); } } }