package envoy.server.processors;
import java.io.IOException;
import envoy.data.Message.MessageStatus;
import envoy.event.MessageStatusChangeEvent;
import envoy.exception.EnvoyException;
import envoy.server.data.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 {
private final PersistenceManager persistenceManager = PersistenceManager.getInstance();
private final ConnectionManager connectionManager = ConnectionManager.getInstance();
@Override
public void process(MessageStatusChangeEvent input, long socketId, ObjectWriteProxy writeProxy) throws IOException {
// Any other status than READ is not supposed to be sent to the server
if (input.get() != MessageStatus.READ) throw new IOException(new EnvoyException("Message " + input + " has an invalid status"));
envoy.server.data.Message msg = persistenceManager.getMessageById(input.getId());
msg.setStatus(input.get());
msg.setReadDate(input.getDate());
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), input);
}
@Override
public Class getInputClass() { return MessageStatusChangeEvent.class; }
}