package envoy.server.processors;
import java.io.IOException;
import java.util.Arrays;
import envoy.data.Contacts;
import envoy.event.ContactOperationEvent;
import envoy.server.ConnectionManager;
import envoy.server.ObjectProcessor;
import envoy.server.database.PersistenceManager;
import envoy.server.net.ObjectWriteProxy;
/**
* Project: envoy-server-standalone
* File: ContactOperationProcessor.java
* Created: 08.02.2020
*
* @author Kai S. K. Engelbart
* @since Envoy Server Standalone v0.1-alpha
*/
public class ContactOperationProcessor implements ObjectProcessor {
private static final ConnectionManager connectionManager = ConnectionManager.getInstance();
@Override
public void process(ContactOperationEvent evt, long socketId, ObjectWriteProxy writeProxy) throws IOException {
switch (evt.getOperationType()) {
case ADD:
final long userId = ConnectionManager.getInstance().getUserIdBySocketId(socketId);
final long contactId = evt.get().getId();
System.out.printf("Adding user %s to the contact list of user %d.%n", evt.get(), userId);
PersistenceManager.getInstance().addContact(userId, contactId);
// Notify the contact if online
if (ConnectionManager.getInstance().isOnline(contactId)) writeProxy.write(connectionManager.getSocketId(contactId),
new Contacts(Arrays.asList(PersistenceManager.getInstance().getUserById(userId).toCommonUser())));
break;
default:
System.err.printf("Received %s with an unsupported operation.%n", evt);
}
}
@Override
public Class getInputClass() { return ContactOperationEvent.class; }
}