package envoy.server.processors; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import envoy.data.Message.MessageStatus; import envoy.event.MessageStatusChange; import envoy.server.data.PersistenceManager; import envoy.server.net.ConnectionManager; import envoy.server.net.ObjectWriteProxy; import envoy.util.EnvoyLog; /** * Project: envoy-server-standalone
* File: MessageStatusChangeProcessor.java
* Created: 10 Jan 2020
* * @author Leon Hofmeister * @since Envoy Server Standalone v0.1-alpha */ public class MessageStatusChangeProcessor implements ObjectProcessor { private final ConnectionManager connectionManager = ConnectionManager.getInstance(); private final PersistenceManager persistenceManager = PersistenceManager.getInstance(); private final Logger logger = EnvoyLog.getLogger(MessageStatusChangeProcessor.class); @Override public void process(MessageStatusChange statusChange, long socketID, ObjectWriteProxy writeProxy) throws IOException { // Any other status than READ is not supposed to be sent to the server if (statusChange.get() != MessageStatus.READ) { logger.log(Level.WARNING, "Invalid " + statusChange); return; } final var msg = persistenceManager.getMessageByID(statusChange.getID()); msg.read(); persistenceManager.updateMessage(msg); // Notifies the sender of the message about the status-update to READ final long senderID = msg.getSender().getID(); if (connectionManager.isOnline(senderID)) writeProxy.write(connectionManager.getSocketID(senderID), statusChange); } }