GroupMessages get processed the right way now
This commit is contained in:
parent
a9de00371d
commit
fbed3072ee
@ -14,7 +14,15 @@ 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.ContactSearchProcessor;
|
||||
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.UserStatusChangeProcessor;
|
||||
import envoy.util.EnvoyLog;
|
||||
|
||||
/**
|
||||
@ -61,6 +69,7 @@ public class Startup {
|
||||
Server server = new Server(8080, ObjectMessageReader::new,
|
||||
new ObjectMessageProcessor(Set.of(new LoginCredentialProcessor(),
|
||||
new MessageProcessor(),
|
||||
new GroupMessageProcessor(),
|
||||
new GroupCreationProcessor(),
|
||||
new MessageStatusChangeProcessor(),
|
||||
new UserStatusChangeProcessor(),
|
||||
|
@ -8,6 +8,7 @@ import javax.persistence.EntityExistsException;
|
||||
|
||||
import envoy.data.GroupMessage;
|
||||
import envoy.data.Message.MessageStatus;
|
||||
import envoy.event.MessageStatusChangeEvent;
|
||||
import envoy.server.data.PersistenceManager;
|
||||
import envoy.server.net.ConnectionManager;
|
||||
import envoy.server.net.ObjectWriteProxy;
|
||||
@ -31,16 +32,28 @@ public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> {
|
||||
ConnectionManager connectionManager = ConnectionManager.getInstance();
|
||||
|
||||
final var members = PersistenceManager.getInstance().getGroupByID(groupMessage.getRecipientID()).getContacts();
|
||||
for (long i = 0; i < groupMessage.getMemberStatuses().size(); i++) {
|
||||
groupMessage.getMemberStatuses().replace(i, MessageStatus.SENT);
|
||||
}
|
||||
members.forEach(user -> groupMessage.getMemberStatuses().replace(user.getID(), MessageStatus.SENT));
|
||||
members.forEach(user -> { setMemberStatus(connectionManager, groupMessage, user.getID()); });
|
||||
// Setting memberStatus of sender to READ
|
||||
groupMessage.getMemberStatuses()
|
||||
.replace(members.stream().filter(sender -> groupMessage.getSenderID() == sender.getID()).findAny().get().getID(), MessageStatus.READ);
|
||||
|
||||
// Checks if all memberMessageStatuses are RECEIVED and if so sets the
|
||||
// groupMessage Status to RECEIVED.
|
||||
if (!groupMessage.getMemberStatuses().containsValue(MessageStatus.SENT)) groupMessage.setStatus(MessageStatus.RECEIVED);
|
||||
// groupMessage Status to RECEIVED and sends a MessageStatusChangeEvent to the
|
||||
// sender, if he is still online.
|
||||
if (!groupMessage.getMemberStatuses().containsValue(MessageStatus.SENT)) {
|
||||
groupMessage.setStatus(MessageStatus.RECEIVED);
|
||||
if (connectionManager.isOnline(connectionManager.getUserIdBySocketId(socketID))) try {
|
||||
writeProxy.write(socketID, new MessageStatusChangeEvent(groupMessage));
|
||||
} catch (IOException e) {
|
||||
logger.warning("Sender of the groupMessage online. Failed to send MessageStatusChangeEvent");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
members.forEach(user -> { sendToMember(connectionManager, groupMessage, user.getID(), writeProxy); });
|
||||
members.stream()
|
||||
.filter(m -> groupMessage.getSenderID() != m.getID())
|
||||
.forEach(user -> { sendToMember(connectionManager, groupMessage, user.getID(), writeProxy); });
|
||||
|
||||
try {
|
||||
PersistenceManager.getInstance().addMessage(new envoy.server.data.GroupMessage(groupMessage, new Date()));
|
||||
|
@ -31,6 +31,10 @@ public class MessageProcessor implements ObjectProcessor<Message> {
|
||||
|
||||
@Override
|
||||
public void process(Message message, long socketID, ObjectWriteProxy writeProxy) {
|
||||
// Makes sure, that there are no groupMessages processed here, because
|
||||
// groupMessage is a subclass of message.
|
||||
if (message.getClass().equals(envoy.data.GroupMessage.class)) return;
|
||||
|
||||
message.nextStatus();
|
||||
ConnectionManager connectionManager = ConnectionManager.getInstance();
|
||||
|
||||
|
Reference in New Issue
Block a user