diff --git a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs index 625bd4c6..7450237d 100644 --- a/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs +++ b/Source/MQTTnet.Extensions.ManagedClient/ManagedMqttClient.cs @@ -379,11 +379,11 @@ namespace MQTTnet.Extensions.ManagedClient } } - async Task HandleSubscriptionsResultAsync(List subscribeResults, List unsubscribeResults) + async Task HandleSubscriptionsResultAsync(SendSubscribeUnsubscribeResult subscribeUnsubscribeResult) { if (_subscriptionsChangedEvent.HasHandlers) { - await _subscriptionsChangedEvent.InvokeAsync(new SubscriptionsChangedEventArgs(subscribeResults, unsubscribeResults)).ConfigureAwait(false); + await _subscriptionsChangedEvent.InvokeAsync(new SubscriptionsChangedEventArgs(subscribeUnsubscribeResult.SubscribeResults, subscribeUnsubscribeResult.UnsubscribeResults)).ConfigureAwait(false); } } @@ -488,8 +488,7 @@ namespace MQTTnet.Extensions.ManagedClient if (_reconnectSubscriptions.Any()) { topicFilters = new List(); - List subscribeResults; - List unsubscribeResults; + SendSubscribeUnsubscribeResult subscribeUnsubscribeResult; foreach (var sub in _reconnectSubscriptions) { @@ -497,14 +496,14 @@ namespace MQTTnet.Extensions.ManagedClient if (topicFilters.Count == Options.MaxTopicFiltersInSubscribeUnsubscribePackets) { - (subscribeResults, unsubscribeResults) = await SendSubscribeUnsubscribe(topicFilters, null).ConfigureAwait(false); + subscribeUnsubscribeResult = await SendSubscribeUnsubscribe(topicFilters, null).ConfigureAwait(false); topicFilters.Clear(); - await HandleSubscriptionsResultAsync(subscribeResults, unsubscribeResults).ConfigureAwait(false); + await HandleSubscriptionsResultAsync(subscribeUnsubscribeResult).ConfigureAwait(false); } } - (subscribeResults, unsubscribeResults) = await SendSubscribeUnsubscribe(topicFilters, null).ConfigureAwait(false); - await HandleSubscriptionsResultAsync(subscribeResults, unsubscribeResults).ConfigureAwait(false); + subscribeUnsubscribeResult = await SendSubscribeUnsubscribe(topicFilters, null).ConfigureAwait(false); + await HandleSubscriptionsResultAsync(subscribeUnsubscribeResult).ConfigureAwait(false); } } catch (Exception exception) @@ -520,8 +519,7 @@ namespace MQTTnet.Extensions.ManagedClient while (await _subscriptionsQueuedSignal.WaitAsync(GetRemainingTime(endTime), cancellationToken).ConfigureAwait(false)) { List subscriptions; - List subscribeResults; - List unsubscribeResults; + SendSubscribeUnsubscribeResult subscribeUnsubscribeResult; HashSet unsubscriptions; lock (_subscriptions) @@ -557,14 +555,14 @@ namespace MQTTnet.Extensions.ManagedClient if (addedTopicFilters.Count == Options.MaxTopicFiltersInSubscribeUnsubscribePackets) { - (subscribeResults, unsubscribeResults) = await SendSubscribeUnsubscribe(addedTopicFilters, null).ConfigureAwait(false); + subscribeUnsubscribeResult = await SendSubscribeUnsubscribe(addedTopicFilters, null).ConfigureAwait(false); addedTopicFilters.Clear(); - await HandleSubscriptionsResultAsync(subscribeResults, unsubscribeResults).ConfigureAwait(false); + await HandleSubscriptionsResultAsync(subscribeUnsubscribeResult).ConfigureAwait(false); } } - - (subscribeResults, unsubscribeResults) = await SendSubscribeUnsubscribe(addedTopicFilters, null).ConfigureAwait(false); - await HandleSubscriptionsResultAsync(subscribeResults, unsubscribeResults).ConfigureAwait(false); + + subscribeUnsubscribeResult = await SendSubscribeUnsubscribe(addedTopicFilters, null).ConfigureAwait(false); + await HandleSubscriptionsResultAsync(subscribeUnsubscribeResult).ConfigureAwait(false); var removedTopicFilters = new List(); foreach (var unSub in unsubscriptions) @@ -573,14 +571,14 @@ namespace MQTTnet.Extensions.ManagedClient if (removedTopicFilters.Count == Options.MaxTopicFiltersInSubscribeUnsubscribePackets) { - (subscribeResults, unsubscribeResults) = await SendSubscribeUnsubscribe(null, removedTopicFilters).ConfigureAwait(false); + subscribeUnsubscribeResult = await SendSubscribeUnsubscribe(null, removedTopicFilters).ConfigureAwait(false); removedTopicFilters.Clear(); - await HandleSubscriptionsResultAsync(subscribeResults, unsubscribeResults).ConfigureAwait(false); + await HandleSubscriptionsResultAsync(subscribeUnsubscribeResult).ConfigureAwait(false); } } - (subscribeResults, unsubscribeResults) = await SendSubscribeUnsubscribe(null, removedTopicFilters).ConfigureAwait(false); - await HandleSubscriptionsResultAsync(subscribeResults, unsubscribeResults).ConfigureAwait(false); + subscribeUnsubscribeResult = await SendSubscribeUnsubscribe(null, removedTopicFilters).ConfigureAwait(false); + await HandleSubscriptionsResultAsync(subscribeUnsubscribeResult).ConfigureAwait(false); } } @@ -613,7 +611,7 @@ namespace MQTTnet.Extensions.ManagedClient } } - async Task<(List SubscribeResults, List UnsubscribeResults)> SendSubscribeUnsubscribe(List addedSubscriptions, List removedSubscriptions) + async Task SendSubscribeUnsubscribe(List addedSubscriptions, List removedSubscriptions) { var subscribeResults = new List(); var unsubscribeResults = new List(); @@ -653,7 +651,7 @@ namespace MQTTnet.Extensions.ManagedClient await HandleSubscriptionExceptionAsync(exception, addedSubscriptions, removedSubscriptions).ConfigureAwait(false); } - return (subscribeResults, unsubscribeResults); + return new SendSubscribeUnsubscribeResult(subscribeResults, unsubscribeResults); } void StartPublishing() diff --git a/Source/MQTTnet.Extensions.ManagedClient/SendSubscribeUnsubscribeResult.cs b/Source/MQTTnet.Extensions.ManagedClient/SendSubscribeUnsubscribeResult.cs new file mode 100644 index 00000000..11127f54 --- /dev/null +++ b/Source/MQTTnet.Extensions.ManagedClient/SendSubscribeUnsubscribeResult.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using MQTTnet.Client; + +namespace MQTTnet.Extensions.ManagedClient +{ + public sealed class SendSubscribeUnsubscribeResult + { + public SendSubscribeUnsubscribeResult(List subscribeResults, List unsubscribeResults) + { + SubscribeResults = subscribeResults ?? throw new ArgumentNullException(nameof(subscribeResults)); + UnsubscribeResults = unsubscribeResults ?? throw new ArgumentNullException(nameof(unsubscribeResults)); + } + + public List SubscribeResults { get; private set; } + + public List UnsubscribeResults { get; private set; } + } +} \ No newline at end of file