diff --git a/Source/MQTTnet/Server/IMqttServerOptions.cs b/Source/MQTTnet/Server/IMqttServerOptions.cs index 61900edb..05dab5ee 100644 --- a/Source/MQTTnet/Server/IMqttServerOptions.cs +++ b/Source/MQTTnet/Server/IMqttServerOptions.cs @@ -27,5 +27,7 @@ namespace MQTTnet.Server IMqttRetainedMessagesManager RetainedMessagesManager { get; } IMqttServerApplicationMessageInterceptor UndeliveredMessageInterceptor { get; set; } + + IMqttServerClientDisconnectedHandler ClientDisconnectedInterceptor { get; set; } } } \ No newline at end of file diff --git a/Source/MQTTnet/Server/MqttServerClientDisconnectedHandlerDelegate.cs b/Source/MQTTnet/Server/MqttServerClientDisconnectedHandlerDelegate.cs index b1d495a6..1ca94649 100644 --- a/Source/MQTTnet/Server/MqttServerClientDisconnectedHandlerDelegate.cs +++ b/Source/MQTTnet/Server/MqttServerClientDisconnectedHandlerDelegate.cs @@ -5,27 +5,27 @@ namespace MQTTnet.Server { public class MqttServerClientDisconnectedHandlerDelegate : IMqttServerClientDisconnectedHandler { - private readonly Func _handler; + private readonly Func _callback; - public MqttServerClientDisconnectedHandlerDelegate(Action handler) + public MqttServerClientDisconnectedHandlerDelegate(Action callback) { - if (handler == null) throw new ArgumentNullException(nameof(handler)); + if (callback == null) throw new ArgumentNullException(nameof(callback)); - _handler = eventArgs => + _callback = eventArgs => { - handler(eventArgs); + callback(eventArgs); return Task.FromResult(0); }; } - public MqttServerClientDisconnectedHandlerDelegate(Func handler) + public MqttServerClientDisconnectedHandlerDelegate(Func callback) { - _handler = handler ?? throw new ArgumentNullException(nameof(handler)); + _callback = callback ?? throw new ArgumentNullException(nameof(callback)); } public Task HandleClientDisconnectedAsync(MqttServerClientDisconnectedEventArgs eventArgs) { - return _handler(eventArgs); + return _callback(eventArgs); } } } diff --git a/Source/MQTTnet/Server/MqttServerOptions.cs b/Source/MQTTnet/Server/MqttServerOptions.cs index b1c595e3..45de09ca 100644 --- a/Source/MQTTnet/Server/MqttServerOptions.cs +++ b/Source/MQTTnet/Server/MqttServerOptions.cs @@ -33,5 +33,7 @@ namespace MQTTnet.Server public IMqttRetainedMessagesManager RetainedMessagesManager { get; set; } = new MqttRetainedMessagesManager(); public IMqttServerApplicationMessageInterceptor UndeliveredMessageInterceptor { get; set; } + + public IMqttServerClientDisconnectedHandler ClientDisconnectedInterceptor { get; set; } } } diff --git a/Source/MQTTnet/Server/MqttServerOptionsBuilder.cs b/Source/MQTTnet/Server/MqttServerOptionsBuilder.cs index 38c91830..66779c6b 100644 --- a/Source/MQTTnet/Server/MqttServerOptionsBuilder.cs +++ b/Source/MQTTnet/Server/MqttServerOptionsBuilder.cs @@ -163,6 +163,18 @@ namespace MQTTnet.Server return this; } + public MqttServerOptionsBuilder WithDisconnectedInterceptor(IMqttServerClientDisconnectedHandler value) + { + _options.ClientDisconnectedInterceptor = value; + return this; + } + + public MqttServerOptionsBuilder WithDisconnectedInterceptor(Action value) + { + _options.ClientDisconnectedInterceptor = new MqttServerClientDisconnectedHandlerDelegate(value); + return this; + } + public MqttServerOptionsBuilder WithApplicationMessageInterceptor(IMqttServerApplicationMessageInterceptor value) { _options.ApplicationMessageInterceptor = value;