internal async Task <AmqpIoTOutcome> SendMessageAsync(Message message, TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, message, $"{nameof(SendMessageAsync)}"); } AmqpMessage amqpMessage = AmqpIoTMessageConverter.MessageToAmqpMessage(message); Outcome outcome = await SendAmqpMessageAsync(amqpMessage, timeout).ConfigureAwait(false); if (Logging.IsEnabled) { Logging.Exit(this, message, $"{nameof(SendMessageAsync)}"); } return(new AmqpIoTOutcome(outcome)); }
internal async Task <Message> ReceiveAmqpMessageAsync(TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, $"{nameof(ReceiveAmqpMessageAsync)}"); } try { AmqpMessage amqpMessage = await _receivingAmqpLink.ReceiveMessageAsync(timeout).ConfigureAwait(false); Message message = null; if (amqpMessage != null) { message = AmqpIoTMessageConverter.AmqpMessageToMessage(amqpMessage); message.LockToken = new Guid(amqpMessage.DeliveryTag.Array).ToString(); } return(message); } catch (Exception e) when(!e.IsFatal()) { Exception ex = AmqpIoTExceptionAdapter.ConvertToIoTHubException(e, _receivingAmqpLink); if (ReferenceEquals(e, ex)) { throw; } else { if (ex is AmqpIoTResourceException) { _receivingAmqpLink.SafeClose(); throw new IotHubCommunicationException(ex.Message, ex); } throw ex; } } finally { if (Logging.IsEnabled) { Logging.Exit(this, $"{nameof(ReceiveAmqpMessageAsync)}"); } } }
internal async Task <AmqpIoTOutcome> SendMessagesAsync(IEnumerable <Message> messages, TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, $"{nameof(SendMessagesAsync)}"); } // List to hold messages in Amqp friendly format var messageList = new List <Data>(); foreach (Message message in messages) { using (AmqpMessage amqpMessage = AmqpIoTMessageConverter.MessageToAmqpMessage(message)) { var data = new Data() { Value = AmqpIoTMessageConverter.ReadStream(amqpMessage.ToStream()) }; messageList.Add(data); } } Outcome outcome; using (AmqpMessage amqpMessage = AmqpMessage.Create(messageList)) { amqpMessage.MessageFormat = AmqpConstants.AmqpBatchedMessageFormat; outcome = await SendAmqpMessageAsync(amqpMessage, timeout).ConfigureAwait(false); } AmqpIoTOutcome amqpIoTOutcome = new AmqpIoTOutcome(outcome); if (amqpIoTOutcome != null) { amqpIoTOutcome.ThrowIfNotAccepted(); } if (Logging.IsEnabled) { Logging.Exit(this, $"{nameof(SendMessagesAsync)}"); } return(amqpIoTOutcome); }
private void OnDeviceMessageReceived(AmqpMessage amqpMessage) { Logging.Enter(this, amqpMessage, $"{nameof(OnDeviceMessageReceived)}"); try { Message message = null; if (amqpMessage != null) { message = AmqpIoTMessageConverter.AmqpMessageToMessage(amqpMessage); message.LockToken = new Guid(amqpMessage.DeliveryTag.Array).ToString(); } _onDeviceMessageReceived?.Invoke(message); } finally { Logging.Exit(this, amqpMessage, $"{nameof(OnDeviceMessageReceived)}"); } }
internal async Task <AmqpIoTOutcome> SendMessageAsync(Message message, TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, message, $"{nameof(SendMessageAsync)}"); } // After this message is sent, we will return the outcome that has no references to the message // So it can safely be disposed. using AmqpMessage amqpMessage = AmqpIoTMessageConverter.MessageToAmqpMessage(message); Outcome outcome = await SendAmqpMessageAsync(amqpMessage, timeout).ConfigureAwait(false); if (Logging.IsEnabled) { Logging.Exit(this, message, $"{nameof(SendMessageAsync)}"); } return(new AmqpIoTOutcome(outcome)); }
internal async Task <AmqpIoTOutcome> SendMethodResponseAsync(MethodResponseInternal methodResponse, TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, methodResponse, $"{nameof(SendMethodResponseAsync)}"); } using AmqpMessage amqpMessage = AmqpIoTMessageConverter.ConvertMethodResponseInternalToAmqpMessage(methodResponse); AmqpIoTMessageConverter.PopulateAmqpMessageFromMethodResponse(amqpMessage, methodResponse); Outcome outcome = await SendAmqpMessageAsync(amqpMessage, timeout).ConfigureAwait(false); if (Logging.IsEnabled) { Logging.Exit(this, $"{nameof(SendMethodResponseAsync)}"); } return(new AmqpIoTOutcome(outcome)); }
private void OnMethodReceived(AmqpMessage amqpMessage) { if (Logging.IsEnabled) { Logging.Enter(this, amqpMessage, $"{nameof(OnMethodReceived)}"); } try { MethodRequestInternal methodRequestInternal = AmqpIoTMessageConverter.ConstructMethodRequestFromAmqpMessage(amqpMessage, new CancellationToken(false)); DisposeDelivery(amqpMessage, true, AmqpConstants.AcceptedOutcome); _onMethodReceived?.Invoke(methodRequestInternal); } finally { if (Logging.IsEnabled) { Logging.Exit(this, amqpMessage, $"{nameof(OnMethodReceived)}"); } } }
private void OnEventsReceived(AmqpMessage amqpMessage) { if (Logging.IsEnabled) { Logging.Enter(this, amqpMessage, $"{nameof(OnEventsReceived)}"); } try { Message message = AmqpIoTMessageConverter.AmqpMessageToMessage(amqpMessage); message.LockToken = new Guid(amqpMessage.DeliveryTag.Array).ToString(); _onEventsReceived?.Invoke(message); } finally { if (Logging.IsEnabled) { Logging.Exit(this, amqpMessage, $"{nameof(OnMethodReceived)}"); } } }
internal async Task <Message> ReceiveAmqpMessageAsync(TimeSpan timeout) { if (Logging.IsEnabled) { Logging.Enter(this, $"{nameof(ReceiveAmqpMessageAsync)}"); } var amqpMessage = await _receivingAmqpLink.ReceiveMessageAsync(timeout).ConfigureAwait(false); Message message = null; if (amqpMessage != null) { message = AmqpIoTMessageConverter.AmqpMessageToMessage(amqpMessage); message.LockToken = new Guid(amqpMessage.DeliveryTag.Array).ToString(); } if (Logging.IsEnabled) { Logging.Exit(this, $"{nameof(ReceiveAmqpMessageAsync)}"); } return(message); }