public static async ValueTask AuthorizeAsync(IPacketReader <WrxPacket> requestReader, IPacketWriter <WrxPacket> responseWriter, IAsyncWrxTcpDeviceAuthorizer authorizer, ArrayPool <byte> byteArrayPool, CancellationToken cancellationToken = default) { using var requestPacket = await requestReader.ReadAsync(cancellationToken).ConfigureAwait(false); var(protocol, requestAction, requestCommand, _) = requestPacket; if (requestAction != WrxPacketAction.TcpAuthorizationRequest) { throw new Exception(); } if (requestCommand != 0) { throw new Exception(); } var byteArray = byteArrayPool.Rent(WrxTcpAuthorizationData.Size); try { var bytes = byteArray.AsMemory(); (await authorizer.ProvideDataAsync(cancellationToken).ConfigureAwait(false)).Write(bytes.Span); using var responsePacket = new WrxPacket(protocol, WrxPacketAction.TcpAuthorizationResponse, 0, bytes[..WrxTcpAuthorizationData.Size]);
public static ValueTask AuthorizeAsync(IPacketReader <WrxPacket> requestReader, IPacketWriter <WrxPacket> responseWriter, IAsyncWrxTcpDeviceAuthorizer authorizer, CancellationToken cancellationToken = default) { return(AuthorizeAsync(requestReader, responseWriter, authorizer, ArrayPool <byte> .Shared, cancellationToken)); }