package envoy.server.processors; import envoy.event.GroupResize; import envoy.server.data.*; import envoy.server.net.*; /** * @author Maximilian Käfer * @since Envoy Server Standalone v0.1-beta */ public final class GroupResizeProcessor implements ObjectProcessor { private static final PersistenceManager persistenceManager = PersistenceManager.getInstance(); private static final ConnectionManager connectionManager = ConnectionManager.getInstance(); @Override public void process(GroupResize groupResize, long socketID, ObjectWriteProxy writeProxy) { // Acquire the group to resize from the database var group = persistenceManager.getGroupByID(groupResize.getGroupID()); // Perform the desired operation switch (groupResize.getOperation()) { case ADD: group.getContacts().add(persistenceManager.getUserByID(groupResize.get().getID())); break; case REMOVE: group.getContacts().remove(persistenceManager.getUserByID(groupResize.get().getID())); break; } // Update the group in the database persistenceManager.updateContact(group); // Send the updated group to all of its members var commonGroup = group.toCommon(); group.getContacts() .stream() .map(Contact::getID) .filter(connectionManager::isOnline) .map(connectionManager::getSocketID) .forEach(memberSocketID -> writeProxy.write(memberSocketID, commonGroup)); } }