Beispiel #1
0
        private static async Task GetInitialDesiredConfiguration(DeviceClient deviceClient)
        {
            var twin = await deviceClient.GetTwinAsync();

            _twinDesiredProperties =
                JsonConvert.DeserializeObject <DesiredDeviceTwinConfiguration>(
                    twin.Properties.Desired["deviceTwinConfig"].ToString());
        }
Beispiel #2
0
        private static async Task OnDesiredPropertyChange(TwinCollection desiredproperties, object usercontext)
        {
            if (desiredproperties.Contains("deviceTwinConfig"))
            {
                Message message;

                var deviceTwinConfig =
                    JsonConvert.DeserializeObject <DesiredDeviceTwinConfiguration>(
                        desiredproperties["deviceTwinConfig"].ToString());

                // ignore delay for now. Just want to see if it can be parsed.
                int delay;

                if (int.TryParse(deviceTwinConfig.MessageSendDelay, out delay))
                {
                    lock (Locker)
                    {
                        _twinDesiredProperties = deviceTwinConfig;
                        _propertyChangeStatus  = Status.Pending;
                    }
                    message = new Message(
                        Encoding.ASCII.GetBytes(
                            $"Device accepted messageSendDelay value: `{deviceTwinConfig.MessageSendDelay}`.  Property change is pending call to 'acceptDesiredProperties'.")
                        );

                    message.Properties.Add(MessageProperty.Type.ToString("G"), Type.ConfigChage.ToString("G"));
                    message.Properties.Add(MessageProperty.Status.ToString("G"), Status.Pending.ToString("G"));
                    message.Properties.Add(MessageProperty.Severity.ToString("G"), Severity.Critical.ToString("G"));
                }
                else
                {
                    _propertyChangeStatus = Status.Rejected;

                    ($"Device Twin Property `messageSendDelay` is set to an illegal value: `{deviceTwinConfig.MessageSendDelay}`, " +
                     $"change status is 'rejected'. Sending Critical Notification.").LogMessage(ConsoleColor.Red);

                    message = new Message(
                        Encoding.ASCII.GetBytes(
                            $"Parameter messageSendDelay value: `{deviceTwinConfig.MessageSendDelay}`, could not be converted to an Int."));

                    message.Properties.Add(MessageProperty.Type.ToString("G"), Type.ConfigChage.ToString("G"));
                    message.Properties.Add(MessageProperty.Status.ToString("G"), Status.Rejected.ToString("G"));
                    message.Properties.Add(MessageProperty.Severity.ToString("G"), Severity.Critical.ToString("G"));
                }


                await _deviceClient.SendEventAsync(message);
            }
        }