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.GroupCreationProcessor; | ||||
| import envoy.server.processors.GroupMessageProcessor; | ||||
| import envoy.server.processors.GroupMessageStatusChangeProcessor; | ||||
| import envoy.server.processors.IDGeneratorRequestProcessor; | ||||
| import envoy.server.processors.LoginCredentialProcessor; | ||||
| import envoy.server.processors.MessageProcessor; | ||||
| @@ -72,6 +73,7 @@ public class Startup { | ||||
| 						new GroupMessageProcessor(), | ||||
| 						new GroupCreationProcessor(), | ||||
| 						new MessageStatusChangeProcessor(), | ||||
| 						new GroupMessageStatusChangeProcessor(), | ||||
| 						new UserStatusChangeProcessor(), | ||||
| 						new IDGeneratorRequestProcessor(), | ||||
| 						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 envoy.data.Message.MessageStatus; | ||||
| import envoy.event.GroupMessageStatusChange; | ||||
| import envoy.event.MessageStatusChange; | ||||
| import envoy.exception.EnvoyException; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| @@ -24,6 +25,8 @@ public class MessageStatusChangeProcessor implements ObjectProcessor<MessageStat | ||||
|  | ||||
| 	@Override | ||||
| 	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 | ||||
| 		if (statusChange.get() != MessageStatus.READ) throw new IOException(new EnvoyException(statusChange + " has an invalid status")); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 DieGurke
					DieGurke