Skip to content

Commit

Permalink
added device connectivity manager wired to bridge connection events (A…
Browse files Browse the repository at this point in the history
  • Loading branch information
vipeller authored Feb 12, 2021
1 parent 22d4557 commit a31eed4
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -197,19 +197,6 @@ protected override void Load(ContainerBuilder builder)
.As<IMessageConverterProvider>()
.SingleInstance();

// IDeviceConnectivityManager
builder.Register(
c =>
{
var edgeHubCredentials = c.ResolveNamed<IClientCredentials>("EdgeHubCredentials");
IDeviceConnectivityManager deviceConnectivityManager = this.experimentalFeatures.DisableConnectivityCheck
? new NullDeviceConnectivityManager()
: new DeviceConnectivityManager(this.connectivityCheckFrequency, TimeSpan.FromMinutes(2), edgeHubCredentials.Identity) as IDeviceConnectivityManager;
return deviceConnectivityManager;
})
.As<IDeviceConnectivityManager>()
.SingleInstance();

// IDeviceClientProvider
builder.Register(
c =>
Expand All @@ -223,6 +210,19 @@ protected override void Load(ContainerBuilder builder)

if (this.isLegacyUpstream)
{
// IDeviceConnectivityManager
builder.Register(
c =>
{
var edgeHubCredentials = c.ResolveNamed<IClientCredentials>("EdgeHubCredentials");
IDeviceConnectivityManager deviceConnectivityManager = this.experimentalFeatures.DisableConnectivityCheck
? new NullDeviceConnectivityManager()
: new DeviceConnectivityManager(this.connectivityCheckFrequency, TimeSpan.FromMinutes(2), edgeHubCredentials.Identity) as IDeviceConnectivityManager;
return deviceConnectivityManager;
})
.As<IDeviceConnectivityManager>()
.SingleInstance();

// Task<ICloudConnectionProvider>
builder.Register(
async c =>
Expand Down Expand Up @@ -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<BrokeredCloudProxyDispatcher>());
return deviceConnectivityManager;
})
.As<IDeviceConnectivityManager>()
.SingleInstance();

builder.Register(
c =>
{
Expand Down

0 comments on commit a31eed4

Please sign in to comment.