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; }