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 _);
            }
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
 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));
 }
Esempio n. 6
0
 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));
 }