diff --git a/Source/MQTTnet/Server/Internal/MqttClientSubscriptionsManager.cs b/Source/MQTTnet/Server/Internal/MqttClientSubscriptionsManager.cs index b409d959..70a5df88 100644 --- a/Source/MQTTnet/Server/Internal/MqttClientSubscriptionsManager.cs +++ b/Source/MQTTnet/Server/Internal/MqttClientSubscriptionsManager.cs @@ -403,6 +403,18 @@ namespace MQTTnet.Server CreateSubscriptionResult createSubscriptionResult, SubscribeResult subscribeResult) { + if (createSubscriptionResult.Subscription.RetainHandling == MqttRetainHandling.DoNotSendOnSubscribe) + { + // This is a MQTT V5+ feature. + return; + } + + if (createSubscriptionResult.Subscription.RetainHandling == MqttRetainHandling.SendAtSubscribeIfNewSubscriptionOnly && !createSubscriptionResult.IsNewSubscription) + { + // This is a MQTT V5+ feature. + return; + } + for (var index = retainedMessages.Count - 1; index >= 0; index--) { var retainedMessage = retainedMessages[index]; @@ -411,18 +423,6 @@ namespace MQTTnet.Server continue; } - if (createSubscriptionResult.Subscription.RetainHandling == MqttRetainHandling.DoNotSendOnSubscribe) - { - // This is a MQTT V5+ feature. - continue; - } - - if (createSubscriptionResult.Subscription.RetainHandling == MqttRetainHandling.SendAtSubscribeIfNewSubscriptionOnly && !createSubscriptionResult.IsNewSubscription) - { - // This is a MQTT V5+ feature. - continue; - } - if (MqttTopicFilterComparer.Compare(retainedMessage.Topic, createSubscriptionResult.Subscription.Topic) != MqttTopicFilterCompareResult.IsMatch) { continue;