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); } } }
/// <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); }
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); }