package envoy.server.processors; import java.util.logging.Logger; import envoy.event.ElementOperation; import envoy.event.contact.ContactOperation; import envoy.server.data.PersistenceManager; import envoy.server.net.*; import envoy.util.EnvoyLog; /** * @author Kai S. K. Engelbart * @since Envoy Server Standalone v0.1-alpha */ public final class ContactOperationProcessor implements ObjectProcessor { private static final ConnectionManager connectionManager = ConnectionManager.getInstance(); private static final Logger logger = EnvoyLog.getLogger(ContactOperationProcessor.class); @Override public void process(ContactOperation evt, long socketId, ObjectWriteProxy writeProxy) { switch (evt.getOperationType()) { case ADD: final long userID = ConnectionManager.getInstance().getUserIDBySocketID(socketId); final long contactId = evt.get().getID(); logger.fine(String.format("Adding user %s to the contact list of user %d.%n", evt.get(), userID)); PersistenceManager.getInstance().addContactBidirectional(userID, contactId); // Notify the contact if online if (ConnectionManager.getInstance().isOnline(contactId)) writeProxy.write(connectionManager.getSocketID(contactId), new ContactOperation(PersistenceManager.getInstance().getUserByID(userID).toCommon(), ElementOperation.ADD)); break; default: logger.warning(String.format("Received %s with an unsupported operation.", evt)); } } }