コード例 #1
0
        private async Task ReadPipeAsync()
        {
            Console.WriteLine("Starting to read pipe");

            while (true)
            {
                var result = await _pipeReader.ReadAsync();

                var rq = result.Buffer;

                SequencePosition consumed = rq.Start;
                SequencePosition examined = rq.Start;
                if (_lengthProtocol.TryParseMessage(rq, ref consumed, ref examined, out var msg))
                {
                    ProcessMessage(msg);
                }

                if (result.IsCompleted)
                {
                    break;
                }

                //TODO: Investigate how to use examine
                //need to advance#
                _pipeReader.AdvanceTo(consumed);
            }
        }
コード例 #2
0
        private Task StartReceive(PipeReader reader, string id)
        {
            return(Task.Run(async() =>
            {
                while (true)
                {
                    ReadResult result = await reader.ReadAsync();
                    ReadOnlySequence <byte> buffer = result.Buffer;

                    SequencePosition consumed = buffer.Start;
                    SequencePosition examined = buffer.Start;
                    if (_messageProtocol.TryParseMessage(buffer, ref consumed, ref examined, out var msg))
                    {
                        var readResult = Encoding.UTF8.GetString(msg.Payload.ToArray());
                        Console.WriteLine($"{id}: {readResult}");
                    }

                    if (result.IsCompleted)
                    {
                        break;
                    }

                    reader.AdvanceTo(consumed);
                }
            }));
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: karlobrien/LetsTalk
        public async Task StartRecieve()
        {
            while (true)
            {
                ReadResult result = await _pipeReader.ReadAsync();

                ReadOnlySequence <byte> buffer = result.Buffer;

                SequencePosition consumed = buffer.Start;
                SequencePosition examined = buffer.Start;
                if (_messageProtocol.TryParseMessage(buffer, ref consumed, ref examined, out var msg))
                {
                    var readResult = Encoding.UTF8.GetString(msg.Payload.ToArray());
                    Console.WriteLine($"Client Msg: {readResult}");
                }

                if (result.IsCompleted)
                {
                    break;
                }

                _pipeReader.AdvanceTo(consumed);
            }
        }