Пример #1
0
 internal Task SendAsync(long substreamId, byte[] data, CancellationToken cancellation)
 {
     return(SendAsync(linked => ProtobufEx.SerializeWithLengthPrefixAsync(Inner, new MultiplexPacket()
     {
         SubstreamId = substreamId == OutboundSubstream ? 0 : OutboundSubstream = substreamId,
         Data = data
     }, PrefixStyle.Base128, linked), cancellation));
 }
Пример #2
0
 internal void QueueClose(long substreamId)
 {
     lock (Substreams)
         Substreams.Remove(substreamId);
     SendAsync(async linked =>
     {
         await ProtobufEx.SerializeWithLengthPrefixAsync(Inner, new MultiplexPacket()
         {
             SubstreamId = substreamId == OutboundSubstream ? 0 : OutboundSubstream = substreamId,
             EndOfStream = true
         }, PrefixStyle.Base128, linked);
         await Inner.FlushAsync(linked);
     }, CancellationToken.None).ContinueWith(t => Logger.Error(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
 }
Пример #3
0
        public async Task <Stream> ConnectAsync(CancellationToken cancellation)
        {
            MultiplexSubstream substream;

            lock (Substreams)
            {
                substream          = new MultiplexSubstream(this, NextId);
                Substreams[NextId] = substream;
                ++NextId;
            }
            await SendAsync(linked => ProtobufEx.SerializeWithLengthPrefixAsync(Inner, new MultiplexPacket()
            {
                SubstreamId = OutboundSubstream = substream.Id
            }, PrefixStyle.Base128, linked), cancellation);

            return(substream);
        }