예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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());
        }