示例#1
0
 public async Task ReceiveAsync(ITcpClient client)
 {
     try
     {
         ThrowIf.ArgumentIsNull(client, nameof(client));
         byte[]         buffer        = new byte[BufferLength];
         INetworkStream networkStream = default;
         try
         {
             networkStream = client.GetStream();
         }
         catch (Exception exception)
         {
             if (!Disconnecting)
             {
                 throw new TcpIpGetStreamFailedException(exception);
             }
         }
         StreamBufferReader2 streamBufferReader = StreamBufferReader2.Create(Identifier, Encoding.ASCII,
                                                                             Convert.ToByte(EndOfLine), SynchronizationContext,
                                                                             OnDataItemReceived);
         await ReceiveAsync(networkStream, streamBufferReader, buffer).ConfigureAwait(false);
     }
     catch (Exception exception)
     {
         if (!Disconnecting)
         {
             throw new TcpIpReceiveFailedException(exception);
         }
     }
 }
示例#2
0
        /// <summary>
        /// Creates a new instance of the <see cref="StreamBufferReader"/> class.
        /// </summary>
        /// <param name="identifier">An integer to associate the stream to.</param>
        /// <param name="encoding">Data <see cref="Encoding"/> used by the stream.</param>
        /// <param name="delimiter">Determines boundaries for each string segment in the <see cref="Stream"/></param>
        /// <param name="onNewString">Action to assign to the <see cref="NewString"/> event of the <see cref="StreamBufferReader"/> class.</param>
        /// <returns>A new instance of the <see cref="StreamBufferReader"/> class</returns>
        public static StreamBufferReader2 Create(int identifier, Encoding encoding, byte delimiter,
                                                 SynchronizationContext synchronizationContext,
                                                 Action <int, SynchronizationContext, string> onNewString)
        {
            ThrowIf.ArgumentIsNull(onNewString, nameof(onNewString));
            StreamBufferReader2 streamBufferReader = new StreamBufferReader2(identifier, encoding, delimiter, synchronizationContext)
            {
                OnNewString = onNewString
            };

            return(streamBufferReader);
        }
示例#3
0
        private async Task ReceiveAsync(INetworkStream networkStream, StreamBufferReader2 streamBufferReader, byte[] buffer)
        {
            int bytesReceived = 0;

            do
            {
                try
                {
                    bytesReceived = await ReadAsync(networkStream, buffer).ConfigureAwait(false);
                }
                catch (Exception exception)
                {
                    if (!Disconnecting)
                    {
                        throw new TcpIpInnerReceiveFailedException(exception);
                    }
                }
                if (bytesReceived > 0)
                {
                    OnDataReceived(buffer, bytesReceived);
                    streamBufferReader.GetStrings(buffer, bytesReceived);
                }
            } while (!Disconnecting && bytesReceived > 0);
        }