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

io.dangernoodle.slack.client.SlackSessionObservers Maven / Gradle / Ivy

The newest version!
package io.dangernoodle.slack.client;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.dangernoodle.slack.client.rtm.SlackEventObserver;
import io.dangernoodle.slack.events.SlackHelloEvent;
import io.dangernoodle.slack.events.SlackPongEvent;
import io.dangernoodle.slack.events.channel.SlackChannelCreatedEvent;
import io.dangernoodle.slack.events.channel.SlackChannelJoinedEvent;
import io.dangernoodle.slack.events.channel.SlackChannelLeftEvent;
import io.dangernoodle.slack.events.user.SlackUserChangeEvent;
import io.dangernoodle.slack.objects.SlackChannel;
import io.dangernoodle.slack.objects.SlackMessageable;
import io.dangernoodle.slack.objects.SlackTeam;
import io.dangernoodle.slack.objects.SlackUser;


/**
 * Observer implementations added by the client
 *
 * @since 0.1.0
 */
class SlackSessionObservers
{
    private static final Logger logger = LoggerFactory.getLogger(SlackSessionObservers.class);

    /** updates the session with newly created channels */
    static final SlackEventObserver channelCreatedObserver = (event, client) -> {
        SlackChannel channel = event.getChannel();
        logger.debug("channel created event received, adding new channel [{}]", channel.getName());

        client.getSession().updateChannels(channel);
    };

    /** updates the session when a group (private channel) is joined */
    static final SlackEventObserver groupJoinedObserver = (event, client) -> {
        SlackChannel channel = event.getChannel();
        logger.debug("group joined event received, adding private channel [{}]", channel.getName());

        client.getSession().updateChannels(channel);
    };

    /** updates the session when a group (private channel) is left */
    static final SlackEventObserver groupLeftObserver = (event, client) -> {
        SlackMessageable.Id channel = event.getChannel();
        logger.debug("group left event received, removing private channel [{}]", channel.value());

        client.getSession().removeChannel(channel);
    };

    /** hello event observer to log session establishment */
    static final SlackEventObserver helloObserver = (event, client) -> {
        SlackConnectionSession session = client.getSession();

        SlackTeam team = session.getTeam();
        logger.info("team: {} ({})", team.getName(), team.getId().value());

        SlackUser self = session.getSelfUser();
        logger.info("self: {} ({})", self.getName(), self.getId().value());

        logger.info("slack session established!");
    };

    /** pong event observer for the heartbeat thread */
    static final SlackEventObserver pongObserver = (event, client) -> {
        client.getSession().updateLastPingId(event.getId());
        logger.debug("pong event received in {} ms", System.currentTimeMillis() - event.getTime());
    };

    /** updates the sesion when a user has changed */
    static final SlackEventObserver userChangedObserver = (event, client) -> {
        SlackUser user = event.getUser();
        logger.debug("user changed event received, updating user [{}]", user.getName());

        client.getSession().updateUsers(user);
    };

    // TODO: add unknown event listeners that log the events, add option to disable them

    private SlackSessionObservers()
    {
        // private
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy