From 6adf7096ec3a9da627bf5768e87b4c816d8638dc Mon Sep 17 00:00:00 2001 From: SeppPenner Date: Fri, 12 Jun 2020 20:25:51 +0200 Subject: [PATCH] Updated client sessions manager to handle the delivery count for the handler correctly. --- Source/MQTTnet/Server/MqttClientSession.cs | 6 ++++-- Source/MQTTnet/Server/MqttClientSessionsManager.cs | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Source/MQTTnet/Server/MqttClientSession.cs b/Source/MQTTnet/Server/MqttClientSession.cs index c7d2e50d..c6c3e0ef 100644 --- a/Source/MQTTnet/Server/MqttClientSession.cs +++ b/Source/MQTTnet/Server/MqttClientSession.cs @@ -46,17 +46,19 @@ namespace MQTTnet.Server /// public IDictionary Items { get; } - public void EnqueueApplicationMessage(MqttApplicationMessage applicationMessage, string senderClientId, bool isRetainedApplicationMessage) + public bool EnqueueApplicationMessage(MqttApplicationMessage applicationMessage, string senderClientId, bool isRetainedApplicationMessage) { var checkSubscriptionsResult = SubscriptionsManager.CheckSubscriptions(applicationMessage.Topic, applicationMessage.QualityOfServiceLevel); if (!checkSubscriptionsResult.IsSubscribed) { - return; + return true; } _logger.Verbose("Queued application message with topic '{0}' (ClientId: {1}).", applicationMessage.Topic, ClientId); ApplicationMessagesQueue.Enqueue(applicationMessage, senderClientId, checkSubscriptionsResult.QualityOfServiceLevel, isRetainedApplicationMessage); + + return false; } public async Task SubscribeAsync(ICollection topicFilters) diff --git a/Source/MQTTnet/Server/MqttClientSessionsManager.cs b/Source/MQTTnet/Server/MqttClientSessionsManager.cs index d27a366f..8a34f7b1 100644 --- a/Source/MQTTnet/Server/MqttClientSessionsManager.cs +++ b/Source/MQTTnet/Server/MqttClientSessionsManager.cs @@ -228,12 +228,15 @@ namespace MQTTnet.Server foreach (var clientSession in _sessions.Values) { - clientSession.EnqueueApplicationMessage( + var isSubscribed = clientSession.EnqueueApplicationMessage( applicationMessage, sender?.ClientId, false); - deliveryCount++; + if (isSubscribed) + { + deliveryCount++; + } } if (deliveryCount == 0)