コード例 #1
0
        /// Connect streams and activate async communication
        private async Task ConnectAsync(CancellationToken token)
        {
            Memory <char> buffer = new Memory <char>(new char[1024]);

            StringBuilder data    = new StringBuilder();
            StringBuilder newLine = new StringBuilder().AppendLine();

            int charsRead;

            Connected = true;

            // Primary data communication loop
            while (Client.Connected)
            {
                if (token.IsCancellationRequested)
                {
                    Disconnect();
                    break;
                }

                charsRead = await Source.ReadAsync(buffer, token);

                data.Append(buffer.ToArray(), 0, charsRead);

                if (!Client.Connected || (charsRead <= 0))
                {
                    Disconnect();
                    break;
                }

                FixLineEndings(data);

                if (IsClearCmd(data.ToString()))
                {
                    await Dest.WriteAsync(newLine, token);
                }
                else
                {
                    await Dest.WriteAsync(data, token);
                }

                await Dest.FlushAsync();

                data.Clear();
            }

            Dispose();
        }