private static async ValueTask <WrxPacket> ReadCommonAsync(int protocol, WrxPacketAction action, int command, int dataLength, IAsyncSimpleInputStream <byte> stream, CancellationToken cancellationToken) { var data = ArrayPool <byte> .Shared.Rent(dataLength); await stream.ReadFullyAsync(data.AsMemory(..dataLength), cancellationToken).ConfigureAwait(false); return(new WrxPacket(protocol, action, command, data.AsMemory(..dataLength), OnDispose, data));
public void Deconstruct(out int protocol, out WrxPacketAction action, out int command, out ReadOnlyMemory <byte> data) { protocol = Protocol; action = Action; command = Command; data = Data; }
public WrxPacket(int protocol, WrxPacketAction action, int command, ReadOnlyMemory <byte> data = default, Action <object?>?onDispose = default, object?onDisposeState = default) { Protocol = protocol; Action = action; Command = command; Data = data; OnDispose = onDispose; OnDisposeState = onDisposeState; }
private WrxPacket CreateErrorPacket(WrxPacketAction action, int command, WrxPacketError error) { var byteArray = _byteArrayPool.Rent(2); var bytes = byteArray.AsMemory(..2); bytes.Span[0] = (byte)command; bytes.Span[1] = (byte)error; return(new WrxPacket(0, action, 0xFF, bytes, _disposePacketCallback, byteArray)); }