This repository has been archived on 2021-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
envoy/src/main/java/envoy/server/processors/GroupMessageStatusChangePro...

71 lines
2.7 KiB
Java

package envoy.server.processors;
import java.io.IOException;
import envoy.data.Message.MessageStatus;
import envoy.event.GroupMessageStatusChange;
import envoy.event.MessageStatusChange;
import envoy.exception.EnvoyException;
import envoy.server.data.GroupMessage;
import envoy.server.data.PersistenceManager;
import envoy.server.net.ConnectionManager;
import envoy.server.net.ObjectWriteProxy;
/**
* Project: <strong>envoy-server-standalone</strong><br>
* File: <strong>GroupMessageStatusChangeProcessor.java</strong><br>
* Created: <strong>03.07.2020</strong><br>
*
* @author Maximilian K&auml;fer
* @since Envoy Server Standalone v0.1-beta
*/
public class GroupMessageStatusChangeProcessor implements ObjectProcessor<GroupMessageStatusChange> {
private static final PersistenceManager persistenceManager = PersistenceManager.getInstance();
private static final ConnectionManager connectionManager = ConnectionManager.getInstance();
@Override
public void process(GroupMessageStatusChange input, long socketID, ObjectWriteProxy writeProxy) throws IOException {
GroupMessage gmsg = (GroupMessage) persistenceManager.getMessageByID(input.getID());
if (gmsg.getStatus() == input.get())
throw new IOException(new EnvoyException("The groupMessage already has the status " + input.get()));
gmsg.getMemberMessageStatus().replace(input.getMemberID(), input.get());
// Notifying the other members about memberStatusChange
gmsg.getMemberMessageStatus().keySet().stream().filter(k -> connectionManager.getUserIdBySocketID(socketID) != k).forEach(k -> {
if(connectionManager.isOnline(k)) {
try {
writeProxy.write(connectionManager.getSocketID(k), input);
} catch (IOException e) {
// TODO Maybe Try Catch block is not necessarily needed but if so write proper
// logger statement here.
e.printStackTrace();
}
}
});
if (!gmsg.getMemberMessageStatus().containsValue(MessageStatus.SENT)
&& !gmsg.getMemberMessageStatus().containsValue(MessageStatus.RECEIVED)) {
gmsg.read();
// Notifying the other members about messageStatusChange
gmsg.getMemberMessageStatus().keySet().forEach(k -> {
if (connectionManager.isOnline(k)) {
try {
writeProxy.write(connectionManager.getSocketID(k), new MessageStatusChange(input.getID(), input.get(), input.getDate()));
} catch (IOException e) {
// TODO Maybe Try Catch block is not necessarily needed but if so write proper
// logger statement here.
e.printStackTrace();
}
}
});
}
persistenceManager.updateMessage(gmsg);
}
@Override
public Class<GroupMessageStatusChange> getInputClass() { return GroupMessageStatusChange.class; }
}