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/server/src/main/java/envoy/server/processors/GroupResizeProcessor.java

60 lines
1.9 KiB
Java

package envoy.server.processors;
import java.time.Instant;
import java.util.logging.Level;
import envoy.event.GroupResize;
import envoy.util.EnvoyLog;
import envoy.server.data.*;
import envoy.server.net.ObjectWriteProxy;
/**
* @author Maximilian Käfer
* @since Envoy Server Standalone v0.1-beta
*/
public final class GroupResizeProcessor implements ObjectProcessor<GroupResize> {
private static final PersistenceManager persistenceManager = PersistenceManager.getInstance();
@Override
public void process(GroupResize groupResize, long socketID, ObjectWriteProxy writeProxy) {
// Acquire the group to resize from the database
final var group = persistenceManager.getGroupByID(groupResize.getGroupID());
final var sender = persistenceManager.getUserByID(groupResize.get().getID());
// TODO: Inform the sender that this group has already been deleted
if (group == null)
return;
// Perform the desired operation
switch (groupResize.getOperation()) {
case ADD:
persistenceManager.addContactBidirectional(sender, group);
writeProxy.writeToOnlineContacts(group.getContacts(), group.toCommon());
return;
case REMOVE:
persistenceManager.removeContactBidirectional(sender, group);
sender.setLatestContactDeletion(Instant.now());
// The group has no more members and hence will be deleted
if (group.getContacts().isEmpty()) {
EnvoyLog.getLogger(GroupResizeProcessor.class).log(Level.INFO,
"Deleting now empty group " + group.getName());
persistenceManager.deleteContact(group);
} else {
// Informing the other members
writeProxy.writeToOnlineContacts(group.getContacts(), groupResize);
group.getContacts()
.forEach(c -> ((User) c).setLatestContactDeletion(Instant.now()));
}
group.getContacts()
.remove(persistenceManager.getUserByID(groupResize.get().getID()));
return;
}
}
}