/// <summary> /// Send message to the AR using the given message parameters. /// </summary> /// <param name="messagingParameters">Messaging parameters.</param> /// <returns>-</returns> /// <exception cref="CouldNotSendHttpMessageException">Will be thrown if the message could not be send.</exception> public MessagingResult Send(MessagingParameters messagingParameters) { var messageRequest = new MessageRequest { SensorAlternateId = messagingParameters.OnboardResponse.SensorAlternateId, CapabilityAlternateId = messagingParameters.OnboardResponse.CapabilityAlternateId, Messages = new List <Api.Dto.Messaging.Inner.Message>() }; foreach (var message in messagingParameters.EncodedMessages.Select(encodedMessage => new Api.Dto.Messaging.Inner.Message { Content = encodedMessage, Timestamp = UtcDataService.NowAsUnixTimestamp() })) { messageRequest.Messages.Add(message); } HttpContent requestBody = new StringContent(JsonConvert.SerializeObject(messageRequest), Encoding.UTF8, "application/json"); var httpResponseMessage = _httpClient .PostAsync(messagingParameters.OnboardResponse.ConnectionCriteria.Measures, requestBody).Result; if (httpResponseMessage.IsSuccessStatusCode) { return(new MessagingResultBuilder().WithApplicationMessageId(messagingParameters.ApplicationMessageId) .Build()); } Log.Error("Sending the message was not successful. HTTP response was " + httpResponseMessage.StatusCode + ". Please check exception for more details."); throw new CouldNotSendHttpMessageException(httpResponseMessage.StatusCode, httpResponseMessage.Content.ReadAsStringAsync().Result); }
/// <summary> /// Send message to the AR using the given message parameters. /// </summary> /// <param name="messagingParameters">Messaging parameters.</param> /// <returns>-</returns> /// <exception cref="CouldNotSendMqttMessageException">Will be thrown if the message could not be send.</exception> public MessagingResult Send(MessagingParameters messagingParameters) { var messageRequest = new MessageRequest { SensorAlternateId = messagingParameters.OnboardResponse.SensorAlternateId, CapabilityAlternateId = messagingParameters.OnboardResponse.CapabilityAlternateId, Messages = new List <Api.Dto.Messaging.Inner.Message>() }; foreach (var message in messagingParameters.EncodedMessages.Select(encodedMessage => new Api.Dto.Messaging.Inner.Message { Content = encodedMessage, Timestamp = UtcDataService.NowAsUnixTimestamp() })) { messageRequest.Messages.Add(message); } var messagePayload = JsonConvert.SerializeObject(messageRequest); var mqttMessage = new MqttApplicationMessageBuilder() .WithTopic(messagingParameters.OnboardResponse.ConnectionCriteria.Measures) .WithPayload(messagePayload) .WithExactlyOnceQoS() .WithRetainFlag() .Build(); _mqttClient.PublishAsync(mqttMessage, CancellationToken.None); return(new MessagingResultBuilder().WithApplicationMessageId(messagingParameters.ApplicationMessageId) .Build()); }