package envoy.server.processors; import java.io.IOException; import envoy.data.Message.MessageStatus; import envoy.event.MessageStatusChangeEvent; import envoy.exception.EnvoyException; import envoy.server.ObjectProcessor; import envoy.server.database.PersistenceManager; import envoy.server.net.ConnectionManager; import envoy.server.net.ObjectWriteProxy; /** * 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 { @Override public Class getInputClass() { return MessageStatusChangeEvent.class; } @Override public void process(MessageStatusChangeEvent input, long socketId, ObjectWriteProxy writeProxy) throws IOException { try { // any other status than read is not supposed to be sent to the server if (input.get() != MessageStatus.READ) throw new EnvoyException("Message" + input.getId() + "has an invalid status"); } catch (EnvoyException e) { throw new IOException(e); } ConnectionManager conMan = ConnectionManager.getInstance(); PersistenceManager perMan = PersistenceManager.getInstance(); envoy.server.data.Message msg = perMan.getMessageById(input.getId()); msg.setStatus(input.get()); msg.setReadDate(input.getDate()); perMan.updateMessage(msg); // Notifies the sender of the message about the status-update to READ if (conMan.isOnline(msg.getSender().getId())) writeProxy.write(conMan.getSocketId(msg.getSender().getId()), input); } }