/// <inheritdoc cref="IMqttClient.UnsubscribeAsync" /> public Task <MqttClientUnsubscribeResult> UnsubscribeAsync( MqttClientUnsubscribeOptions options, CancellationToken cancellationToken) { Check.NotNull(options, nameof(options)); _broker.Unsubscribe(ClientId, options.TopicFilters); var result = new MqttClientUnsubscribeResult(); options.TopicFilters.ForEach(filter => result.Items.Add(MapUnsubscribeResultItem(filter))); return(Task.FromResult(result)); }
public MqttUnsubscribePacket CreateUnsubscribePacket(MqttClientUnsubscribeOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } var unsubscribePacket = new MqttUnsubscribePacket(); unsubscribePacket.TopicFilters.AddRange(options.TopicFilters); return(unsubscribePacket); }
public async Task UnsubscribeAsync(string topic) { if (!IsSubscribed(topic)) { return; } var options = new MqttClientUnsubscribeOptions(); options.TopicFilters = new List <string> { topic }; await client.UnsubscribeAsync(options); mqttState.RemoveSubscription(s => s.Topic == topic); }
public MqttUnsubscribePacket CreateUnsubscribePacket(MqttClientUnsubscribeOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } var packet = new MqttUnsubscribePacket { Properties = new MqttUnsubscribePacketProperties() }; packet.TopicFilters.AddRange(options.TopicFilters); packet.Properties.UserProperties = options.UserProperties; return(packet); }
public static Task <MqttClientUnsubscribeResult> UnsubscribeAsync(this IMqttClient client, params string[] topicFilters) { if (client == null) { throw new ArgumentNullException(nameof(client)); } if (topicFilters == null) { throw new ArgumentNullException(nameof(topicFilters)); } var options = new MqttClientUnsubscribeOptions(); options.TopicFilters.AddRange(topicFilters); return(client.UnsubscribeAsync(options)); }
public async Task <MqttClientUnsubscribeResult> UnsubscribeAsync(MqttClientUnsubscribeOptions options, CancellationToken cancellationToken) { if (options == null) { throw new ArgumentNullException(nameof(options)); } ThrowIfDisposed(); ThrowIfNotConnected(); var unsubscribePacket = _adapter.PacketFormatterAdapter.DataConverter.CreateUnsubscribePacket(options); unsubscribePacket.PacketIdentifier = _packetIdentifierProvider.GetNextPacketIdentifier(); var unsubAckPacket = await SendAndReceiveAsync <MqttUnsubAckPacket>(unsubscribePacket, cancellationToken).ConfigureAwait(false); return(_adapter.PacketFormatterAdapter.DataConverter.CreateClientUnsubscribeResult(unsubscribePacket, unsubAckPacket)); }
public MqttUnsubscribePacket CreateUnsubscribePacket(MqttClientUnsubscribeOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (options.UserProperties?.Any() == true) { throw new MqttProtocolViolationException("User properties are not supported in MQTT version 3."); } var unsubscribePacket = new MqttUnsubscribePacket(); unsubscribePacket.TopicFilters.AddRange(options.TopicFilters); return(unsubscribePacket); }
public MqttUnsubscribePacket Create(MqttClientUnsubscribeOptions clientUnsubscribeOptions) { if (clientUnsubscribeOptions == null) { throw new ArgumentNullException(nameof(clientUnsubscribeOptions)); } var packet = new MqttUnsubscribePacket { UserProperties = clientUnsubscribeOptions.UserProperties }; if (clientUnsubscribeOptions.TopicFilters != null) { packet.TopicFilters.AddRange(clientUnsubscribeOptions.TopicFilters); } return(packet); }
public static Task <MqttClientUnsubscribeResult> UnsubscribeAsync(this IMqttClient client, MqttClientUnsubscribeOptions options) { if (client == null) { throw new ArgumentNullException(nameof(client)); } return(client.UnsubscribeAsync(options, CancellationToken.None)); }
protected virtual void Dispose(bool disposing) { if (_disposed) { return; } _disposed = true; EventId eventId = GetNextEventId(); CancellationTokenSource?cancellationTokenSource = null; try { try { MqttClientUnsubscribeOptions mqttClientUnsubscribeOptions = new MqttClientUnsubscribeOptions { TopicFilters = new List <string> { MqttTopics.ClientJoinRequested, MqttTopics.ClientJoinSucceeded, MqttTopics.ClientJoinFailed, MqttTopics.ClientGoodbye, MqttTopics.FragmentDistributionRequested, MqttTopics.FragmentDistributionObtained, MqttTopics.FragmentDistributionFailed } }; _logger.LogInformation(eventId, "Unsubscribing from all events from remote Mqtt-Broker."); cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5)); var result = _mqttClient.UnsubscribeAsync(mqttClientUnsubscribeOptions, cancellationTokenSource.Token).GetAwaiter().GetResult(); foreach (MqttClientUnsubscribeResultItem item in result.Items) { if (item.ReasonCode != MqttClientUnsubscribeResultCode.Success) { throw new Exception($"Expected UnsubscribeResultCode Success for topic \"{item.TopicFilter}\". Actual: {item.ReasonCode}"); } } } catch (OperationCanceledException) { _logger.LogError(eventId, "Unsubscribing from all events from remote Mqtt-Broker timed out."); } catch (Exception exception) { _logger.LogError(eventId, exception, "Unsubscribing from all events from remote Mqtt-Broker failed."); } finally { cancellationTokenSource?.Dispose(); } _logger.LogInformation(eventId, "Disconnecting from remote Mqtt-Broker."); MqttClientDisconnectOptions disconnectOptions = new MqttClientDisconnectOptions() { ReasonCode = MqttClientDisconnectReason.NormalDisconnection, ReasonString = "Client Disposed" }; cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5)); _mqttClient.DisconnectAsync(disconnectOptions, cancellationTokenSource.Token).GetAwaiter().GetResult(); } catch (OperationCanceledException) { _logger.LogError(eventId, "Disconnecting from remote Mqtt-Broker timed out."); } catch (Exception exception) { _logger.LogError(eventId, exception, "Disconnecting from remote Mqtt-Broker failed."); } finally { _mqttClient.Dispose(); cancellationTokenSource?.Dispose(); } }
public async Task UnsubscribeAsync(MqttClientUnsubscribeOptions options, CancellationToken cancellationToken) { await _mqttClient.UnsubscribeAsync(options, cancellationToken); }