GroupMessages get processed the right way now
This commit is contained in:
		| @@ -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
	 DieGurke
					DieGurke