class NotifyingMessageListener extends RedisClusterPubSubAdapter<K, V> {

        @Override
        public void message(RedisClusterNode node, K channel, V message) {

            getListeners().forEach(listener -> listener.message(channel, message));
            clusterListeners.forEach(listener -> listener.message(node, channel, message));
        }

        @Override
        public void message(RedisClusterNode node, K pattern, K channel, V message) {

            getListeners().forEach(listener -> listener.message(pattern, channel, message));
            clusterListeners.forEach(listener -> listener.message(node, pattern, channel, message));
        }

        @Override
        public void subscribed(RedisClusterNode node, K channel, long count) {

            getListeners().forEach(listener -> listener.subscribed(channel, count));
            clusterListeners.forEach(listener -> listener.subscribed(node, channel, count));
        }

        @Override
        public void psubscribed(RedisClusterNode node, K pattern, long count) {

            getListeners().forEach(listener -> listener.psubscribed(pattern, count));
            clusterListeners.forEach(listener -> listener.psubscribed(node, pattern, count));
        }

        @Override
        public void unsubscribed(RedisClusterNode node, K channel, long count) {

            getListeners().forEach(listener -> listener.unsubscribed(channel, count));
            clusterListeners.forEach(listener -> listener.unsubscribed(node, channel, count));
        }

        @Override
        public void punsubscribed(RedisClusterNode node, K pattern, long count) {

            getListeners().forEach(listener -> listener.punsubscribed(pattern, count));
            clusterListeners.forEach(listener -> listener.punsubscribed(node, pattern, count));
        }

        @Override
        public void ssubscribed(RedisClusterNode node, K channel, long count) {<FILL_FUNCTION_BODY>}

    }

            getListeners().forEach(listener -> listener.ssubscribed(channel, count));
            clusterListeners.forEach(listener -> listener.ssubscribed(node, channel, count));
        
<methods>public void <init>(io.lettuce.core.ClientOptions, io.lettuce.core.resource.ClientResources) ,public void addListener(RedisPubSubListener<K,V>) ,public Set<K> getChannels() ,public Set<K> getPatterns() ,public boolean hasChannelSubscriptions() ,public boolean hasPatternSubscriptions() ,public boolean isSubscribed() ,public void notifyChannelActive(Channel) ,public void removeListener(RedisPubSubListener<K,V>) ,public RedisCommand<K1,V1,T> write(RedisCommand<K1,V1,T>) ,public Collection<RedisCommand<K1,V1,?>> write(Collection<? extends RedisCommand<K1,V1,?>>) <variables>private static final non-sealed Set<java.lang.String> ALLOWED_COMMANDS_SUBSCRIBED,private static final non-sealed Set<java.lang.String> SUBSCRIBE_COMMANDS,private final non-sealed Set<Wrapper<K>> channels,private io.lettuce.core.ConnectionState connectionState,private final List<RedisPubSubListener<K,V>> listeners,private static final InternalLogger logger,private final non-sealed Set<Wrapper<K>> patterns,private final non-sealed Set<Wrapper<K>> shardChannels,private volatile boolean subscribeWritten