private async Task DisposeMessageAsync(string lockToken, AmqpIotDisposeActions outcome, CancellationToken cancellationToken) { if (Logging.IsEnabled) { Logging.Enter(this, outcome, nameof(DisposeMessageAsync)); } try { // Currently, the same mechanism is used for sending feedback for C2D messages and events received by modules. // However, devices only support C2D messages (they cannot receive events), and modules only support receiving events // (they cannot receive C2D messages). So we use this to distinguish whether to dispose the message (i.e. send outcome on) // the DeviceBoundReceivingLink or the EventsReceivingLink. // If this changes (i.e. modules are able to receive C2D messages, or devices are able to receive telemetry), this logic // will have to be updated. using var ctb = new CancellationTokenBundle(_operationTimeout, cancellationToken); AmqpIotOutcome disposeOutcome = await _amqpUnit.DisposeMessageAsync(lockToken, outcome, ctb.Token).ConfigureAwait(false); disposeOutcome.ThrowIfError(); } finally { if (Logging.IsEnabled) { Logging.Exit(this, outcome, nameof(DisposeMessageAsync)); } } }
public override async Task SendMethodResponseAsync(MethodResponseInternal methodResponse, CancellationToken cancellationToken) { if (Logging.IsEnabled) { Logging.Enter(this, methodResponse, cancellationToken, nameof(SendMethodResponseAsync)); } try { cancellationToken.ThrowIfCancellationRequested(); using var ctb = new CancellationTokenBundle(_operationTimeout, cancellationToken); AmqpIotOutcome amqpIotOutcome = await _amqpUnit .SendMethodResponseAsync(methodResponse, ctb.Token) .ConfigureAwait(false); if (amqpIotOutcome != null) { amqpIotOutcome.ThrowIfNotAccepted(); } } finally { if (Logging.IsEnabled) { Logging.Exit(this, methodResponse, cancellationToken, nameof(SendMethodResponseAsync)); } } }
public override async Task SendEventAsync(Message message, CancellationToken cancellationToken) { Logging.Enter(this, message, cancellationToken, nameof(SendEventAsync)); try { cancellationToken.ThrowIfCancellationRequested(); AmqpIotOutcome amqpIotOutcome = await _amqpUnit.SendEventAsync(message, _operationTimeout).ConfigureAwait(false); amqpIotOutcome?.ThrowIfNotAccepted(); } finally { Logging.Exit(this, message, cancellationToken, nameof(SendEventAsync)); } }
public override async Task SendEventAsync(Message message, CancellationToken cancellationToken) { if (Logging.IsEnabled) { Logging.Enter(this, message, cancellationToken, nameof(SendEventAsync)); } try { cancellationToken.ThrowIfCancellationRequested(); using var ctb = new CancellationTokenBundle(_operationTimeout, cancellationToken); AmqpIotOutcome amqpIotOutcome = await _amqpUnit.SendEventAsync(message, ctb.Token).ConfigureAwait(false); amqpIotOutcome?.ThrowIfNotAccepted(); } finally { if (Logging.IsEnabled) { Logging.Exit(this, message, cancellationToken, nameof(SendEventAsync)); } } }