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 { 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()); // 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; } } }