public async Task RunAsync(DeviceSessionIdentifier deviceSessionIdentifier, WebSocket webSocket, CancellationToken cancellationToken) { if (webSocket == null) { throw new ArgumentNullException(nameof(webSocket)); } var channel = new ConnectorChannel(webSocket, _logger); try { var deviceSession = new DeviceSession(deviceSessionIdentifier, channel, _logger); _sessions[deviceSessionIdentifier.ToString()] = deviceSession; await deviceSession.RunAsync(cancellationToken).ConfigureAwait(false); } catch (Exception exception) { _logger.LogError(exception, "Error while connecting device."); } finally { _sessions.TryRemove(deviceSessionIdentifier.ToString(), out _); } }
public async Task RunAsync(ChannelIdentifier channelIdentifier, WebSocket webSocket, CancellationToken cancellationToken) { if (webSocket == null) { throw new ArgumentNullException(nameof(webSocket)); } var channelOptions = new ConnectorChannelOptions { UseCompression = true }; var channel = new ConnectorChannel(channelOptions, webSocket, _cloudMessageSerializer, _logger); try { var openChannel = new OpenChannel(channelIdentifier, channel, _logger); lock (_openChannels) { _openChannels[channelIdentifier] = openChannel; } await openChannel.RunAsync(cancellationToken).ConfigureAwait(false); } finally { lock (_openChannels) { _openChannels.Remove(channelIdentifier); } } }
public async Task RunAsync(WebSocket webSocket, AuthorizationContext authorizationContext, CancellationToken cancellationToken) { if (webSocket == null) { throw new ArgumentNullException(nameof(webSocket)); } var channel = new ConnectorChannel(webSocket, _logger); try { await RunSessionAsync(channel, authorizationContext, cancellationToken).ConfigureAwait(false); } catch (Exception exception) { _logger.LogError(exception, "Error while connecting client."); await channel.CloseAsync().ConfigureAwait(false); } }
private async Task RunSessionAsync(ConnectorChannel channel, AuthorizationContext authorizationContext, CancellationToken cancellationToken) { var sessionKey = authorizationContext.ToString(); try { var session = new Session(channel, authorizationContext, _logger); lock (_sessions) { _sessions[sessionKey] = session; } await session.ListenAsync(cancellationToken).ConfigureAwait(false); } finally { lock (_sessions) { _sessions.Remove(sessionKey); } } }
public DeviceSession(DeviceSessionIdentifier identifier, ConnectorChannel channel, ILogger logger) { _identifier = identifier ?? throw new ArgumentNullException(nameof(identifier)); _channel = channel ?? throw new ArgumentNullException(nameof(channel)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
public Session(ConnectorChannel channel, AuthorizationContext authorizationContext, ILogger logger) { _channel = channel ?? throw new ArgumentNullException(nameof(channel)); _authorizationContext = authorizationContext ?? throw new ArgumentNullException(nameof(authorizationContext)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }