Esempio n. 1
0
 internal void Resubscribe(RedisChannel channel, ServerEndPoint server)
 {
     if (server != null && Interlocked.CompareExchange(ref owner, server, server) == server)
     {
         var cmd = channel.Contains((byte)'*') ? RedisCommand.PSUBSCRIBE : RedisCommand.SUBSCRIBE;
         var msg = Message.Create(-1, CommandFlags.FireAndForget, cmd, channel);
         msg.SetInternalCall();
         server.QueueDirectFireAndForget(msg, ResultProcessor.TrackSubscriptions);
     }
 }
Esempio n. 2
0
            public Task SubscribeToServer(ConnectionMultiplexer multiplexer, RedisChannel channel, CommandFlags flags, object asyncState, bool internalCall)
            {
                var cmd      = channel.Contains((byte)'*') ? RedisCommand.PSUBSCRIBE : RedisCommand.SUBSCRIBE;
                var selected = multiplexer.SelectServer(-1, cmd, CommandFlags.DemandMaster, default(RedisKey));

                if (selected == null || Interlocked.CompareExchange(ref owner, selected, null) != null)
                {
                    return(null);
                }

                var msg = Message.Create(-1, flags, cmd, channel);

                return(selected.QueueDirectAsync(msg, ResultProcessor.TrackSubscriptions, asyncState));
            }
Esempio n. 3
0
            public Task UnsubscribeFromServer(RedisChannel channel, CommandFlags flags, object asyncState, bool internalCall)
            {
                var oldOwner = Interlocked.Exchange(ref owner, null);

                if (oldOwner == null)
                {
                    return(null);
                }

                var cmd = channel.Contains((byte)'*') ? RedisCommand.PUNSUBSCRIBE : RedisCommand.UNSUBSCRIBE;
                var msg = Message.Create(-1, flags, cmd, channel);

                if (internalCall)
                {
                    msg.SetInternalCall();
                }
                return(oldOwner.QueueDirectAsync(msg, ResultProcessor.TrackSubscriptions, asyncState));
            }