public void Send_AutoFlushIsOn_LimitedBuffer_AsyncExecution_DataSentCorrectly() { _bufferFromPool = new byte[5]; _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny <Action <byte[]> >())) .Returns(true); var actual = ""; _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>())) .Callback((AsyncSocketEventArgs a) => { actual += ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count); a.Completed(a); }) .Returns(true); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; args.Completed = s => { }; var sender = CreateSender(); sender.Send(args); Assert.AreEqual(_expectedSentData, actual); }
private void BufferFlushProcessDone(bool async, SenderAsyncEventArgs args) { _pipelineException = args.Error; if (async) { RunSendProcess(); } }
public void Send_AutoFlushIsOff_FillsBufferWithRedisArgumentsAmmountLine() { var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; var sender = CreateSender(autoFlush: false); sender.Send(args); _asyncSocket.Verify(s => s.Send(It.IsAny<AsyncSocketEventArgs>()), Times.Never()); }
public void Send_AutoFlushIsOff_FillsBufferWithRedisArgumentsAmmountLine() { var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; var sender = CreateSender(autoFlush: false); sender.Send(args); _asyncSocket.Verify(s => s.Send(It.IsAny <AsyncSocketEventArgs>()), Times.Never()); }
public void Send_AutoFlushIsOff_IfBufferIsFullThenWritingArrayItem() { _bufferFromPool = new byte[10]; _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny<Action<byte[]>>())) .Returns(true); var expectedLine = "*3\r\n$9\r\nFi"; string actual = null; _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>())) .Callback((AsyncSocketEventArgs a) => { actual = actual ?? ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count); }); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; var sender = CreateSender(); sender.Send(args); Assert.AreEqual(expectedLine, actual); }
public void Send_DataSentCorrectly() { var args = new SenderAsyncEventArgs(); byte[] actualBuffer = null; _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>())).Callback( (AsyncSocketEventArgs a) => { actualBuffer = a.BufferList[0].Array; }); args.DataToSend = _dataToSend; var sender = CreateSender(); sender.Send(args); Assert.IsTrue(ArrayIsEqualTo(actualBuffer, _expectedSentData)); }
public void Flush() { byte[] actualBuffer = null; _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>())).Callback( (AsyncSocketEventArgs a) => { actualBuffer = a.BufferList[0].Array; }); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; var sender = CreateSender(autoFlush: false); sender.Send(args); sender.Flush(args); Assert.IsTrue(ArrayIsEqualTo(actualBuffer, _expectedSentData)); }
public void Send_AutoFlushIsOff_IfBufferIsFullThenWritingArrayItem() { _bufferFromPool = new byte[10]; _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny <Action <byte[]> >())) .Returns(true); var expectedLine = "*3\r\n$9\r\nFi"; string actual = null; _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>())) .Callback((AsyncSocketEventArgs a) => { actual = actual ?? ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count); }); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; var sender = CreateSender(); sender.Send(args); Assert.AreEqual(expectedLine, actual); }
public void Send_SocketAsyncExecution_CallbackIsNotCalled() { var called = false; _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>())) .Callback((AsyncSocketEventArgs a) => a.Completed(a)) .Returns(true); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; args.Completed = a => { called = true; }; var sender = CreateSender(); sender.Send(args); Assert.IsFalse(called); }
private void ItemSendProcessDone(bool async, SenderAsyncEventArgs args) { _pipelineException = args.Error; if (_pipelineException != null) { _currentSendItem.CallBack(_pipelineException, null); } else if (!_currentSendItem.IsOneWay) { _responsesQueue.Enqueue(_currentSendItem); TryRunReceiveProcess(); } else { _currentSendItem.CallBack(null, null); } if (async) { RunSendProcess(); } }
private void BufferFlushProcessDone(SenderAsyncEventArgs args) { BufferFlushProcessDone(true,args); }
public bool Flush(SenderAsyncEventArgs args) { if (_socketException != null) { args.Error = _socketException; return false; } if (_writingBufferIsFlushed == 0) { _sendingQueue.Enqueue(new ArraySegment<byte>(_writingBuffer, 0, _writingOffset)); Interlocked.Exchange(ref _writingBufferIsFlushed, 1); } EnterFlushing(); return false; }
private void BufferFlushProcessDone(SenderAsyncEventArgs args) { BufferFlushProcessDone(true, args); }
private void SendDataTask(SenderAsyncEventArgs args) { SendDataTask(true, args); }
private bool SendDataTask(bool async, SenderAsyncEventArgs args) { var context = (SenderContext)args.UserToken; TryAgain: if (context.EventArgs.HasError) return CallOnSendCompleted(async, context); if (context.SendState == 0) { var writeResult = WriteArgumentsCountLine(context.EventArgs.DataToSend.Length); if (!writeResult.HasValue) return true; if (!writeResult.Value) { if (Flush(context.EventArgs)) return true; goto TryAgain; } context.SendState = 1; } if (context.SendState > 0 && context.SendState < 4) { for (; context.PartIndex < context.EventArgs.DataToSend.Length; context.PartIndex++) { if (context.SendState == 1) { var writeResult = WriteDataSizeLine(context.EventArgs.DataToSend[context.PartIndex].Length); if (!writeResult.HasValue) return true; if (!writeResult.Value) { if (Flush(context.EventArgs)) return true; goto TryAgain; } context.SendState = 2; context.ArraySegment = new ArraySegment<byte>(context.EventArgs.DataToSend[context.PartIndex], 0, context.EventArgs.DataToSend[context.PartIndex].Length); } if (context.SendState == 2) { var writeResult = WriteData(context.ArraySegment); if (!writeResult.HasValue) return true; context.ArraySegment = writeResult.Value; if (context.ArraySegment.Count > 0) { if (Flush(context.EventArgs)) return true; goto TryAgain; } context.SendState = 3; } if (context.SendState == 3) { var writeResult = WriteNewLineToBuffer(); if (!writeResult.HasValue) return true; if (!writeResult.Value) { if (Flush(context.EventArgs)) return true; goto TryAgain; } context.SendState = 1; } } } if (context.SendState != 4 && _autoFlush) { context.SendState = 4; if (Flush(context.EventArgs)) return true; goto TryAgain; } return CallOnSendCompleted(async, context); }
public bool Send(SenderAsyncEventArgs args) { args.Error = _socketException; _senderContext.SendState = 0; _senderContext.PartIndex = 0; _senderContext.EventArgs = args; _senderContext.CallBack = args.Completed; args.Completed = SendDataTask; args.UserToken = _senderContext; return SendDataTask(false, args); }
private void ItemSendProcessDone(bool async, SenderAsyncEventArgs args) { _pipelineException = args.Error; if (_pipelineException != null) _currentSendItem.CallBack(_pipelineException, null); else if (!_currentSendItem.IsOneWay) { _responsesQueue.Enqueue(_currentSendItem); TryRunReceiveProcess(); } else _currentSendItem.CallBack(null, null); if (async) RunSendProcess(); }
private void ItemSendProcessDone(SenderAsyncEventArgs args) { ItemSendProcessDone(true, args); }
public void Send_SocketAsyncExecution_CallbackIsNotCalled() { var called = false; _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>())) .Callback((AsyncSocketEventArgs a) =>a.Completed(a)) .Returns(true); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; args.Completed = a => { called = true; }; var sender = CreateSender(); sender.Send(args); Assert.IsFalse(called); }
private void ItemSendProcessDone(SenderAsyncEventArgs args) { ItemSendProcessDone(true, args); }
private void BufferFlushProcessDone(bool async, SenderAsyncEventArgs args) { _pipelineException = args.Error; if (async) RunSendProcess(); }
public void Send_AutoFlushIsOn_LimitedBuffer_SyncExecution_DataSentCorrectly() { _bufferFromPool = new byte[5]; _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny<Action<byte[]>>())) .Returns(true); var actual = ""; _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>())) .Callback((AsyncSocketEventArgs a) => { actual += ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count); }) .Returns(false); var args = new SenderAsyncEventArgs(); args.DataToSend = _dataToSend; args.Completed = s => { }; var sender = CreateSender(); sender.Send(args); Assert.AreEqual(_expectedSentData, actual); }