示例#1
0
        /// <summary>
        /// Continuously calls the <see cref="TcpClient.GetStream().Read"/> method of the <see cref="TcpClient"/> while the socket is connected
        /// </summary>
        /// <remarks>This is a blocking call. When exiting this call the socket will be already closed</remarks>
        public void Run()
        {
            var recvBuffer = _bufferManager.Allocate();

            try
            {
                while (_client.Connected)
                {
                    //blocking call
                    int read = _client.GetStream().Read(recvBuffer, 0, recvBuffer.Length);
                    if (read > 0)
                    {
                        this.UpperLayer.Receive(new ByteArray(recvBuffer, read));
                    }
                }
            }
            catch (Exception ex)
            {
                this.OnRunError(new UnhandledExceptionEventArgs(ex, false));
            }
            finally
            {
                _bufferManager.Free(recvBuffer);
                _client.Close();
            }

            Console.WriteLine("Tcp layer loop completed");
        }
示例#2
0
 public int ReadBuffer(BufferManager<byte> bufferManager, FileStream sourceFileStream)
 {
     int bytesRead = 0;
     var buffer = bufferManager.Allocate();
     try
     {
         bytesRead = sourceFileStream.Read(buffer.Data, 0, buffer.Length);
         buffer.UsedLength = bytesRead;
     }
     catch
     {
         bufferManager.Free(buffer);
         throw;
     }
     bufferManager.Enqueue(buffer);
     return bytesRead;
 }
示例#3
0
 public void Free()
 {
     BufferManager.Free(ref segment1);
     BufferManager.Free(ref segment2);
 }
示例#4
0
 public int WriteBuffer(BufferManager<byte> bufferManager, FileStream targetFileStream)
 {
     var buffer = bufferManager.Dequeue();
     try
     {
         int length = this.CalculateAlignedLength(buffer.UsedLength);
         targetFileStream.Write(buffer.Data, 0, length);
         return length;
     }
     finally
     {
         bufferManager.Free(buffer);
     }
 }