Merge branch 'master' of https://github.com/chkr1011/MQTTnet into feature/Reason_Code_In_Subscription_Interceptor

# Conflicts:
#	Build/MQTTnet.nuspec
#	Source/MQTTnet/Server/Internal/MqttClientSessionsManager.cs
This commit is contained in:
Christian
2021-10-29 21:58:57 +02:00
parent d5237bb3f5
commit 6bad9f183c
191 changed files with 601 additions and 981 deletions
@@ -1,15 +1,16 @@
using MQTTnet.Adapter;
using MQTTnet.AspNetCore.Client.Tcp;
using MQTTnet.Client.Options;
using MQTTnet.Formatter;
using System;
using System.Net;
using MQTTnet.Client;
using MQTTnet.Diagnostics;
namespace MQTTnet.AspNetCore.Client
{
public class MqttClientConnectionContextFactory : IMqttClientAdapterFactory
{
public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options)
public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetLogger logger)
{
if (options == null) throw new ArgumentNullException(nameof(options));
@@ -3,7 +3,6 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using MQTTnet.Adapter;
using MQTTnet.Diagnostics;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Implementations;
using MQTTnet.Server;
@@ -4,6 +4,7 @@ using MQTTnet.Adapter;
using MQTTnet.Server;
using System;
using System.Threading.Tasks;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
namespace MQTTnet.AspNetCore
@@ -33,7 +34,7 @@ namespace MQTTnet.AspNetCore
}
}
public Task StartAsync(MqttServerOptions options)
public Task StartAsync(MqttServerOptions options, IMqttNetLogger logger)
{
return Task.CompletedTask;
}
@@ -3,7 +3,7 @@ using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using MQTTnet.Adapter;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics;
using MQTTnet.Server;
namespace MQTTnet.AspNetCore
@@ -6,23 +6,19 @@ using MQTTnet.Server;
using System;
using System.Net.WebSockets;
using System.Threading.Tasks;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics;
namespace MQTTnet.AspNetCore
{
public sealed class MqttWebSocketServerAdapter : IMqttServerAdapter
{
readonly IMqttNetLogger _rootLogger;
public MqttWebSocketServerAdapter(IMqttNetLogger logger)
{
_rootLogger = logger ?? throw new ArgumentNullException(nameof(logger));
}
IMqttNetLogger _logger = new MqttNetNullLogger();
public Func<IMqttChannelAdapter, Task> ClientHandler { get; set; }
public Task StartAsync(MqttServerOptions options)
public Task StartAsync(MqttServerOptions options, IMqttNetLogger logger)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
return Task.CompletedTask;
}
@@ -49,7 +45,7 @@ namespace MQTTnet.AspNetCore
var formatter = new MqttPacketFormatterAdapter(writer);
var channel = new MqttWebSocketChannel(webSocket, endpoint, isSecureConnection, clientCertificate);
using (var channelAdapter = new MqttChannelAdapter(channel, formatter, null, _rootLogger))
using (var channelAdapter = new MqttChannelAdapter(channel, formatter, null, _logger))
{
await clientHandler(channelAdapter).ConfigureAwait(false);
}
@@ -1,10 +1,9 @@
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using System;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Client;
using MQTTnet.Packets;
namespace MQTTnet.Extensions.ManagedClient
{
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Options;
using MQTTnet.Client;
using MQTTnet.Server;
namespace MQTTnet.Extensions.ManagedClient
@@ -1,9 +1,4 @@
using MQTTnet.Client;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Publishing;
using MQTTnet.Client.Receiving;
using MQTTnet.Diagnostics;
using MQTTnet.Exceptions;
using MQTTnet.Internal;
using MQTTnet.Protocol;
@@ -13,7 +8,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics;
using MQTTnet.Packets;
namespace MQTTnet.Extensions.ManagedClient
{
@@ -72,13 +68,7 @@ namespace MQTTnet.Extensions.ManagedClient
get => InternalClient.DisconnectedHandler;
set => InternalClient.DisconnectedHandler = value;
}
public IMqttApplicationMessageReceivedHandler ApplicationMessageReceivedHandler
{
get => InternalClient.ApplicationMessageReceivedHandler;
set => InternalClient.ApplicationMessageReceivedHandler = value;
}
public event Func<MqttApplicationMessageReceivedEventArgs, Task> ApplicationMessageReceivedAsync
{
add => InternalClient.ApplicationMessageReceivedAsync += value;
@@ -1,12 +1,10 @@
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Publishing;
using MQTTnet.Client.Receiving;
using MQTTnet.Protocol;
using MQTTnet.Protocol;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Client;
using MQTTnet.Packets;
namespace MQTTnet.Extensions.ManagedClient
{
@@ -75,42 +73,7 @@ namespace MQTTnet.Extensions.ManagedClient
client.DisconnectedHandler = handler;
return client;
}
public static TReceiver UseApplicationMessageReceivedHandler<TReceiver>(this TReceiver receiver, Func<MqttApplicationMessageReceivedEventArgs, Task> handler)
where TReceiver : IMqttApplicationMessageReceiver
{
if (receiver == null) throw new ArgumentNullException(nameof(receiver));
if (handler == null)
{
return receiver.UseApplicationMessageReceivedHandler((IMqttApplicationMessageReceivedHandler)null);
}
return receiver.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(handler));
}
public static TReceiver UseApplicationMessageReceivedHandler<TReceiver>(this TReceiver receiver, Action<MqttApplicationMessageReceivedEventArgs> handler)
where TReceiver : IMqttApplicationMessageReceiver
{
if (receiver == null) throw new ArgumentNullException(nameof(receiver));
if (handler == null)
{
return receiver.UseApplicationMessageReceivedHandler((IMqttApplicationMessageReceivedHandler)null);
}
return receiver.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(handler));
}
public static TReceiver UseApplicationMessageReceivedHandler<TReceiver>(this TReceiver receiver, IMqttApplicationMessageReceivedHandler handler)
where TReceiver : IMqttApplicationMessageReceiver
{
if (receiver == null) throw new ArgumentNullException(nameof(receiver));
receiver.ApplicationMessageReceivedHandler = handler;
return receiver;
}
public static Task SubscribeAsync(this IManagedMqttClient client, params MqttTopicFilter[] topicFilters)
{
if (client == null) throw new ArgumentNullException(nameof(client));
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Options;
using MQTTnet.Client;
using MQTTnet.Server;
namespace MQTTnet.Extensions.ManagedClient
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Options;
using MQTTnet.Client;
using MQTTnet.Server;
namespace MQTTnet.Extensions.ManagedClient
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics;
namespace MQTTnet.Extensions.ManagedClient
{
+4 -20
View File
@@ -7,7 +7,6 @@ using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Client.Subscribing;
using MQTTnet.Implementations;
namespace MQTTnet.Extensions.Rpc
@@ -17,23 +16,13 @@ namespace MQTTnet.Extensions.Rpc
readonly ConcurrentDictionary<string, TaskCompletionSource<byte[]>> _waitingCalls = new ConcurrentDictionary<string, TaskCompletionSource<byte[]>>();
readonly IMqttClient _mqttClient;
readonly IMqttRpcClientOptions _options;
readonly RpcAwareApplicationMessageReceivedHandler _applicationMessageReceivedHandler;
[Obsolete("Use MqttRpcClient(IMqttClient mqttClient, IMqttRpcClientOptions options).")]
public MqttRpcClient(IMqttClient mqttClient) : this(mqttClient, new MqttRpcClientOptions())
{
}
public MqttRpcClient(IMqttClient mqttClient, IMqttRpcClientOptions options)
{
_mqttClient = mqttClient ?? throw new ArgumentNullException(nameof(mqttClient));
_options = options ?? throw new ArgumentNullException(nameof(options));
_applicationMessageReceivedHandler = new RpcAwareApplicationMessageReceivedHandler(
mqttClient.ApplicationMessageReceivedHandler,
HandleApplicationMessageReceivedAsync);
_mqttClient.ApplicationMessageReceivedHandler = _applicationMessageReceivedHandler;
_mqttClient.ApplicationMessageReceivedAsync += HandleApplicationMessageReceivedAsync;
}
public async Task<byte[]> ExecuteAsync(TimeSpan timeout, string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel)
@@ -59,12 +48,7 @@ namespace MQTTnet.Extensions.Rpc
public async Task<byte[]> ExecuteAsync(string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, CancellationToken cancellationToken)
{
if (methodName == null) throw new ArgumentNullException(nameof(methodName));
if (!(_mqttClient.ApplicationMessageReceivedHandler is RpcAwareApplicationMessageReceivedHandler))
{
throw new InvalidOperationException("The application message received handler was modified.");
}
var topicNames = _options.TopicGenerationStrategy.CreateRpcTopics(new TopicGenerationContext
{
MethodName = methodName,
@@ -146,7 +130,7 @@ namespace MQTTnet.Extensions.Rpc
public void Dispose()
{
_mqttClient.ApplicationMessageReceivedHandler = _applicationMessageReceivedHandler.OriginalHandler;
_mqttClient.ApplicationMessageReceivedAsync -= HandleApplicationMessageReceivedAsync;
foreach (var tcs in _waitingCalls)
{
@@ -1,32 +0,0 @@
using System;
using System.Threading.Tasks;
using MQTTnet.Client.Receiving;
namespace MQTTnet.Extensions.Rpc
{
public sealed class RpcAwareApplicationMessageReceivedHandler : IMqttApplicationMessageReceivedHandler
{
readonly Func<MqttApplicationMessageReceivedEventArgs, Task> _handleReceivedApplicationMessageAsync;
public RpcAwareApplicationMessageReceivedHandler(
IMqttApplicationMessageReceivedHandler originalHandler,
Func<MqttApplicationMessageReceivedEventArgs, Task> handleReceivedApplicationMessageAsync)
{
OriginalHandler = originalHandler;
_handleReceivedApplicationMessageAsync = handleReceivedApplicationMessageAsync ?? throw new ArgumentNullException(nameof(handleReceivedApplicationMessageAsync));
}
public IMqttApplicationMessageReceivedHandler OriginalHandler { get; }
public async Task HandleApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs eventArgs)
{
// First try to check if there is a pending RPC call!
await _handleReceivedApplicationMessageAsync(eventArgs).ConfigureAwait(false);
if (OriginalHandler != null)
{
await OriginalHandler.HandleApplicationMessageReceivedAsync(eventArgs).ConfigureAwait(false);
}
}
}
}
@@ -8,7 +8,7 @@ namespace MQTTnet.Extensions.WebSocket4Net
{
if (mqttFactory == null) throw new ArgumentNullException(nameof(mqttFactory));
return mqttFactory.UseClientAdapterFactory(new WebSocket4NetMqttClientAdapterFactory(mqttFactory.DefaultLogger));
return mqttFactory.UseClientAdapterFactory(new WebSocket4NetMqttClientAdapterFactory());
}
}
}
@@ -8,9 +8,8 @@ using System.Security.Cryptography.X509Certificates;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Channel;
using MQTTnet.Client.Options;
using MQTTnet.Client;
using MQTTnet.Exceptions;
using MQTTnet.Internal;
using SuperSocket.ClientEngine;
using WebSocket4Net;
@@ -1,23 +1,15 @@
using MQTTnet.Adapter;
using MQTTnet.Client.Options;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
using MQTTnet.Implementations;
using System;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Client;
using MQTTnet.Diagnostics;
namespace MQTTnet.Extensions.WebSocket4Net
{
public sealed class WebSocket4NetMqttClientAdapterFactory : IMqttClientAdapterFactory
{
readonly IMqttNetLogger _logger;
public WebSocket4NetMqttClientAdapterFactory(IMqttNetLogger logger)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options)
public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetLogger logger)
{
if (options == null) throw new ArgumentNullException(nameof(options));
@@ -29,7 +21,7 @@ namespace MQTTnet.Extensions.WebSocket4Net
new MqttTcpChannel(options),
new MqttPacketFormatterAdapter(options.ProtocolVersion),
options.PacketInspector,
_logger);
logger);
}
case MqttClientWebSocketOptions webSocketOptions:
@@ -38,7 +30,7 @@ namespace MQTTnet.Extensions.WebSocket4Net
new WebSocket4NetMqttChannel(options, webSocketOptions),
new MqttPacketFormatterAdapter(options.ProtocolVersion),
options.PacketInspector,
_logger);
logger);
}
default:
@@ -1,9 +1,10 @@
using MQTTnet.Client.Options;
using MQTTnet.Client;
using MQTTnet.Diagnostics;
namespace MQTTnet.Adapter
{
public interface IMqttClientAdapterFactory
{
IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options);
IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetLogger logger);
}
}
+2 -1
View File
@@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using MQTTnet.Diagnostics;
using MQTTnet.Server;
namespace MQTTnet.Adapter
@@ -8,7 +9,7 @@ namespace MQTTnet.Adapter
{
Func<IMqttChannelAdapter, Task> ClientHandler { get; set; }
Task StartAsync(MqttServerOptions options);
Task StartAsync(MqttServerOptions options, IMqttNetLogger logger);
Task StopAsync();
}
}
@@ -11,8 +11,6 @@ using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics.PacketInspection;
namespace MQTTnet.Adapter
{
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Connecting;
using MQTTnet.Client;
using MQTTnet.Exceptions;
namespace MQTTnet.Adapter
@@ -2,8 +2,6 @@ using System;
using System.IO;
using System.Linq;
using MQTTnet.Diagnostics;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics.PacketInspection;
using MQTTnet.Formatter;
namespace MQTTnet.Adapter
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
namespace MQTTnet.Client.Connecting
namespace MQTTnet.Client
{
public interface IMqttClientConnectedHandler
{
@@ -2,7 +2,7 @@
using MQTTnet.Packets;
using MQTTnet.Protocol;
namespace MQTTnet.Client.Connecting
namespace MQTTnet.Client
{
public sealed class MqttClientConnectResult
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Connecting
namespace MQTTnet.Client
{
public enum MqttClientConnectResultCode
{
@@ -4,7 +4,7 @@ using MQTTnet.Formatter;
using MQTTnet.Packets;
using MQTTnet.Protocol;
namespace MQTTnet.Client.Connecting
namespace MQTTnet.Client
{
public sealed class MqttClientConnectResultFactory
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Client.Connecting
namespace MQTTnet.Client
{
public class MqttClientConnectedEventArgs : EventArgs
{
@@ -1,7 +1,7 @@
using System;
using System.Threading.Tasks;
namespace MQTTnet.Client.Connecting
namespace MQTTnet.Client
{
public class MqttClientConnectedHandlerDelegate : IMqttClientConnectedHandler
{
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
namespace MQTTnet.Client.Disconnecting
namespace MQTTnet.Client
{
public interface IMqttClientDisconnectedHandler
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Disconnecting
namespace MQTTnet.Client
{
public sealed class MqttClientDisconnectOptions
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Disconnecting
namespace MQTTnet.Client
{
public sealed class MqttClientDisconnectOptionsBuilder
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Disconnecting
namespace MQTTnet.Client
{
public enum MqttClientDisconnectReason
{
@@ -1,7 +1,6 @@
using System;
using MQTTnet.Client.Connecting;
namespace MQTTnet.Client.Disconnecting
namespace MQTTnet.Client
{
public sealed class MqttClientDisconnectedEventArgs : EventArgs
{
@@ -1,7 +1,7 @@
using System;
using System.Threading.Tasks;
namespace MQTTnet.Client.Disconnecting
namespace MQTTnet.Client
{
public class MqttClientDisconnectedHandlerDelegate : IMqttClientDisconnectedHandler
{
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
namespace MQTTnet.Client.ExtendedAuthenticationExchange
namespace MQTTnet.Client
{
public interface IMqttExtendedAuthenticationExchangeHandler
{
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using MQTTnet.Packets;
using MQTTnet.Protocol;
namespace MQTTnet.Client.ExtendedAuthenticationExchange
namespace MQTTnet.Client
{
public class MqttExtendedAuthenticationExchangeContext
{
@@ -2,7 +2,7 @@
using MQTTnet.Packets;
using MQTTnet.Protocol;
namespace MQTTnet.Client.ExtendedAuthenticationExchange
namespace MQTTnet.Client
{
public class MqttExtendedAuthenticationExchangeData
{
+1 -7
View File
@@ -1,10 +1,4 @@
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.ExtendedAuthenticationExchange;
using MQTTnet.Client.Options;
using MQTTnet.Client.Subscribing;
using MQTTnet.Client.Unsubscribing;
using System;
using System;
using System.Threading;
using System.Threading.Tasks;
+6 -22
View File
@@ -1,12 +1,4 @@
using MQTTnet.Adapter;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.ExtendedAuthenticationExchange;
using MQTTnet.Client.Options;
using MQTTnet.Client.Publishing;
using MQTTnet.Client.Receiving;
using MQTTnet.Client.Subscribing;
using MQTTnet.Client.Unsubscribing;
using MQTTnet.Exceptions;
using MQTTnet.Internal;
using MQTTnet.PacketDispatcher;
@@ -15,7 +7,7 @@ using MQTTnet.Protocol;
using System;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
using MQTTnet.Implementations;
@@ -33,6 +25,7 @@ namespace MQTTnet.Client
readonly AsyncEvent<MqttApplicationMessageReceivedEventArgs> _applicationMessageReceivedEvent = new AsyncEvent<MqttApplicationMessageReceivedEventArgs>();
readonly IMqttClientAdapterFactory _adapterFactory;
readonly IMqttNetLogger _rootLogger;
readonly MqttNetSourceLogger _logger;
CancellationTokenSource _backgroundCancellationTokenSource;
@@ -49,12 +42,11 @@ namespace MQTTnet.Client
MqttClientDisconnectReason _disconnectReason;
DateTime _lastPacketSentTimestamp;
public MqttClient(IMqttClientAdapterFactory channelFactory, IMqttNetLogger logger)
{
if (logger == null) throw new ArgumentNullException(nameof(logger));
_adapterFactory = channelFactory ?? throw new ArgumentNullException(nameof(channelFactory));
_rootLogger = logger ?? throw new ArgumentNullException(nameof(logger));
_logger = logger.WithSource(nameof(MqttClient));
}
@@ -74,8 +66,6 @@ namespace MQTTnet.Client
remove => _disconnectedEvent.RemoveHandler(value);
}
public IMqttApplicationMessageReceivedHandler ApplicationMessageReceivedHandler { get; set; }
public event Func<MqttApplicationMessageReceivedEventArgs, Task> ApplicationMessageReceivedAsync
{
add => _applicationMessageReceivedEvent.AddHandler(value);
@@ -112,7 +102,7 @@ namespace MQTTnet.Client
_backgroundCancellationTokenSource = new CancellationTokenSource();
var backgroundCancellationToken = _backgroundCancellationTokenSource.Token;
var adapter = _adapterFactory.CreateClientAdapter(options);
var adapter = _adapterFactory.CreateClientAdapter(options, _rootLogger);
_adapter = adapter;
using (var effectiveCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(backgroundCancellationToken, cancellationToken))
@@ -813,13 +803,7 @@ namespace MQTTnet.Client
var applicationMessageFactory = new MqttApplicationMessageFactory();
var applicationMessage = applicationMessageFactory.Create(publishPacket);
var eventArgs = new MqttApplicationMessageReceivedEventArgs(Options.ClientId, applicationMessage, publishPacket, AcknowledgeReceivedPublishPacket);
var handler = ApplicationMessageReceivedHandler;
if (handler != null)
{
await handler.HandleApplicationMessageReceivedAsync(eventArgs).ConfigureAwait(false);
}
await _applicationMessageReceivedEvent.InvokeAsync(eventArgs).ConfigureAwait(false);
return eventArgs;
+2 -41
View File
@@ -1,16 +1,9 @@
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.ExtendedAuthenticationExchange;
using MQTTnet.Client.Options;
using MQTTnet.Client.Publishing;
using MQTTnet.Client.Receiving;
using MQTTnet.Client.Subscribing;
using MQTTnet.Client.Unsubscribing;
using MQTTnet.Protocol;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Packets;
namespace MQTTnet.Client
{
@@ -79,39 +72,7 @@ namespace MQTTnet.Client
client.DisconnectedHandler = handler;
return client;
}
public static IMqttClient UseApplicationMessageReceivedHandler(this IMqttClient client, Func<MqttApplicationMessageReceivedEventArgs, Task> handler)
{
if (client == null) throw new ArgumentNullException(nameof(client));
if (handler == null)
{
return client.UseApplicationMessageReceivedHandler((IMqttApplicationMessageReceivedHandler)null);
}
return client.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(handler));
}
public static IMqttClient UseApplicationMessageReceivedHandler(this IMqttClient client, Action<MqttApplicationMessageReceivedEventArgs> handler)
{
if (client == null) throw new ArgumentNullException(nameof(client));
if (handler == null)
{
return client.UseApplicationMessageReceivedHandler((IMqttApplicationMessageReceivedHandler)null);
}
return client.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(handler));
}
public static IMqttClient UseApplicationMessageReceivedHandler(this IMqttClient client, IMqttApplicationMessageReceivedHandler handler)
{
if (client == null) throw new ArgumentNullException(nameof(client));
client.ApplicationMessageReceivedHandler = handler;
return client;
}
public static Task<MqttClientConnectResult> ReconnectAsync(this IMqttClient client)
{
if (client == null) throw new ArgumentNullException(nameof(client));
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public interface IMqttClientChannelOptions
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public interface IMqttClientCredentials
{
@@ -1,11 +1,10 @@
using MQTTnet.Client.ExtendedAuthenticationExchange;
using System;
using System.Collections.Generic;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
using MQTTnet.Packets;
using System;
using System.Collections.Generic;
using MQTTnet.Diagnostics.PacketInspection;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public interface IMqttClientOptions
{
@@ -1,7 +1,7 @@
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientCertificateValidationCallbackContext
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientCredentials : IMqttClientCredentials
{
@@ -1,11 +1,10 @@
using MQTTnet.Client.ExtendedAuthenticationExchange;
using System;
using System.Collections.Generic;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
using MQTTnet.Packets;
using System;
using System.Collections.Generic;
using MQTTnet.Diagnostics.PacketInspection;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientOptions : IMqttClientOptions
{
@@ -1,13 +1,12 @@
using MQTTnet.Client.ExtendedAuthenticationExchange;
using MQTTnet.Formatter;
using MQTTnet.Packets;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MQTTnet.Diagnostics.PacketInspection;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
using MQTTnet.Packets;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientOptionsBuilder
{
@@ -4,7 +4,7 @@ using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientOptionsBuilderTlsParameters
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Net;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientOptionsBuilderWebSocketParameters
{
@@ -1,6 +1,6 @@
using System.Net.Sockets;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientTcpOptions : IMqttClientChannelOptions
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public static class MqttClientTcpOptionsExtensions
{
@@ -4,7 +4,7 @@ using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientTlsOptions
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Net;
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientWebSocketOptions : IMqttClientChannelOptions
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Options
namespace MQTTnet.Client
{
public class MqttClientWebSocketProxyOptions
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Publishing
namespace MQTTnet.Client
{
public enum MqttClientPublishReasonCode
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using MQTTnet.Packets;
namespace MQTTnet.Client.Publishing
namespace MQTTnet.Client
{
public sealed class MqttClientPublishResult
{
@@ -1,7 +1,7 @@
using MQTTnet.Packets;
using MQTTnet.Protocol;
namespace MQTTnet.Client.Publishing
namespace MQTTnet.Client
{
public sealed class MqttClientPublishResultFactory
{
@@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace MQTTnet.Client.Receiving
{
public interface IMqttApplicationMessageReceivedHandler
{
Task HandleApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs eventArgs);
}
}
@@ -4,7 +4,7 @@ using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Packets;
namespace MQTTnet
namespace MQTTnet.Client
{
public sealed class MqttApplicationMessageReceivedEventArgs : EventArgs
{
@@ -1,32 +0,0 @@
using System;
using System.Threading.Tasks;
using MQTTnet.Implementations;
namespace MQTTnet.Client.Receiving
{
public sealed class MqttApplicationMessageReceivedHandlerDelegate : IMqttApplicationMessageReceivedHandler
{
readonly Func<MqttApplicationMessageReceivedEventArgs, Task> _handler;
public MqttApplicationMessageReceivedHandlerDelegate(Action<MqttApplicationMessageReceivedEventArgs> handler)
{
if (handler == null) throw new ArgumentNullException(nameof(handler));
_handler = context =>
{
handler(context);
return PlatformAbstractionLayer.CompletedTask;
};
}
public MqttApplicationMessageReceivedHandlerDelegate(Func<MqttApplicationMessageReceivedEventArgs, Task> handler)
{
_handler = handler ?? throw new ArgumentNullException(nameof(handler));
}
public Task HandleApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs context)
{
return _handler(context);
}
}
}
@@ -1,4 +1,4 @@
namespace MQTTnet
namespace MQTTnet.Client
{
public enum MqttApplicationMessageReceivedReasonCode
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using MQTTnet.Packets;
namespace MQTTnet.Client.Subscribing
namespace MQTTnet.Client
{
public sealed class MqttClientSubscribeOptions
{
@@ -1,10 +1,10 @@
using MQTTnet.Packets;
using MQTTnet.Protocol;
using System;
using System;
using System.Collections.Generic;
using MQTTnet.Exceptions;
using MQTTnet.Packets;
using MQTTnet.Protocol;
namespace MQTTnet.Client.Subscribing
namespace MQTTnet.Client
{
public sealed class MqttClientSubscribeOptionsBuilder
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using MQTTnet.Packets;
namespace MQTTnet.Client.Subscribing
namespace MQTTnet.Client
{
public sealed class MqttClientSubscribeResult
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Subscribing
namespace MQTTnet.Client
{
public enum MqttClientSubscribeResultCode
{
@@ -3,7 +3,7 @@ using System.Linq;
using MQTTnet.Exceptions;
using MQTTnet.Packets;
namespace MQTTnet.Client.Subscribing
namespace MQTTnet.Client
{
public sealed class MqttClientSubscribeResultFactory
{
@@ -1,4 +1,6 @@
namespace MQTTnet.Client.Subscribing
using MQTTnet.Packets;
namespace MQTTnet.Client
{
public sealed class MqttClientSubscribeResultItem
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using MQTTnet.Packets;
namespace MQTTnet.Client.Unsubscribing
namespace MQTTnet.Client
{
public sealed class MqttClientUnsubscribeOptions
{
@@ -1,8 +1,8 @@
using MQTTnet.Packets;
using System;
using System;
using System.Collections.Generic;
using MQTTnet.Packets;
namespace MQTTnet.Client.Unsubscribing
namespace MQTTnet.Client
{
public class MqttClientUnsubscribeOptionsBuilder
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using MQTTnet.Packets;
namespace MQTTnet.Client.Unsubscribing
namespace MQTTnet.Client
{
public sealed class MqttClientUnsubscribeResult
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Client.Unsubscribing
namespace MQTTnet.Client
{
public enum MqttClientUnsubscribeResultCode
{
@@ -3,7 +3,7 @@ using System.Linq;
using MQTTnet.Exceptions;
using MQTTnet.Packets;
namespace MQTTnet.Client.Unsubscribing
namespace MQTTnet.Client
{
public sealed class MqttClientUnsubscribeResultFactory
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Client.Unsubscribing
namespace MQTTnet.Client
{
public sealed class MqttClientUnsubscribeResultItem
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
public interface IMqttNetLogger
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
/// <summary>
/// This logger fires an event when a new message was published.
@@ -1,4 +1,4 @@
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
public enum MqttNetLogLevel
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
public sealed class MqttNetLogMessage
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
public sealed class MqttNetLogMessagePublishedEventArgs : EventArgs
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
/// <summary>
/// This logger does nothing with the messages.
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
public sealed class MqttNetSourceLogger
{
@@ -1,6 +1,6 @@
using System;
namespace MQTTnet.Diagnostics.Logger
namespace MQTTnet.Diagnostics
{
public static class MqttNetSourceLoggerExtensions
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Diagnostics.PacketInspection
namespace MQTTnet.Diagnostics
{
public interface IMqttPacketInspector
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Diagnostics.PacketInspection
namespace MQTTnet.Diagnostics
{
public enum MqttPacketFlowDirection
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Diagnostics.PacketInspection
namespace MQTTnet.Diagnostics
{
public sealed class ProcessMqttPacketContext
{
@@ -1,4 +1,4 @@
namespace MQTTnet.Diagnostics.Runtime
namespace MQTTnet.Diagnostics
{
public static class TargetFrameworkProvider
{
@@ -1,6 +1,6 @@
using System;
using System.Linq;
using MQTTnet.Client.Options;
using MQTTnet.Client;
namespace MQTTnet.Extensions
{
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Options;
using MQTTnet.Client;
using MQTTnet.Packets;
namespace MQTTnet.Formatter
@@ -1,4 +1,4 @@
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
@@ -1,4 +1,5 @@
using System;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
using MQTTnet.Server;
@@ -1,4 +1,5 @@
using System;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
@@ -1,4 +1,5 @@
using System;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
using MQTTnet.Server;
@@ -1,4 +1,5 @@
using System;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
@@ -58,7 +58,6 @@ namespace MQTTnet.Formatter
Payload = connectPacket.WillMessage,
QualityOfServiceLevel = connectPacket.WillQoS,
Retain = connectPacket.WillRetain,
Dup = false,
Properties =
{
ContentType = connectPacket.WillProperties.ContentType,
@@ -1,6 +1,6 @@
using System;
using MQTTnet.Packets;
using MQTTnet.Server.Internal;
using MQTTnet.Server;
namespace MQTTnet.Formatter
{
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Subscribing;
using MQTTnet.Client;
using MQTTnet.Packets;
namespace MQTTnet.Formatter
@@ -1,6 +1,6 @@
using System;
using MQTTnet.Packets;
using MQTTnet.Server.Internal;
using MQTTnet.Server;
namespace MQTTnet.Formatter
{
@@ -1,5 +1,5 @@
using System;
using MQTTnet.Client.Unsubscribing;
using MQTTnet.Client;
using MQTTnet.Packets;
namespace MQTTnet.Formatter
@@ -1,6 +1,6 @@
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Client.Publishing;
using MQTTnet.Client;
namespace MQTTnet
{
@@ -1,17 +1,11 @@
using System;
using System.Threading.Tasks;
using MQTTnet.Client.Receiving;
using MQTTnet.Client;
namespace MQTTnet
{
public interface IMqttApplicationMessageReceiver
{
/// <summary>
/// Gets or sets the application message received handler that is fired every time a new message is received on the client's subscriptions.
/// Hint: Initialize handlers before you connect the client to avoid issues.
/// </summary>
IMqttApplicationMessageReceivedHandler ApplicationMessageReceivedHandler { get; set; }
/// <summary>
/// Fired when an application message was received.
/// </summary>
@@ -1,23 +1,15 @@
using MQTTnet.Adapter;
using MQTTnet.Client.Options;
using MQTTnet.Diagnostics;
using MQTTnet.Formatter;
using System;
using MQTTnet.Channel;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Client;
namespace MQTTnet.Implementations
{
public class MqttClientAdapterFactory : IMqttClientAdapterFactory
public sealed class MqttClientAdapterFactory : IMqttClientAdapterFactory
{
readonly IMqttNetLogger _logger;
public MqttClientAdapterFactory(IMqttNetLogger logger)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options)
public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetLogger logger)
{
if (options == null) throw new ArgumentNullException(nameof(options));
@@ -43,7 +35,7 @@ namespace MQTTnet.Implementations
}
var packetFormatterAdapter = new MqttPacketFormatterAdapter(options.ProtocolVersion, new MqttPacketWriter());
return new MqttChannelAdapter(channel, packetFormatterAdapter, options.PacketInspector, _logger);
return new MqttChannelAdapter(channel, packetFormatterAdapter, options.PacketInspector, logger);
}
}
}

Some files were not shown because too many files have changed in this diff Show More