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)); } } } }
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 } }
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; } } }
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); }