diff --git a/.github/workflows/ReleaseNotes.md b/.github/workflows/ReleaseNotes.md index ceb54560..1a613421 100644 --- a/.github/workflows/ReleaseNotes.md +++ b/.github/workflows/ReleaseNotes.md @@ -1,4 +1,5 @@ * [Core] Updated nuget packages. +* [ManagedClient] The managed client now sends the entire topic filter including new MQTTv5 properties when subscribing. * [Server] Fixed reporting of _MaximumQoS_ in _ConnAck_ packet (MQTTv5 only) (#1442). * [Server] Fix cross thread issue in session message storage for QoS 1 and 2. * [Server] The event _ClientSubscribedTopicAsync_ is now fired after the subscription is completely processed internally (#1435). \ No newline at end of file diff --git a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs index 50b97768..b71c94a1 100644 --- a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs +++ b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs @@ -51,9 +51,9 @@ namespace MQTTnet.Extensions.ManagedClient /// cref="MaintainConnectionAsync" /> /// . /// - readonly Dictionary _reconnectSubscriptions = new Dictionary(); + readonly Dictionary _reconnectSubscriptions = new Dictionary(); - readonly Dictionary _subscriptions = new Dictionary(); + readonly Dictionary _subscriptions = new Dictionary(); readonly SemaphoreSlim _subscriptionsQueuedSignal = new SemaphoreSlim(0); readonly HashSet _unsubscriptions = new HashSet(); @@ -289,7 +289,7 @@ namespace MQTTnet.Extensions.ManagedClient { foreach (var topicFilter in topicFilters) { - _subscriptions[topicFilter.Topic] = topicFilter.QualityOfServiceLevel; + _subscriptions[topicFilter.Topic] = topicFilter; _unsubscriptions.Remove(topicFilter.Topic); } } @@ -455,18 +455,11 @@ namespace MQTTnet.Extensions.ManagedClient { if (_reconnectSubscriptions.Any()) { - var subscriptions = _reconnectSubscriptions.Select( - i => new MqttTopicFilter - { - Topic = i.Key, - QualityOfServiceLevel = i.Value - }); - var topicFilters = new List(); - foreach (var sub in subscriptions) + foreach (var sub in _reconnectSubscriptions) { - topicFilters.Add(sub); + topicFilters.Add(sub.Value); if (topicFilters.Count == Options.MaxTopicFiltersInSubscribeUnsubscribePackets) { @@ -495,14 +488,7 @@ namespace MQTTnet.Extensions.ManagedClient lock (_subscriptions) { - subscriptions = _subscriptions.Select( - i => new MqttTopicFilter - { - Topic = i.Key, - QualityOfServiceLevel = i.Value - }) - .ToList(); - + subscriptions = _subscriptions.Values.ToList(); _subscriptions.Clear(); unsubscriptions = new HashSet(_unsubscriptions); @@ -523,7 +509,7 @@ namespace MQTTnet.Extensions.ManagedClient foreach (var subscription in subscriptions) { - _reconnectSubscriptions[subscription.Topic] = subscription.QualityOfServiceLevel; + _reconnectSubscriptions[subscription.Topic] = subscription; } var addedTopicFilters = new List();