/// <exception cref="WrxTcpAuthorizationFailedException">Если авторизация не удалась.</exception> public static async ValueTask <T> AuthorizeAsync <T>(IPacketWriter <WrxPacket> requestWriter, IPacketReader <WrxPacket> responseReader, IAsyncWrxTcpHubAuthorizer <T> authorizer, ArrayPool <byte> byteArrayPool, CancellationToken cancellationToken = default) { using var requestPacket = new WrxPacket(0, WrxPacketAction.TcpAuthorizationRequest, 0, _zeroes.AsMemory()); await requestWriter.WriteAsync(requestPacket, cancellationToken).ConfigureAwait(false); using var responsePacket = await responseReader.ReadAsync(cancellationToken).ConfigureAwait(false); var(_, responseAction, responseCommand, responseData) = responsePacket; if (responseAction != WrxPacketAction.TcpAuthorizationResponse) { throw new Exception("Invalid action."); } if (responseCommand != 0) { throw new Exception("Invalid command."); } var authorizationData = WrxTcpAuthorizationData.Read(responseData.Span); var info = await authorizer.ValidateDataAsync(authorizationData, cancellationToken).ConfigureAwait(false); using var acknowledgementPacket = new WrxPacket(1, WrxPacketAction.TcpAuthorizationRequest, 1, _zeroes.AsMemory()); await requestWriter.WriteAsync(acknowledgementPacket, cancellationToken).ConfigureAwait(false); return(info); }
public AsyncWrxTcpDeviceAuthorizer(WrxTcpAuthorizationData data) { _data = data; }
public AsyncWrxTcpDeviceAuthorizer(int counter, string modemImei, string softwareVersion, string hardwareVersion, string key, WrxTcpChannelType channelType) { _data = new WrxTcpAuthorizationData(counter, modemImei, softwareVersion, hardwareVersion, key, channelType); }