Implemented GroupMessageStatusChange handling (not with pending yet)
This commit is contained in:
		| @@ -18,6 +18,7 @@ import envoy.server.processors.ContactOperationProcessor; | |||||||
| import envoy.server.processors.ContactSearchProcessor; | import envoy.server.processors.ContactSearchProcessor; | ||||||
| import envoy.server.processors.GroupCreationProcessor; | import envoy.server.processors.GroupCreationProcessor; | ||||||
| import envoy.server.processors.GroupMessageProcessor; | import envoy.server.processors.GroupMessageProcessor; | ||||||
|  | import envoy.server.processors.GroupMessageStatusChangeProcessor; | ||||||
| import envoy.server.processors.IDGeneratorRequestProcessor; | import envoy.server.processors.IDGeneratorRequestProcessor; | ||||||
| import envoy.server.processors.LoginCredentialProcessor; | import envoy.server.processors.LoginCredentialProcessor; | ||||||
| import envoy.server.processors.MessageProcessor; | import envoy.server.processors.MessageProcessor; | ||||||
| @@ -72,6 +73,7 @@ public class Startup { | |||||||
| 						new GroupMessageProcessor(), | 						new GroupMessageProcessor(), | ||||||
| 						new GroupCreationProcessor(), | 						new GroupCreationProcessor(), | ||||||
| 						new MessageStatusChangeProcessor(), | 						new MessageStatusChangeProcessor(), | ||||||
|  | 						new GroupMessageStatusChangeProcessor(), | ||||||
| 						new UserStatusChangeProcessor(), | 						new UserStatusChangeProcessor(), | ||||||
| 						new IDGeneratorRequestProcessor(), | 						new IDGeneratorRequestProcessor(), | ||||||
| 						new ContactSearchProcessor(), | 						new ContactSearchProcessor(), | ||||||
|   | |||||||
| @@ -0,0 +1,69 @@ | |||||||
|  | package envoy.server.processors; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  |  | ||||||
|  | import envoy.data.Message.MessageStatus; | ||||||
|  | import envoy.event.GroupMessageStatusChange; | ||||||
|  | import envoy.event.MessageStatusChange; | ||||||
|  | import envoy.exception.EnvoyException; | ||||||
|  | import envoy.server.data.GroupMessage; | ||||||
|  | import envoy.server.data.PersistenceManager; | ||||||
|  | import envoy.server.net.ConnectionManager; | ||||||
|  | import envoy.server.net.ObjectWriteProxy; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Project: <strong>envoy-server-standalone</strong><br> | ||||||
|  |  * File: <strong>GroupMessageStatusChangeProcessor.java</strong><br> | ||||||
|  |  * Created: <strong>03.07.2020</strong><br> | ||||||
|  |  *  | ||||||
|  |  * @author Maximilian Käfer | ||||||
|  |  * @since Envoy Server Standalone v0.1-beta | ||||||
|  |  */ | ||||||
|  | public class GroupMessageStatusChangeProcessor implements ObjectProcessor<GroupMessageStatusChange> { | ||||||
|  |  | ||||||
|  | 	private final PersistenceManager	persistenceManager	= PersistenceManager.getInstance(); | ||||||
|  | 	private final ConnectionManager		connectionManager	= ConnectionManager.getInstance(); | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public void process(GroupMessageStatusChange input, long socketID, ObjectWriteProxy writeProxy) throws IOException { | ||||||
|  | 		GroupMessage gmsg = (GroupMessage) persistenceManager.getMessageByID(input.getID()); | ||||||
|  | 		if (gmsg.getStatus() == input.get()) | ||||||
|  | 			throw new IOException(new EnvoyException("The groupMessage already has the status " + input.get())); | ||||||
|  |  | ||||||
|  | 		gmsg.getMemberMessageStatus().replace(input.getMemberID(), input.get()); | ||||||
|  | 		 | ||||||
|  | 		// Notifying the other members about memberStatusChange | ||||||
|  | 		gmsg.getMemberMessageStatus().keySet().stream().filter(k -> connectionManager.getUserIdBySocketID(socketID) != k).forEach(k -> { | ||||||
|  | 			if(connectionManager.isOnline(k)) { | ||||||
|  | 				try { | ||||||
|  | 					writeProxy.write(connectionManager.getSocketID(k), input); | ||||||
|  | 				} catch (IOException e) { | ||||||
|  | 					// TODO Maybe Try Catch block is not necessarily needed but if so write proper | ||||||
|  | 					// logger statement here. | ||||||
|  | 					e.printStackTrace(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 		 | ||||||
|  | 		if (!gmsg.getMemberMessageStatus().containsValue(MessageStatus.SENT) | ||||||
|  | 				&& !gmsg.getMemberMessageStatus().containsValue(MessageStatus.RECEIVED)) { | ||||||
|  | 			gmsg.read(); | ||||||
|  | 			// Notifying the other members about messageStatusChange | ||||||
|  | 			gmsg.getMemberMessageStatus().keySet().forEach(k -> { | ||||||
|  | 				if (connectionManager.isOnline(k)) { | ||||||
|  | 					try { | ||||||
|  | 						writeProxy.write(connectionManager.getSocketID(k), new MessageStatusChange(input.getID(), input.get(), input.getDate())); | ||||||
|  | 					} catch (IOException e) { | ||||||
|  | 						// TODO Maybe Try Catch block is not necessarily needed but if so write proper | ||||||
|  | 						// logger statement here. | ||||||
|  | 						e.printStackTrace(); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 		persistenceManager.updateMessage(gmsg); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public Class<GroupMessageStatusChange> getInputClass() { return GroupMessageStatusChange.class; } | ||||||
|  | } | ||||||
| @@ -3,6 +3,7 @@ package envoy.server.processors; | |||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  |  | ||||||
| import envoy.data.Message.MessageStatus; | import envoy.data.Message.MessageStatus; | ||||||
|  | import envoy.event.GroupMessageStatusChange; | ||||||
| import envoy.event.MessageStatusChange; | import envoy.event.MessageStatusChange; | ||||||
| import envoy.exception.EnvoyException; | import envoy.exception.EnvoyException; | ||||||
| import envoy.server.data.PersistenceManager; | import envoy.server.data.PersistenceManager; | ||||||
| @@ -24,6 +25,8 @@ public class MessageStatusChangeProcessor implements ObjectProcessor<MessageStat | |||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void process(MessageStatusChange statusChange, long socketID, ObjectWriteProxy writeProxy) throws IOException { | 	public void process(MessageStatusChange statusChange, long socketID, ObjectWriteProxy writeProxy) throws IOException { | ||||||
|  | 		// Filtering out subclass objects, which should not be processed here. | ||||||
|  | 		if (statusChange.getClass().equals(GroupMessageStatusChange.class)) return; | ||||||
| 		// Any other status than READ is not supposed to be sent to the server | 		// Any other status than READ is not supposed to be sent to the server | ||||||
| 		if (statusChange.get() != MessageStatus.READ) throw new IOException(new EnvoyException(statusChange + " has an invalid status")); | 		if (statusChange.get() != MessageStatus.READ) throw new IOException(new EnvoyException(statusChange + " has an invalid status")); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 DieGurke
					DieGurke