public async ValueTask <int> ReadAsync(Memory <byte> message, CancellationToken cancellationToken) { if (!MemoryMarshal.TryGetArray <byte>(message, out var segment)) { Sally7Exception.ThrowMemoryWasNotArrayBased(); } args.SetBuffer(segment.Array, segment.Offset, TpktSize); int count = 0; do { if (count > 0) { args.SetBuffer(segment.Offset + count, TpktSize - count); } cancellationToken.ThrowIfCancellationRequested(); await socket.ReceiveAsync(awaitable); if (args.BytesTransferred <= 0) { TpktException.ThrowConnectionWasClosedWhileReading(); } count += args.BytesTransferred; } while (count < TpktSize); int receivedLength = GetTpktLength(message.Span); while (count < receivedLength) { cancellationToken.ThrowIfCancellationRequested(); args.SetBuffer(segment.Offset + count, receivedLength - count); await socket.ReceiveAsync(awaitable); if (args.BytesTransferred <= 0) { TpktException.ThrowConnectionWasClosedWhileReading(); } count += args.BytesTransferred; } return(receivedLength); }
public readonly void Assert() { if (Version != IsoVersion) { TpktException.ThrowIncorrectHeaderVersion(); } if (Reserved != 0) { TpktException.ThrowReseveredNot0(); } if (Length.High == 0 && Length.Low < 7) { TpktException.ThrowLengthSmallerThan7(); } }