All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.live.plugins.messenger.connections.MessengerConnectionsRegistry Maven / Gradle / Ivy

The newest version!
package net.intelie.live.plugins.messenger.connections;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
import net.intelie.live.plugins.messenger.chat.ControlActionsManager;
import net.intelie.live.plugins.messenger.data.UserData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class MessengerConnectionsRegistry {

    private static final Logger LOGGER = LoggerFactory.getLogger(MessengerConnectionsRegistry.class);
    private final Multiset connections = HashMultiset.create();
    private final ControlActionsManager controlActionsManager;

    public MessengerConnectionsRegistry(ControlActionsManager controlActionsManager) {
        this.controlActionsManager = controlActionsManager;
    }

    public synchronized void register(UserConnection connection) {
        LOGGER.info("Messenger connection registered by user {}", connection.getUserName());
        boolean userNotRegistered = connections.stream().noneMatch(c -> connection.getUserId().equals(c.getUserId()));
        connections.add(connection);
        if (userNotRegistered && connections.stream().filter(c -> connection.getUserId().equals(c.getUserId())).count() == 1) {
            LOGGER.info("Messenger joined action by user {}", connection.getUserName());
            controlActionsManager.userJoinedMessengerAction(connection.userData());
        }
    }

    public synchronized boolean remove(UserConnection connection) {
        LOGGER.info("Messenger connection removed by user {}", connection.getUserName());
        boolean hadOneRegistry = connections.stream().filter(c -> connection.getUserId().equals(c.getUserId())).count() == 1;
        boolean removeResult = connections.remove(connection);
        if (hadOneRegistry && connections.stream().noneMatch(c -> connection.getUserId().equals(c.getUserId()))) {
            LOGGER.info("Messenger left action by user {}", connection.getUserName());
            controlActionsManager.userLeftMessengerAction(connection.userData());
        }
        return removeResult;
    }

    public synchronized List registeredUsers() {
        return connections.stream()
                .map(c -> new UserData(c.getUserId(), c.getUserName()))
                .distinct()
                .collect(Collectors.toList());
    }

    public synchronized List byUserId(Integer userId) {
        if (userId == null) return Collections.emptyList();
        return connections.stream()
                .filter(c -> userId.equals(c.getUserId()))
                .map(UserConnection::userData)
                .collect(Collectors.toList());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy