Ejemplo n.º 1
0
        private async Task RunMessageLoop()
        {
            var cancelToken = this._cancelTokenSource.Token;

            this.PeerHandshake = await PeerConnection.ReadHandshake(_reader);

            while (true)
            {
                if (cancelToken.IsCancellationRequested)
                {
                    cancelToken.ThrowIfCancellationRequested();
                }
                var result = await _reader.ReadAsync(cancelToken);

                var buffer = result.Buffer;

                while (true)
                {
                    var msg = ProtocolSerialization.TryParseMessage(buffer);
                    if (!msg.HasValue)
                    {
                        break;
                    }

                    buffer = buffer.Slice(msg.Value.Position);
                    _reader.AdvanceTo(msg.Value.Position);

                    if (msg.Value.Message is Bitfield bf)
                    {
                        this.PeerBitfield = bf;
                    }

                    MessageReceived(msg.Value.Message);
                }
            }
        }
Ejemplo n.º 2
0
        public Task SendMessage(IProtocolMessage msg)
        {
            var buf = ProtocolSerialization.SerializeMessage(msg);

            return(this._outStream.WriteAsync(buf, 0, buf.Length));
        }