/// <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;
            }
        }
Esempio n. 2
0
 public AsyncCommandReader(IAsyncCommandReader prevReader)
 {
     receiveBuffer = prevReader.GetLeftBuffer();
 }
Esempio n. 3
0
 public AsyncCommandReader(IAsyncCommandReader prevReader)
 {
     receiveBuffer = prevReader.GetLeftBuffer();
 }