diff --git a/Build/MQTTnet.nuspec b/Build/MQTTnet.nuspec
index 3b7b0bf8..d8558191 100644
--- a/Build/MQTTnet.nuspec
+++ b/Build/MQTTnet.nuspec
@@ -14,6 +14,7 @@
* [Client] Fixed wrong value for "ClientWasConnected" in "MqttClientDisconnectedEventArgs" #976 (thanks to @dbeinder).
* [Client] Added direct support for Amazon AWS connections (requires .NET Core 3.1) (thanks to @henning-krause).
+* [ManagedClient] Exposed the internal MQTT client.
* [Server] Added client message queue interceptor for QoS level (tahnks to @msallin).
Copyright Christian Kratky 2016-2020
diff --git a/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs b/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs
index 285ceda8..cc2490cb 100644
--- a/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs
+++ b/Source/MQTTnet.Extensions.ManagedClient/IManagedMqttClient.cs
@@ -4,30 +4,46 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+using MQTTnet.Client;
namespace MQTTnet.Extensions.ManagedClient
{
public interface IManagedMqttClient : IApplicationMessageReceiver, IApplicationMessagePublisher, IDisposable
{
- bool IsStarted { get; }
- bool IsConnected { get; }
- int PendingApplicationMessagesCount { get; }
- IManagedMqttClientOptions Options { get; }
+ ///
+ /// Gets the internally used MQTT client.
+ /// This property should be used with caution because manipulating the internal client might break the managed client.
+ ///
+ IMqttClient InternalClient { get; }
+ bool IsStarted { get; }
+
+ bool IsConnected { get; }
+
+ int PendingApplicationMessagesCount { get; }
+
+ IManagedMqttClientOptions Options { get; }
+
IMqttClientConnectedHandler ConnectedHandler { get; set; }
+
IMqttClientDisconnectedHandler DisconnectedHandler { get; set; }
IApplicationMessageProcessedHandler ApplicationMessageProcessedHandler { get; set; }
+
IApplicationMessageSkippedHandler ApplicationMessageSkippedHandler { get; set; }
IConnectingFailedHandler ConnectingFailedHandler { get; set; }
+
ISynchronizingSubscriptionsFailedHandler SynchronizingSubscriptionsFailedHandler { get; set; }
Task StartAsync(IManagedMqttClientOptions options);
+
Task StopAsync();
+
Task PingAsync(CancellationToken cancellationToken);
Task SubscribeAsync(IEnumerable topicFilters);
+
Task UnsubscribeAsync(IEnumerable topics);
Task PublishAsync(ManagedMqttApplicationMessage applicationMessages);
diff --git a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs
index 084a0994..65229c97 100644
--- a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs
+++ b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs
@@ -46,6 +46,7 @@ namespace MQTTnet.Extensions.ManagedClient
public ManagedMqttClient(IMqttClient mqttClient, IMqttNetLogger logger)
{
_mqttClient = mqttClient ?? throw new ArgumentNullException(nameof(mqttClient));
+ InternalClient = mqttClient;
if (logger == null) throw new ArgumentNullException(nameof(logger));
_logger = logger.CreateScopedLogger(nameof(ManagedMqttClient));
@@ -55,6 +56,8 @@ namespace MQTTnet.Extensions.ManagedClient
public bool IsStarted => _connectionCancellationToken != null;
+ public IMqttClient InternalClient { get; }
+
public int PendingApplicationMessagesCount => _messageQueue.Count;
public IManagedMqttClientOptions Options { get; private set; }