Пример #1
0
        private bool ProcessRedisLine(bool async, AsyncSocketEventArgs args)
        {
            var lineValue = _lineBuffer.ToString();

            if (args.HasError)
            {
                return(ProcessRedisResponse(async, args));
            }

            if (_firstChar.IsErrorReply())
            {
                _redisResponse = RedisResponse.CreateError(lineValue, _serializer);
            }
            else if (_firstChar.IsStatusReply())
            {
                _redisResponse = RedisResponse.CreateStatus(lineValue, _serializer);
            }
            else if (_firstChar.IsIntReply())
            {
                _redisResponse = RedisResponse.CreateInteger(lineValue.ToInt(), _serializer);
            }
            else if (_firstChar.IsBulkReply())
            {
                var length = lineValue.ToInt();
                //check nil reply
                if (length < 0)
                {
                    _redisResponse = RedisResponse.CreateBulk(null, _serializer);
                }
                else if (length == 0)
                {
                    _redisResponse = RedisResponse.CreateBulk(new byte[0], _serializer);
                }
                else
                {
                    args.Completed = ProcessRedisBulkLine;
                    return(ReadBlockLine(length, args) || ProcessRedisBulkLine(async, args));
                }
            }
            else if (_firstChar.IsMultiBulkReply())
            {
                _multiBulkPartsLeft = lineValue.ToInt();

                if (_multiBulkPartsLeft == -1)                 // multi-bulk nill
                {
                    _redisResponse = RedisResponse.CreateMultiBulk(null, _serializer);
                }
                else
                {
                    _multiBulkParts = new RedisResponse[_multiBulkPartsLeft];

                    if (_multiBulkPartsLeft > 0)
                    {
                        return(ReadResponseFromStream(async, args));
                    }
                }
            }

            return(ProcessRedisResponse(async, args));
        }
Пример #2
0
 private static void OutResult(RedisResponse result)
 {
     if (result.ResponseType == ResponseType.Error)
     {
         Console.WriteLine(result.AsError());
     }
     else if (result.ResponseType == ResponseType.Status)
     {
         Console.WriteLine(result.AsStatus());
     }
     else if (result.ResponseType == ResponseType.Integer)
     {
         Console.WriteLine(result.AsInteger());
     }
     else if (result.ResponseType == ResponseType.Bulk)
     {
         Console.WriteLine(result.AsBulk().As <string>());
     }
     else if (result.ResponseType == ResponseType.MultiBulk)
     {
         var mb = result.AsMultiBulk();
         foreach (var r in mb)
         {
             Console.WriteLine(r.As <string>());
         }
     }
 }
Пример #3
0
        public void ExecuteCommand_ReturnsValidResult()
        {
            var           req = new[] { new byte[] { 1 } };
            var           p   = CreatePipeline();
            RedisResponse res = null;

            p.ExecuteCommandAsync(req, (e, r) => { res = r; });
            Assert.AreEqual(_response, res);
        }
Пример #4
0
        private bool ProcessRedisBulkLine(bool async, AsyncSocketEventArgs args)
        {
            if (args.HasError)
            {
                return(ProcessRedisResponse(async, args));
            }

            _redisResponse = RedisResponse.CreateBulk(_block, _serializer);
            return(ProcessRedisResponse(async, args));
        }
Пример #5
0
        public bool Receive(ReceiverAsyncEventArgs args)
        {
            _curEventArgs = args;
            args.Error    = null;
            args.Response = null;

            _multiBulkPartsLeft = 0;
            _multiBulkParts     = null;
            _redisResponse      = null;

            return(ReadResponseFromStream(false, _socketArgs));
        }
Пример #6
0
		private static void OutResult(RedisResponse result)
		{
			if (result.ResponseType == ResponseType.Error)
				Console.WriteLine(result.AsError());
			else if (result.ResponseType == ResponseType.Status)
				Console.WriteLine(result.AsStatus());
			else if (result.ResponseType == ResponseType.Integer)
				Console.WriteLine(result.AsInteger());
			else if (result.ResponseType == ResponseType.Bulk)
				Console.WriteLine(result.AsBulk().As<string>());
			else if (result.ResponseType == ResponseType.MultiBulk)
			{
				var mb = result.AsMultiBulk();
				foreach (var r in mb)
				{
					Console.WriteLine(r.As<string>());
				}
			}
		}
Пример #7
0
        private bool ProcessRedisResponse(bool async, AsyncSocketEventArgs args)
        {
            if (args.HasError || _multiBulkParts == null)
            {
                return(CallOperationCompleted(async, args));
            }

            if (_multiBulkPartsLeft > 0)
            {
                _multiBulkParts[_multiBulkParts.Length - _multiBulkPartsLeft] = _redisResponse;
            }

            --_multiBulkPartsLeft;

            if (_multiBulkPartsLeft > 0)
            {
                return(ReadResponseFromStream(async, args));
            }

            _redisResponse = RedisResponse.CreateMultiBulk(_multiBulkParts, _serializer);
            return(CallOperationCompleted(async, args));
        }
Пример #8
0
        public RedisPipelineTests()
        {
            _response    = RedisResponse.CreateStatus("OK", null);
            _redisSender = new Mock <IRedisSender>();
            _redisSender.Setup(c => c.BytesInBuffer).Returns(0);
            _redisSender.Setup(c => c.Send(It.IsAny <SenderAsyncEventArgs>()))
            .Callback((SenderAsyncEventArgs args) => args.Completed(args)).Returns(true);
            _redisSender.Setup(c => c.Flush(It.IsAny <SenderAsyncEventArgs>()))
            .Callback((SenderAsyncEventArgs args) =>
            {
                args.Completed(args);
            }).Returns(true);


            _redisReceiver = new Mock <IRedisReceiver>();

            _redisReceiver.Setup(c => c.Receive(It.IsAny <ReceiverAsyncEventArgs>()))
            .Callback((ReceiverAsyncEventArgs args) =>
            {
                args.Response = _response;
                args.Completed(args);
            }).Returns(true);
        }
