Пример #1
0
        public async void SyncData()
        {
            while (true)
            {
                var     dest   = GetPipeStream();
                IBuffer buffer = BufferPoolGroup.DefaultGroup.Next().Pop();
                try
                {
                    int rlen = await ReadAsync(buffer.Data, 0, buffer.Size);

                    if (rlen > 0)
                    {
                        buffer.SetLength(rlen);
                        dest.Import(buffer);
                    }
                    else
                    {
                        buffer.Free();
                        break;
                    }
                }
                catch (Exception e_)
                {
                    SyncDataError = e_;
                    buffer.Free();
                    break;
                }
            }
        }
Пример #2
0
        private System.IO.Stream GetReader()
        {
            bool isnew;

            Connect(out isnew);
            IBuffer buffer = this.BufferPool.Pop();

            try
            {
                ((Buffers.Buffer)buffer).From(Socket);
                if (buffer.Length == 0)
                {
                    throw new SocketException((int)SocketError.Shutdown);
                }
                buffer.Postion = 0;
                System.Threading.Interlocked.Add(ref mReceiveBytes, buffer.Length);
                System.Threading.Interlocked.Increment(ref mReceiveQuantity);
                mBaseNetworkStream.Import(buffer);
                return(Stream);
            }
            catch (SocketException e_)
            {
                buffer.Free();
                DisConnect();
                throw e_;
            }
        }
Пример #3
0
        public async void SyncData(Action receive)
        {
            while (true)
            {
                var     dest   = GetPipeStream();
                IBuffer buffer = null;
                try
                {
                    buffer = BufferPoolGroup.DefaultGroup.Next().Pop();
                    int rlen = await ReadAsync(buffer.Data, 0, buffer.Size);

                    if (rlen > 0)
                    {
                        buffer.SetLength(rlen);
                        dest.Import(buffer);
                    }
                    else
                    {
                        buffer.Free();
                        SyncDataError = new BXException("ssl receive null data!");
                        break;
                    }
                }
                catch (Exception e_)
                {
                    SyncDataError = e_;
                    buffer?.Free();
                    break;
                }
                finally
                {
                    receive?.Invoke();
                }
            }
        }
Пример #4
0
        private IBuffer GetReadBuffer()
        {
            if (_readerBuffer == null)
            {
                UpdateReadBuffer();
                if (_readerBuffer == null)
                {
                    return(null);
                }
            }
            if (_readerBuffer.Eof)
            {
                UpdateReadBuffer();
                IBuffer buf = _readerBuffer;
                _readerBuffer = _readerBuffer.Next;
                _readerBuffer.RegisterReadAdvanceCompeleted(size =>
                {
                    Interlocked.Add(ref _length, -1 * size);
                });
                _readerBuffer.Postion = 0;
                buf.Next = null;
                buf.Free();
            }

            return(_readerBuffer);
        }
Пример #5
0
        public static void ToPipeStream(Stream source, int length, PipeStream dest)
        {
            int rlen = 0;

            while (true)
            {
                IBuffer buffer    = BufferPoolGroup.DefaultGroup.Next().Pop();
                int     offset    = 0;
                int     size      = buffer.Size;
                int     bufferlen = 0;
NEXT:
                if (length > size)
                {
                    rlen = source.Read(buffer.Data, offset, size);
                }
                else
                {
                    rlen = source.Read(buffer.Data, offset, length);
                }
                if (rlen == 0)
                {
                    if (bufferlen > 0)
                    {
                        buffer.SetLength(bufferlen);
                        dest.Import(buffer);
                    }
                    else
                    {
                        buffer.Free();
                    }
                    return;
                }
                bufferlen += rlen;
                offset    += rlen;
                size      -= rlen;
                length    -= rlen;
                if (length == 0)
                {
                    buffer.SetLength(bufferlen);
                    dest.Import(buffer);
                    return;
                }
                else
                {
                    if (size > 0)
                    {
                        goto NEXT;
                    }
                    else
                    {
                        buffer.SetLength(bufferlen);
                        dest.Import(buffer);
                    }
                }
            }
        }
Пример #6
0
 protected override void DisposeCode()
 {
     if (_writerBuffer != null)
     {
         _writerBuffer.Free();
     }
     if (_writerLastBuffer != null)
     {
         _writerLastBuffer.Free();
     }
 }
Пример #7
0
 public void Receive(IBuffer buffer)
 {
     if (!mIsDisposed)
     {
         mBaseNetStream.Import(buffer);
         InvokeReceiveEvent();
     }
     else
     {
         buffer.Free();
     }
 }
Пример #8
0
 protected override void DisposeCode()
 {
     UpdateReadBuffer();
     if (_readerBuffer != null)
     {
         _readerBuffer.Free();
     }
     if (_readerLastBuffer != null)
     {
         _readerLastBuffer.Free();
     }
 }
Пример #9
0
 private IBuffer GetReadBuffer()
 {
     if (mReadFirstBuffer == null)
         return null;
     if (mReadFirstBuffer.Eof)
     {
         using (mLockBuffer.Enter())
         {
             IBuffer buf = mReadFirstBuffer;
             mReadFirstBuffer = mReadFirstBuffer.Next;
             buf.Next = null;
             buf.Free();
             if (buf == mReadLastBuffer)
                 mReadLastBuffer = null;
         }
     }
     return mReadFirstBuffer;
 }
Пример #10
0
 private IBuffer GetReadBuffer()
 {
     if (mReadFirstBuffer == null)
     {
         return(null);
     }
     if (mReadFirstBuffer.Eof)
     {
         IBuffer buf = mReadFirstBuffer;
         mReadFirstBuffer = mReadFirstBuffer.Next;
         buf.Next         = null;
         buf.Free();
         if (buf == mReadLastBuffer)
         {
             mReadLastBuffer = null;
         }
     }
     return(mReadFirstBuffer);
 }
Пример #11
0
 private IBuffer GetReadBuffer()
 {
     if (mReadFirstBuffer == null)
     {
         return(null);
     }
     if (mReadFirstBuffer.Eof)
     {
         //using (mLockBuffer.Enter())
         //{
         IBuffer buf = mReadFirstBuffer;
         mReadFirstBuffer = mReadFirstBuffer.Next;
         buf.Next         = null;
         buf.Free();
         if (buf == mReadLastBuffer)
         {
             mReadLastBuffer = null;
         }
         //}
     }
     return(mReadFirstBuffer);
 }