コード例 #1
0
        private async Task <BytesSegment> ReadNB_Complex(int maxSize)
        {
            await WaitBeforeRead;

            WaitBeforeRead = AwaitableWrapper.GetCompleted();
            var r = await ReadNB(maxSize, true);

            OnRead(r);
            return(r);
        }
コード例 #2
0
        private async Task <int> ComplexRead(BytesSegment bs)
        {
            await WaitBeforeRead;

            WaitBeforeRead = AwaitableWrapper.GetCompleted();
            var r = await _ReadAsyncR(bs, true);

            OnRead(bs.Sub(0, r));
            return(r);
        }
コード例 #3
0
ファイル: SocketStream.cs プロジェクト: smeoow/Naive
        public AwaitableWrapper WriteAsyncR(BytesSegment bs)
        {
            var rSync = TryWriteNonblocking(bs);

            if (rSync == bs.Len)
            {
                Interlocked.Increment(ref ctr.Wsync);
                return(AwaitableWrapper.GetCompleted());
            }
            bs.SubSelf(Math.Max(rSync, 0));
            return(WriteAsyncRImpl(bs));
        }
コード例 #4
0
ファイル: SocketStream.cs プロジェクト: smeoow/Naive
 public virtual AwaitableWrapper ReadFullAsyncR(BytesSegment bs)
 {
     if (LengthCanSyncRead >= bs.Len)
     {
         var task = ReadAsyncR(bs, true);
         if (!(task.IsCompleted && task.GetResult() == bs.Len))
         {
             Logging.errorAndThrow($"BUG in ReadAsync(bs, true)! (bs.Len={bs.Len})");
         }
         return(AwaitableWrapper.GetCompleted());
     }
     else
     {
         return(ReadFullAsyncRImpl(bs));
     }
 }
コード例 #5
0
ファイル: UdpRelay.cs プロジェクト: smeoow/Naive
 public AwaitableWrapper Send(BytesSegment bs, IPEndPoint destEP)
 {
     relay.ActiveConnection(this);
     Interlocked.Increment(ref relay.sentPackets);
     return(remoteUdp?.WriteToAsyncR(bs, destEP) ?? AwaitableWrapper.GetCompleted());
 }