Пример #9
0
 internal ChannelMessage(ChannelMessageType messageType, RedisResponse value, params string[] channels)
 {
     MessageType = messageType;
     Value = value;
     Channels = channels;
 }
Пример #10
0
        private bool ProcessRedisBulkLine(bool async, AsyncSocketEventArgs args)
        {
            if (args.HasError)
                return ProcessRedisResponse(async, args);

            _redisResponse = RedisResponse.CreateBulk(_block, _serializer);
            return ProcessRedisResponse(async, args);
        }
Пример #11
0
        private bool ProcessRedisLine(bool async, AsyncSocketEventArgs args)
        {
            var lineValue = _lineBuffer.ToString();
            if (args.HasError)
                return ProcessRedisResponse(async, args);

            if (_firstChar.IsErrorReply())
                _redisResponse = RedisResponse.CreateError(lineValue, _serializer);
            else if (_firstChar.IsStatusReply())
                _redisResponse = RedisResponse.CreateStatus(lineValue, _serializer);
            else if (_firstChar.IsIntReply())
                _redisResponse = RedisResponse.CreateInteger(lineValue.ToInt(), _serializer);
            else if (_firstChar.IsBulkReply())
            {
                var length = lineValue.ToInt();
                //check nil reply
                if (length < 0)
                    _redisResponse = RedisResponse.CreateBulk(null, _serializer);
                else
                {
                    args.Completed = ProcessRedisBulkLine;
                    return ReadBlockLine(length, args) || ProcessRedisBulkLine(async, args);
                }
            }
            else if (_firstChar.IsMultiBulkReply())
            {
                _multiBulkPartsLeft = lineValue.ToInt();

                if (_multiBulkPartsLeft == -1) // multi-bulk nill
                    _redisResponse = RedisResponse.CreateMultiBulk(null, _serializer);
                else
                {
                    _multiBulkParts = new RedisResponse[_multiBulkPartsLeft];

                    if (_multiBulkPartsLeft > 0)
                        return ReadResponseFromStream(async, args);
                }
            }

            return ProcessRedisResponse(async, args);
        }
Пример #12
0
 private void ProcessRedisResponse(TaskCompletionSource <RedisResponse> tcs, Exception ex, RedisResponse response)
 {
     if (ex != null)
     {
         tcs.SetException(ProcessException(ex));
     }
     else if (response.ResponseType == ResponseType.Error)
     {
         tcs.SetException(new RedisException(response.AsError()));
     }
     else
     {
         tcs.SetResult(response);
     }
 }
Пример #13
0
 private void ProcessRedisResponse(TaskCompletionSource<RedisResponse> tcs, Exception ex, RedisResponse response)
 {
     if (ex != null)
         tcs.SetException(ProcessException(ex));
     else if (response.ResponseType == ResponseType.Error)
         tcs.SetException(new RedisException(response.AsError()));
     else
         tcs.SetResult(response);
 }
Пример #14
0
 internal ChannelMessage(ChannelMessageType messageType, RedisResponse value, params string[] channels)
 {
     MessageType = messageType;
     Value       = value;
     Channels    = channels;
 }
Пример #15
0
        public void Setup()
        {
            _response = RedisResponse.CreateStatus("OK", null);
            _redisSender = new Mock<IRedisSender>();
            _redisSender.Setup(c => c.BytesInBuffer).Returns(0);
            _redisSender.Setup(c => c.Send(It.IsAny<SenderAsyncEventArgs>()))
                .Callback((SenderAsyncEventArgs args) => args.Completed(args)).Returns(true);
            _redisSender.Setup(c => c.Flush(It.IsAny<SenderAsyncEventArgs>()))
                .Callback((SenderAsyncEventArgs args) =>
                {
                    args.Completed(args);
                }).Returns(true);

            _redisReceiver = new Mock<IRedisReceiver>();

            _redisReceiver.Setup(c => c.Receive(It.IsAny<ReceiverAsyncEventArgs>()))
                .Callback((ReceiverAsyncEventArgs args) =>
                    {
                        args.Response = _response;
                        args.Completed(args);
                    }).Returns(true);
        }
Пример #16
0
        private bool ProcessRedisResponse(bool async, AsyncSocketEventArgs args)
        {
            if (args.HasError || _multiBulkParts == null)
                return CallOperationCompleted(async, args);

            if (_multiBulkPartsLeft > 0)
                _multiBulkParts[_multiBulkParts.Length - _multiBulkPartsLeft] = _redisResponse;

            --_multiBulkPartsLeft;

            if (_multiBulkPartsLeft > 0)
                return ReadResponseFromStream(async, args);

            _redisResponse = RedisResponse.CreateMultiBulk(_multiBulkParts, _serializer);
            return CallOperationCompleted(async, args);
        }
Пример #17
0
        public bool Receive(ReceiverAsyncEventArgs args)
        {
            _curEventArgs = args;
            args.Error = null;
            args.Response = null;

            _multiBulkPartsLeft = 0;
            _multiBulkParts = null;
            _redisResponse = null;

            return ReadResponseFromStream(false, _socketArgs);
        }