Example #1
0
        // Get a client for the device
        public IDeviceClient GetClient(Device device, IoTHubProtocol protocol, IScriptInterpreter scriptInterpreter)
        {
            this.instance.InitRequired();

            var sdkClient = this.GetDeviceSdkClient(device, protocol);
            var methods   = new DeviceMethods(sdkClient, this.log, this.diagnosticsLogger, scriptInterpreter);

            return(new DeviceClient(
                       device.Id,
                       protocol,
                       sdkClient,
                       methods,
                       this.log));
        }
        /// <summary>
        /// Get a client for the device
        /// </summary>
        public IDeviceClient GetClient(Device device, IoTHubProtocol protocol, IScriptInterpreter scriptInterpreter)
        {
            this.SetupHub();

            var sdkClient = this.GetDeviceSdkClient(device, protocol);
            var methods   = new DeviceMethods(sdkClient, this.log, scriptInterpreter);

            return(new DeviceClient(
                       device.Id,
                       protocol,
                       sdkClient,
                       methods,
                       this.log));
        }
Example #3
0
        public DeviceClient(
            string deviceId,
            IoTHubProtocol protocol,
            IDeviceClientWrapper client,
            IDeviceMethods deviceMethods,
            ILogger logger)
        {
            this.deviceId      = deviceId;
            this.protocol      = protocol;
            this.client        = client;
            this.deviceMethods = deviceMethods;
            this.log           = logger;

            this.propertiesUpdateRequest = new DeviceProperties(client, this.log);
        }
        public void Setup(string deviceId, DeviceModel deviceModel, IDeviceActor context)
        {
            if (this.setupDone)
            {
                this.log.Error("Setup has already been invoked, are you sharing this instance with multiple devices?",
                               () => new { this.deviceId });
                throw new DeviceActorAlreadyInitializedException();
            }

            this.setupDone = true;
            this.deviceId  = deviceId;
            this.protocol  = deviceModel.Protocol;

            this.context = context;
        }
Example #5
0
        // Get a client for the device
        public IDeviceClient GetClient(Device device, IoTHubProtocol protocol)
        {
            this.instance.InitRequired();

            IDeviceClientWrapper sdkClient = this.GetDeviceSdkClient(device, protocol);
            var methods = new DeviceMethods(this.config, this.log, this.diagnosticsLogger);

            return(new DeviceClient(
                       device.Id,
                       protocol,
                       sdkClient,
                       methods,
                       this.config,
                       this.log));
        }
Example #6
0
 public DeviceClient(
     string deviceId,
     IoTHubProtocol protocol,
     Azure.Devices.Client.DeviceClient client,
     IDeviceMethods deviceMethods,
     IRateLimiting rateLimiting,
     ILogger logger)
 {
     this.deviceId      = deviceId;
     this.protocol      = protocol;
     this.client        = client;
     this.deviceMethods = deviceMethods;
     this.rateLimiting  = rateLimiting;
     this.log           = logger;
     this.connected     = false;
 }
        public DeviceClient(
            string deviceId,
            IoTHubProtocol protocol,
            IDeviceClientWrapper client,
            IDeviceMethods deviceMethods,
            IServicesConfig servicesConfig,
            ILogger logger)
        {
            this.deviceId          = deviceId;
            this.protocol          = protocol;
            this.client            = client;
            this.deviceMethods     = deviceMethods;
            this.log               = logger;
            this.deviceTwinEnabled = servicesConfig.DeviceTwinEnabled;

            this.propertiesUpdateRequest = new DeviceProperties(servicesConfig, logger);
        }
