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); } } }
public Task SendMessage(IProtocolMessage msg) { var buf = ProtocolSerialization.SerializeMessage(msg); return(this._outStream.WriteAsync(buf, 0, buf.Length)); }