2020-01-30 12:52:27 +01:00
|
|
|
package envoy.server.processors;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import envoy.data.Message.MessageStatus;
|
2020-06-20 09:57:54 +02:00
|
|
|
import envoy.event.MessageStatusChange;
|
2020-01-30 12:52:27 +01:00
|
|
|
import envoy.exception.EnvoyException;
|
2020-02-15 22:43:20 +01:00
|
|
|
import envoy.server.data.PersistenceManager;
|
2020-02-12 22:01:32 +01:00
|
|
|
import envoy.server.net.ConnectionManager;
|
2020-01-30 12:52:27 +01:00
|
|
|
import envoy.server.net.ObjectWriteProxy;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Project: <strong>envoy-server-standalone</strong><br>
|
|
|
|
* File: <strong>MessageStatusChangeProcessor.java</strong><br>
|
|
|
|
* Created: <strong>10 Jan 2020</strong><br>
|
|
|
|
*
|
|
|
|
* @author Leon Hofmeister
|
|
|
|
* @since Envoy Server Standalone v0.1-alpha
|
|
|
|
*/
|
2020-06-20 09:57:54 +02:00
|
|
|
public class MessageStatusChangeProcessor implements ObjectProcessor<MessageStatusChange> {
|
2020-01-30 12:52:27 +01:00
|
|
|
|
2020-02-15 22:47:14 +01:00
|
|
|
private final PersistenceManager persistenceManager = PersistenceManager.getInstance();
|
|
|
|
private final ConnectionManager connectionManager = ConnectionManager.getInstance();
|
2020-01-30 12:52:27 +01:00
|
|
|
|
|
|
|
@Override
|
2020-06-20 09:57:54 +02:00
|
|
|
public void process(MessageStatusChange statusChange, long socketID, ObjectWriteProxy writeProxy) throws IOException {
|
2020-03-22 11:23:56 +01:00
|
|
|
// Any other status than READ is not supposed to be sent to the server
|
2020-06-20 09:57:54 +02:00
|
|
|
if (statusChange.get() != MessageStatus.READ) throw new IOException(new EnvoyException(statusChange + " has an invalid status"));
|
2020-01-30 13:20:39 +01:00
|
|
|
|
2020-06-20 09:57:54 +02:00
|
|
|
final var msg = persistenceManager.getMessageByID(statusChange.getID());
|
|
|
|
msg.setStatus(statusChange.get());
|
|
|
|
msg.setReadDate(statusChange.getDate());
|
2020-02-15 22:47:14 +01:00
|
|
|
persistenceManager.updateMessage(msg);
|
2020-01-30 13:20:39 +01:00
|
|
|
|
2020-02-05 17:24:31 +01:00
|
|
|
// Notifies the sender of the message about the status-update to READ
|
2020-06-14 16:30:46 +02:00
|
|
|
final long senderID = msg.getSender().getID();
|
2020-06-20 09:57:54 +02:00
|
|
|
if (connectionManager.isOnline(senderID)) writeProxy.write(connectionManager.getSocketID(senderID), statusChange);
|
2020-01-30 12:52:27 +01:00
|
|
|
}
|
2020-02-15 22:47:14 +01:00
|
|
|
|
|
|
|
@Override
|
2020-06-20 09:57:54 +02:00
|
|
|
public Class<MessageStatusChange> getInputClass() { return MessageStatusChange.class; }
|
2020-01-30 12:52:27 +01:00
|
|
|
}
|