package envoy.server.processors; import static envoy.server.Startup.config; import java.util.HashSet; import envoy.event.*; import envoy.event.contact.ContactOperation; import envoy.server.data.*; import envoy.server.net.*; /** * @author Maximilian Käfer * @since Envoy Server Standalone v0.1-beta */ public final class GroupCreationProcessor implements ObjectProcessor { private final PersistenceManager persistenceManager = PersistenceManager.getInstance(); private final ConnectionManager connectionManager = ConnectionManager.getInstance(); @Override public void process(GroupCreation groupCreation, long socketID, ObjectWriteProxy writeProxy) { // Don't allow the creation of groups if manually disabled writeProxy.write(socketID, new GroupCreationResult(config.isGroupSupportEnabled())); if (!config.isGroupSupportEnabled()) return; final envoy.server.data.Group group = new envoy.server.data.Group(); group.setName(groupCreation.get()); group.setContacts(new HashSet<>()); groupCreation.getInitialMemberIDs().stream().map(persistenceManager::getUserByID).forEach(group.getContacts()::add); group.getContacts().add(persistenceManager.getContactByID(connectionManager.getUserIDBySocketID(socketID))); group.getContacts().forEach(c -> c.getContacts().add(group)); group.getContacts().add(persistenceManager.getUserByID(connectionManager.getUserIDBySocketID(socketID))); persistenceManager.addContact(group); group.getContacts() .stream() .map(Contact::getID) .filter(connectionManager::isOnline) .map(connectionManager::getSocketID) .forEach(memberSocketID -> writeProxy.write(memberSocketID, new ContactOperation(group.toCommon(), ElementOperation.ADD))); } }