44 lines
1.4 KiB
Java
Executable File
44 lines
1.4 KiB
Java
Executable File
package envoy.server.processors;
|
|
|
|
import java.io.IOException;
|
|
import java.util.logging.*;
|
|
|
|
import envoy.data.Message.MessageStatus;
|
|
import envoy.event.MessageStatusChange;
|
|
import envoy.util.EnvoyLog;
|
|
|
|
import envoy.server.data.PersistenceManager;
|
|
import envoy.server.net.*;
|
|
|
|
/**
|
|
* @author Leon Hofmeister
|
|
* @since Envoy Server Standalone v0.1-alpha
|
|
*/
|
|
public final class MessageStatusChangeProcessor implements ObjectProcessor<MessageStatusChange> {
|
|
|
|
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);
|
|
}
|
|
}
|