private async Task <BytesSegment> ReadNB_Complex(int maxSize) { await WaitBeforeRead; WaitBeforeRead = AwaitableWrapper.GetCompleted(); var r = await ReadNB(maxSize, true); OnRead(r); return(r); }
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); }
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)); }
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)); } }
public AwaitableWrapper Send(BytesSegment bs, IPEndPoint destEP) { relay.ActiveConnection(this); Interlocked.Increment(ref relay.sentPackets); return(remoteUdp?.WriteToAsyncR(bs, destEP) ?? AwaitableWrapper.GetCompleted()); }