package envoy.server.processors; import envoy.event.GroupResize; import envoy.server.data.Contact; import envoy.server.data.PersistenceManager; import envoy.server.net.ConnectionManager; import envoy.server.net.ObjectWriteProxy; /** * Project: envoy-server-standalone
* File: GroupResizeProcessor.java
* Created: 03.04.2020
* * @author Maximilian Käfer * @since Envoy Server Standalone v0.1-beta */ public 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)); } @Override public Class getInputClass() { return GroupResize.class; } }