diff --git a/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs b/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs index 12a65603..644104f5 100644 --- a/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs +++ b/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs @@ -13,7 +13,12 @@ namespace MQTTnet.Extensions.ManagedClient int PendingApplicationMessagesCount { get; } IManagedMqttClientOptions Options { get; } + IMqttClientConnectedHandler ConnectedHandler { get; set; } + [Obsolete("Use ConnectedHandler instead.")] event EventHandler Connected; + + IMqttClientDisconnectedHandler DisconnectedHandler { get; set; } + [Obsolete("Use DisconnectedHandler instead.")] event EventHandler Disconnected; event EventHandler ApplicationMessageProcessed; @@ -21,7 +26,7 @@ namespace MQTTnet.Extensions.ManagedClient event EventHandler ConnectingFailed; event EventHandler SynchronizingSubscriptionsFailed; - + Task StartAsync(IManagedMqttClientOptions options); Task StopAsync(); diff --git a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs index 37dab8d1..54750a11 100644 --- a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs +++ b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs @@ -4,6 +4,8 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MQTTnet.Client; +using MQTTnet.Client.Connecting; +using MQTTnet.Client.Disconnecting; using MQTTnet.Client.Publishing; using MQTTnet.Client.Receiving; using MQTTnet.Diagnostics; @@ -50,9 +52,13 @@ namespace MQTTnet.Extensions.ManagedClient public int PendingApplicationMessagesCount => _messageQueue.Count; public IManagedMqttClientOptions Options { get; private set; } + public IMqttClientConnectedHandler ConnectedHandler { get; set; } public event EventHandler Connected; + + public IMqttClientDisconnectedHandler DisconnectedHandler { get; set; } public event EventHandler Disconnected; + public IMqttApplicationMessageHandler ReceivedApplicationMessageHandler { get => _mqttClient.ReceivedApplicationMessageHandler; @@ -424,13 +430,13 @@ namespace MQTTnet.Extensions.ManagedClient private Task OnDisconnected(MqttClientDisconnectedEventArgs eventArgs) { Disconnected?.Invoke(this, eventArgs); - return Task.FromResult(0); + return DisconnectedHandler?.HandleDisconnectedAsync(eventArgs); } private Task OnConnected(MqttClientConnectedEventArgs eventArgs) { Connected?.Invoke(this, eventArgs); - return Task.FromResult(0); + return ConnectedHandler?.HandleConnectedAsync(eventArgs); } private void StartPublishing() diff --git a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClientExtensions.cs b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClientExtensions.cs index f6c69a87..50790d44 100644 --- a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClientExtensions.cs +++ b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClientExtensions.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using MQTTnet.Client.Connecting; +using MQTTnet.Client.Disconnecting; using MQTTnet.Client.Publishing; using MQTTnet.Client.Receiving; using MQTTnet.Protocol; @@ -10,6 +12,30 @@ namespace MQTTnet.Extensions.ManagedClient { public static class ManagedMqttClientExtensions { + public static IManagedMqttClient UseConnectedHandler(this IManagedMqttClient client, Func handler) + { + if (handler == null) + { + client.ConnectedHandler = null; + return client; + } + + client.ConnectedHandler = new MqttClientConnectedHandlerDelegate(handler); + return client; + } + + public static IManagedMqttClient UseDisconnectedHandler(this IManagedMqttClient client, Func handler) + { + if (handler == null) + { + client.DisconnectedHandler = null; + return client; + } + + client.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(handler); + return client; + } + public static IManagedMqttClient UseReceivedApplicationMessageHandler(this IManagedMqttClient client, Func handler) { if (handler == null)