diff --git a/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.MqttBrokerAdapter/upstream/BrokeredDeviceConnectivityManager.cs b/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.MqttBrokerAdapter/upstream/BrokeredDeviceConnectivityManager.cs new file mode 100644 index 00000000000..ca01d01a91c --- /dev/null +++ b/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.MqttBrokerAdapter/upstream/BrokeredDeviceConnectivityManager.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft. All rights reserved. +namespace Microsoft.Azure.Devices.Edge.Hub.MqttBrokerAdapter +{ + using System; + using System.Threading.Tasks; + using Microsoft.Azure.Devices.Edge.Hub.Core; + using Microsoft.Azure.Devices.Edge.Hub.Core.Cloud; + using Microsoft.Azure.Devices.Edge.Util; + + public class BrokeredDeviceConnectivityManager : IDeviceConnectivityManager, IDisposable + { + BrokeredCloudProxyDispatcher cloudProxyDispatcher; + + public BrokeredDeviceConnectivityManager(BrokeredCloudProxyDispatcher cloudProxyDispatcher) + { + this.cloudProxyDispatcher = Preconditions.CheckNotNull(cloudProxyDispatcher); + this.cloudProxyDispatcher.ConnectionStatusChangedEvent += this.ForwardConnectivityEvent; + } + + public event EventHandler DeviceConnected; + public event EventHandler DeviceDisconnected; + + // These are not being used in brokered setup + public Task CallSucceeded() => Task.CompletedTask; + public Task CallTimedOut() => Task.CompletedTask; + + public void Dispose() => this.cloudProxyDispatcher.ConnectionStatusChangedEvent -= this.ForwardConnectivityEvent; + + void ForwardConnectivityEvent(CloudConnectionStatus status) + { + switch (status) + { + case CloudConnectionStatus.ConnectionEstablished: + this.DeviceConnected?.Invoke(this, EventArgs.Empty); + break; + + case CloudConnectionStatus.Disconnected: + this.DeviceDisconnected?.Invoke(this, EventArgs.Empty); + break; + } + } + } +} diff --git a/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Service/modules/RoutingModule.cs b/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Service/modules/RoutingModule.cs index 78a9b1740c0..47350c7780c 100644 --- a/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Service/modules/RoutingModule.cs +++ b/edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Service/modules/RoutingModule.cs @@ -197,19 +197,6 @@ protected override void Load(ContainerBuilder builder) .As() .SingleInstance(); - // IDeviceConnectivityManager - builder.Register( - c => - { - var edgeHubCredentials = c.ResolveNamed("EdgeHubCredentials"); - IDeviceConnectivityManager deviceConnectivityManager = this.experimentalFeatures.DisableConnectivityCheck - ? new NullDeviceConnectivityManager() - : new DeviceConnectivityManager(this.connectivityCheckFrequency, TimeSpan.FromMinutes(2), edgeHubCredentials.Identity) as IDeviceConnectivityManager; - return deviceConnectivityManager; - }) - .As() - .SingleInstance(); - // IDeviceClientProvider builder.Register( c => @@ -223,6 +210,19 @@ protected override void Load(ContainerBuilder builder) if (this.isLegacyUpstream) { + // IDeviceConnectivityManager + builder.Register( + c => + { + var edgeHubCredentials = c.ResolveNamed("EdgeHubCredentials"); + IDeviceConnectivityManager deviceConnectivityManager = this.experimentalFeatures.DisableConnectivityCheck + ? new NullDeviceConnectivityManager() + : new DeviceConnectivityManager(this.connectivityCheckFrequency, TimeSpan.FromMinutes(2), edgeHubCredentials.Identity) as IDeviceConnectivityManager; + return deviceConnectivityManager; + }) + .As() + .SingleInstance(); + // Task builder.Register( async c => @@ -260,6 +260,18 @@ protected override void Load(ContainerBuilder builder) } else { + // IDeviceConnectivityManager + builder.Register( + c => + { + IDeviceConnectivityManager deviceConnectivityManager = this.experimentalFeatures.DisableConnectivityCheck + ? new NullDeviceConnectivityManager() as IDeviceConnectivityManager + : new BrokeredDeviceConnectivityManager(c.Resolve()); + return deviceConnectivityManager; + }) + .As() + .SingleInstance(); + builder.Register( c => {