Example #1
0
 public string Monitor()
 {
     using (new ActivityTracer("Beging monitor"))
     {
         string status = _connection.Call(RedisReader.ReadStatus, "MONITOR");
         while (true)
         {
             object message;
             try
             {
                 message = _connection.Read();
             }
             catch (Exception e)
             {
                 if (_connection.Connected)
                 {
                     throw e;
                 }
                 return(status);
             }
             if (MonitorReceived != null)
             {
                 MonitorReceived(this, new RedisMonitorEventArgs(message));
             }
         }
     }
 }
Example #2
0
 private RedisSubscriptionResponse TryReadResponse()
 {
     try
     {
         return(_connection.Read(RedisSubscription.ParseStream));
     }
     catch (IOException e)
     {
         if (e.InnerException != null && e.InnerException is SocketException)
         {
             return(null); // timed out
         }
         throw e;          // something else happened
     }
 }
Example #3
0
        public void HandleSubscription(RedisSubscription command)
        {
            _connection.Write(command.Command, command.Arguments);
            if (!IsSubscribed)
            {
                using (new ActivityTracer("Handle subscriptions"))
                {
                    IsSubscribed = true;
                    while (true)
                    {
                        var resp = _connection.Read(command.Parser);
                        switch (resp.Type)
                        {
                        case RedisSubscriptionResponseType.Subscribe:
                        case RedisSubscriptionResponseType.PSubscribe:
                        case RedisSubscriptionResponseType.Unsubscribe:
                        case RedisSubscriptionResponseType.PUnsubscribe:
                            RedisSubscriptionChannel channel = resp as RedisSubscriptionChannel;
                            Count = channel.Count;
                            if (SubscriptionChanged != null)
                            {
                                SubscriptionChanged(this, new RedisSubscriptionChangedEventArgs(channel));
                            }
                            break;

                        case RedisSubscriptionResponseType.Message:
                        case RedisSubscriptionResponseType.PMessage:
                            RedisSubscriptionMessage message = resp as RedisSubscriptionMessage;
                            if (SubscriptionReceived != null)
                            {
                                SubscriptionReceived(this, new RedisSubscriptionReceivedEventArgs(message));
                            }
                            break;
                        }
                        if (Count == 0)
                        {
                            break;
                        }
                    }
                    IsSubscribed = false;
                }
            }
        }
Example #4
0
        object[] ReadTransaction(Stream input)
        {
            if (!_captureResults)
            {
                RedisObjects command = RedisCommand.Exec();
                command.Parser(input);
                return(null);
            }

            RedisReader.ExpectType(input, RedisMessage.MultiBulk);
            long count = RedisReader.ReadInt(input, false);

            if (count == -1)
            {
                return(null);
            }

            object[] output = new object[_parsers.Count];
            for (int i = 0; i < output.Length; i++)
            {
                output[i] = _connection.Read(_parsers.Dequeue());
            }
            return(output);
        }