private async Task _logAsync(LogSeverity severity, string message)
 {
     await LogAsync?.Invoke(new LogMessage {
         Source   = "Gotchi",
         Severity = severity,
         Message  = message
     });
 }
        // ADDED: geertp 12/04/2018 <-

        // CHANGED: geertp 12/04/2018 - signature changed
        //public AzureIoTHubDeviceTwinProxy(DeviceClient deviceClient, ResetConnectionAsync resetConnectionAsyncHandler, LogAsync logAsyncHandler = null)
        public AzureIoTHubDeviceTwinProxy(
            DeviceClient deviceClient,
            ResetConnectionAsync resetConnectionAsyncHandler,
            LogAsync logAsyncHandler = null,
            ConnectionStatusChanged connectionStatusChangedHandler = null,
            WaitingForInternet waitingForInternetHandler           = null)
        {
            this.deviceClient = deviceClient;
            this.resetConnectionAsyncHandler = resetConnectionAsyncHandler;
            this.logAsyncHandler             = logAsyncHandler;

            // ADDED: geertp 12/04/2018 ->
            _connectionStatusChangedHandler = connectionStatusChangedHandler;
            _waitingForInternetHandler      = waitingForInternetHandler;
            // ADDED: geertp 12/04/2018 <-

            this.deviceClient.SetConnectionStatusChangesHandler(async(ConnectionStatus status, ConnectionStatusChangeReason reason) =>
            {
                string msg = "Connection changed: " + status.ToString() + " " + reason.ToString() + $" ({deviceClient.GetHashCode()})";
                System.Diagnostics.Debug.WriteLine(msg);
                logAsyncHandler?.Invoke(msg, LoggingLevel.Verbose);

                // ADDED:  geertp 12/04/2018 ->
                _connectionStatusChangedHandler?.Invoke(deviceClient, status, reason);
                // ADDED:  geertp 12/04/2018 <-

                switch (reason)
                {
                case ConnectionStatusChangeReason.Connection_Ok:
                    // No need to do anything, this is the expectation
                    break;

                case ConnectionStatusChangeReason.Expired_SAS_Token:
                case ConnectionStatusChangeReason.Bad_Credential:
                case ConnectionStatusChangeReason.Retry_Expired:
                case ConnectionStatusChangeReason.No_Network:
                    await InternalRefreshConnectionAsync();
                    break;

                case ConnectionStatusChangeReason.Client_Close:
                    // ignore this ... part of client shutting down.
                    break;

                case ConnectionStatusChangeReason.Communication_Error:
                case ConnectionStatusChangeReason.Device_Disabled:
                    // These are not implemented in the Azure SDK
                    break;

                default:
                    break;
                }
            });
        }
Ejemplo n.º 3
0
        public AzureIoTHubDeviceTwinProxy(DeviceClient deviceClient, Twin twin, ResetConnectionAsync resetConnectionAsyncHandler, LogAsync logAsyncHandler = null)
        {
            _deviceClient = deviceClient;
            _twin         = twin;
            _resetConnectionAsyncHandler = resetConnectionAsyncHandler;
            _logAsyncHandler             = logAsyncHandler;

            _deviceClient.SetConnectionStatusChangesHandler(async(ConnectionStatus status, ConnectionStatusChangeReason reason) =>
            {
                string msg = "Mock.Lib.Connection changed: " + status.ToString() + " " + reason.ToString();
                Debug.WriteLine(msg);
                _logAsyncHandler?.Invoke(msg, LoggingLevel.Verbose);

                switch (reason)
                {
                case ConnectionStatusChangeReason.Connection_Ok:
                    // No need to do anything, this is the expectation
                    break;

                case ConnectionStatusChangeReason.Retry_Expired:
                    await InternalRefreshConnectionAsync();
                    break;

                case ConnectionStatusChangeReason.Client_Close:
                    // ignore this ... part of client shutting down.
                    break;

                case ConnectionStatusChangeReason.Communication_Error:
                case ConnectionStatusChangeReason.Expired_SAS_Token:
                case ConnectionStatusChangeReason.Bad_Credential:
                case ConnectionStatusChangeReason.Device_Disabled:
                    // These are not implemented in the Azure SDK
                    break;

                case ConnectionStatusChangeReason.No_Network:
                // This seems to lead to Retry_Expired, so we can
                // ignore this ... maybe log the error.

                default:
                    break;
                }
            });
        }
Ejemplo n.º 4
0
        public AzureIoTHubDeviceTwinProxy(DeviceClient deviceClient, EventWaitHandle iotHubOfflineEvent, LogAsync logAsyncHandler = null)
        {
            this.deviceClient       = deviceClient;
            this.iotHubOfflineEvent = iotHubOfflineEvent;
            this.logAsyncHandler    = logAsyncHandler;

            this.deviceClient.SetConnectionStatusChangesHandler(async(ConnectionStatus status, ConnectionStatusChangeReason reason) =>
            {
                string msg = "Connection changed: " + status.ToString() + " " + reason.ToString();
                System.Diagnostics.Debug.WriteLine(msg);
                logAsyncHandler?.Invoke(msg, LoggingLevel.Verbose);

                switch (reason)
                {
                case ConnectionStatusChangeReason.Connection_Ok:
                    // No need to do anything, this is the expectation
                    break;

                case ConnectionStatusChangeReason.Expired_SAS_Token:
                case ConnectionStatusChangeReason.Bad_Credential:
                case ConnectionStatusChangeReason.Retry_Expired:
                case ConnectionStatusChangeReason.No_Network:
                    InternalRefreshConnection();
                    break;

                case ConnectionStatusChangeReason.Client_Close:
                    // ignore this ... part of client shutting down.
                    break;

                case ConnectionStatusChangeReason.Communication_Error:
                case ConnectionStatusChangeReason.Device_Disabled:
                    // These are not implemented in the Azure SDK
                    break;

                default:
                    break;
                }
            });
        }
        async Task <Dictionary <string, object> > IDeviceTwin.GetDesiredPropertiesAsync()
        {
            Logger.Log("AzureIoTHubDeviceTwinProxy.GetDesiredPropertiesAsync", LoggingLevel.Information);

            var desiredProperties = new Dictionary <string, object>();

            try
            {
                var twin = await this.deviceClient.GetTwinAsync();

                foreach (KeyValuePair <string, object> p in twin.Properties.Desired)
                {
                    desiredProperties[p.Key] = p.Value;
                }
                desiredProperties[DMJSonConstants.DTVersionString] = twin.Properties.Desired.Version;
            }
            catch (IotHubCommunicationException e)
            {
                logAsyncHandler?.Invoke(e.ToString(), LoggingLevel.Error);
                await InternalRefreshConnectionAsync();
            }
            catch (Exception e)
            {
                logAsyncHandler?.Invoke(e.ToString(), LoggingLevel.Error);
            }

            return(desiredProperties);
        }
Ejemplo n.º 6
0
 private async Task _logAsync(LogSeverity severity, string message)
 {
     await LogAsync?.Invoke(new LogMessage(severity, "Gotchi", message));
 }