Example #8
0
        private IDeviceClientWrapper GetDeviceSdkClient(Device device, IoTHubProtocol protocol)
        {
            var connectionString = $"HostName={device.IoTHubHostName};DeviceId={device.Id};SharedAccessKey={device.AuthPrimaryKey}";
            var userAgent        = config.UserAgent;

            IDeviceClientWrapper sdkClient;

            switch (protocol)
            {
            case IoTHubProtocol.AMQP:
                this.log.Debug("Creating AMQP device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = this.deviceClient.CreateFromConnectionString(connectionString, TransportType.Amqp_Tcp_Only, userAgent);
                break;

            case IoTHubProtocol.MQTT:
                this.log.Debug("Creating MQTT device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = this.deviceClient.CreateFromConnectionString(connectionString, TransportType.Mqtt_Tcp_Only, userAgent);
                break;

            case IoTHubProtocol.HTTP:
                this.log.Debug("Creating HTTP device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = this.deviceClient.CreateFromConnectionString(connectionString, TransportType.Http1, userAgent);
                break;

            default:
                this.log.Error("Unable to create a client for the given protocol",
                               () => new { protocol });

                throw new InvalidConfigurationException($"Unable to create a client for the given protocol ({protocol})");
            }

            sdkClient.DisableRetryPolicy();
            if (this.config.IoTHubSdkDeviceClientTimeout.HasValue)
            {
                sdkClient.OperationTimeoutInMilliseconds = this.config.IoTHubSdkDeviceClientTimeout.Value;
            }

            return(sdkClient);
        }
Example #9
0
        private Azure.Devices.Client.DeviceClient GetDeviceSdkClient(Device device, IoTHubProtocol protocol)
        {
            var connectionString = $"HostName={device.IoTHubHostName};DeviceId={device.Id};SharedAccessKey={device.AuthPrimaryKey}";

            Azure.Devices.Client.DeviceClient sdkClient;
            switch (protocol)
            {
            case IoTHubProtocol.AMQP:
                this.log.Debug("Creating AMQP device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = Azure.Devices.Client.DeviceClient.CreateFromConnectionString(connectionString, TransportType.Amqp_Tcp_Only);
                break;

            case IoTHubProtocol.MQTT:
                this.log.Debug("Creating MQTT device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = Azure.Devices.Client.DeviceClient.CreateFromConnectionString(connectionString, TransportType.Mqtt_Tcp_Only);
                break;

            case IoTHubProtocol.HTTP:
                this.log.Debug("Creating HTTP device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = Azure.Devices.Client.DeviceClient.CreateFromConnectionString(connectionString, TransportType.Http1);
                break;

            default:
                this.log.Error("Unable to create a client for the given protocol",
                               () => new { protocol });

                throw new InvalidConfigurationException($"Unable to create a client for the given protocol ({protocol})");
            }

            sdkClient.SetRetryPolicy(new Azure.Devices.Client.NoRetry());

            // When sending telemetry or other operations, wait only for preconfigured number of milliseconds.
            // This setting sets how throttling affects the application. The default SDK value is 4 minutes,
            // that causes high CPU usage. However extreme lower values such as 10000 milliseconds causes
            // memory leaks leading to simulator crashing and termination of telemetry.
            sdkClient.OperationTimeoutInMilliseconds = (uint)this.servicesConfig.IoTSdkConnectTimeout;

            return(sdkClient);
        }
        private Azure.Devices.Client.DeviceClient GetDeviceSdkClient(Device device, IoTHubProtocol protocol)
        {
            var connectionString = $"HostName={device.IoTHubHostName};DeviceId={device.Id};SharedAccessKey={device.AuthPrimaryKey}";

            Azure.Devices.Client.DeviceClient sdkClient;
            switch (protocol)
            {
            case IoTHubProtocol.AMQP:
                this.log.Debug("Creating AMQP device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = Azure.Devices.Client.DeviceClient.CreateFromConnectionString(connectionString, TransportType.Amqp_Tcp_Only);
                break;

            case IoTHubProtocol.MQTT:
                this.log.Debug("Creating MQTT device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = Azure.Devices.Client.DeviceClient.CreateFromConnectionString(connectionString, TransportType.Mqtt_Tcp_Only);
                break;

            case IoTHubProtocol.HTTP:
                this.log.Debug("Creating HTTP device client",
                               () => new { device.Id, device.IoTHubHostName });

                sdkClient = Azure.Devices.Client.DeviceClient.CreateFromConnectionString(connectionString, TransportType.Http1);
                break;

            default:
                this.log.Error("Unable to create a client for the given protocol",
                               () => new { protocol });

                throw new InvalidConfigurationException($"Unable to create a client for the given protocol ({protocol})");
            }

            sdkClient.SetRetryPolicy(new NoRetry());
            sdkClient.OperationTimeoutInMilliseconds = SDK_CLIENT_TIMEOUT;

            return(sdkClient);
        }