Example usage for org.springframework.data.redis.connection.util ByteArrayWrapper getArray

List of usage examples for org.springframework.data.redis.connection.util ByteArrayWrapper getArray

Introduction

In this page you can find the example usage for org.springframework.data.redis.connection.util ByteArrayWrapper getArray.

Prototype

public byte[] getArray() 

Source Link

Document

Returns the array.

Usage

From source file:org.springframework.data.redis.listener.RedisMessageListenerContainer.java

private void addListener(MessageListener listener, Collection<? extends Topic> topics) {
    Assert.notNull(listener, "a valid listener is required");
    Assert.notEmpty(topics, "at least one topic is required");

    List<byte[]> channels = new ArrayList<byte[]>(topics.size());
    List<byte[]> patterns = new ArrayList<byte[]>(topics.size());

    boolean trace = logger.isTraceEnabled();

    // add listener mapping
    Set<Topic> set = listenerTopics.get(listener);
    if (set == null) {
        set = new CopyOnWriteArraySet<Topic>();
        listenerTopics.put(listener, set);
    }/*  ww w .  j  a va  2s.  c om*/
    set.addAll(topics);

    for (Topic topic : topics) {

        ByteArrayWrapper holder = new ByteArrayWrapper(serializer.serialize(topic.getTopic()));

        if (topic instanceof ChannelTopic) {
            Collection<MessageListener> collection = channelMapping.get(holder);
            if (collection == null) {
                collection = new CopyOnWriteArraySet<MessageListener>();
                channelMapping.put(holder, collection);
            }
            collection.add(listener);
            channels.add(holder.getArray());

            if (trace)
                logger.trace("Adding listener '" + listener + "' on channel '" + topic.getTopic() + "'");
        }

        else if (topic instanceof PatternTopic) {
            Collection<MessageListener> collection = patternMapping.get(holder);
            if (collection == null) {
                collection = new CopyOnWriteArraySet<MessageListener>();
                patternMapping.put(holder, collection);
            }
            collection.add(listener);
            patterns.add(holder.getArray());

            if (trace)
                logger.trace("Adding listener '" + listener + "' for pattern '" + topic.getTopic() + "'");
        }

        else {
            throw new IllegalArgumentException("Unknown topic type '" + topic.getClass() + "'");
        }
    }

    // check the current listening state
    if (listening) {
        subscriptionTask.subscribeChannel(channels.toArray(new byte[channels.size()][]));
        subscriptionTask.subscribePattern(patterns.toArray(new byte[patterns.size()][]));
    }
}

From source file:org.springframework.data.redis.listener.RedisMessageListenerContainer.java

private void remove(MessageListener listener, Topic topic, ByteArrayWrapper holder,
        Map<ByteArrayWrapper, Collection<MessageListener>> mapping, List<byte[]> topicToRemove) {

    Collection<MessageListener> listeners = mapping.get(holder);
    Collection<MessageListener> listenersToRemove = null;

    if (listeners != null) {
        // remove only one listener
        if (listener != null) {
            listeners.remove(listener);/*from ww  w. ja va 2s .  co  m*/
            listenersToRemove = Collections.singletonList(listener);
        }

        // no listener given - remove all of them
        else {
            listenersToRemove = listeners;
        }

        // start removing listeners
        for (MessageListener messageListener : listenersToRemove) {
            Set<Topic> topics = listenerTopics.get(messageListener);
            if (topics != null) {
                topics.remove(topic);
            }
            if (CollectionUtils.isEmpty(topics)) {
                listenerTopics.remove(messageListener);
            }
        }
        // if we removed everything, remove the empty holder collection
        if (listener == null || listeners.isEmpty()) {
            mapping.remove(holder);
            topicToRemove.add(holder.getArray());
        }
    }
}