/// <summary> /// Receives the data. /// Process data synchronously, because command execution is waiting the received data /// </summary> /// <param name="storeSteram">The store steram.</param> /// <param name="length">The length.</param> public override void ReceiveData(Stream storeSteram, int length) { byte[] buffer = this.SocketAsyncProxy.SocketEventArgs.Buffer; int thisRead = 0; int leftRead = length; int shouldRead = 0; AsyncUserToken token = this.SocketAsyncProxy.SocketEventArgs.UserToken as AsyncUserToken; var leftBuffer = m_CommandReader.GetLeftBuffer(); if (leftBuffer != null && leftBuffer.Count > 0) { storeSteram.Write(leftBuffer.ToArray(), 0, leftBuffer.Count); leftRead -= leftBuffer.Count; } while (leftRead > 0) { shouldRead = Math.Min(buffer.Length, leftRead); thisRead = Client.Receive(buffer, 0, shouldRead, SocketFlags.None); if (thisRead <= 0) { //Slow speed? Wait a moment Thread.Sleep(100); continue; } storeSteram.Write(buffer, 0, thisRead); leftRead -= thisRead; } }
public AsyncCommandReader(IAsyncCommandReader prevReader) { receiveBuffer = prevReader.GetLeftBuffer(); }