package envoy.server.processors; import java.util.HashSet; import envoy.event.ElementOperation; import envoy.event.GroupCreation; import envoy.event.contact.ContactOperation; 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: GroupCreationProcessor.java
* Created: 26.03.2020
* * @author Maximilian Käfer * @since Envoy Server Standalone v0.1-beta */ public 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) { 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))); } @Override public Class getInputClass() { return GroupCreation.class; } }