List of usage examples for org.springframework.data.redis.connection.util ByteArrayWrapper getArray
public byte[] getArray()
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()); } } }