Пример #1
0
        public async Task FlushMessagesAsync()
        {
            var publishes = new ConcurrentBag <Task>();

            this.m_gauge.Set(0D);
            var measurements = this.m_measurements.DequeueRange(int.MaxValue).ToList();
            var messages     = this.m_messages.DequeueRange(int.MaxValue).ToList();

            if (measurements.Count > 0)
            {
                var protoMeasurements = MeasurementProtobufConverter.Convert(measurements);
                await using var measurementStream = new MemoryStream();
                protoMeasurements.WriteTo(measurementStream);
                var data = measurementStream.ToArray().Compress();
                publishes.Add(this.m_client.PublishOnAsync(this.m_measurementStorageQueue, data, false));
            }


            if (messages.Count > 0)
            {
                var protoMessages = MessageProtobufConverter.Convert(messages);
                await using var messageStream = new MemoryStream();
                protoMessages.WriteTo(messageStream);
                var messageData = messageStream.ToArray().Compress();
                publishes.Add(this.m_client.PublishOnAsync(this.m_messageStorageQueue, messageData, false));
            }


            await Task.WhenAll(publishes).ConfigureAwait(false);
        }
        public void EnqueueMessageToTarget(IPlatformMessage message, RoutingTarget target)
        {
            this.m_liveDataLock.Lock();

            try {
                this.m_textMessageQueues[target.Target].Messages.Add(MessageProtobufConverter.Convert(message as Message));
                this.m_gaugeLiveDataService.Inc();
            } finally {
                this.m_liveDataLock.Unlock();
            }
        }
        public void EnqueueMessageToTriggerService(IPlatformMessage message)
        {
            this.m_measurementLock.Lock();

            try {
                this.m_triggerMessages.Messages.Add(MessageProtobufConverter.Convert(message as Message));
                this.m_gaugeTriggerSerivce.Inc();
            } finally {
                this.m_measurementLock.Unlock();
            }
        }
Пример #4
0
        public override Task <RoutingResponse> EnqueueBulkMessages(TextMessageData request, ServerCallContext context)
        {
            RoutingResponse response;

            using (this.m_duration.NewTimer()) {
                this.m_logger.LogDebug("Bulk ingress request with {count} messages.", request.Messages.Count);

                try {
                    var dto = new List <Message>();

                    foreach (var raw in request.Messages)
                    {
                        var message = MessageProtobufConverter.Convert(raw);

                        if (MessageValidator.Validate(message))
                        {
                            dto.Add(message);
                        }
                    }

                    this.m_queue.AddRange(dto);
                    this.m_messageRequests.Inc();

                    response = new RoutingResponse {
                        Count      = dto.Count,
                        Message    = "Messages queued.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                } catch (FormatException ex) {
                    this.m_logger.LogWarning("Received messages from an invalid sensor. Exception: {exception}", ex);

                    response = new RoutingResponse {
                        Count      = 0,
                        Message    = "Messages not queued. Invalid sensor ID.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                }
            }

            return(Task.FromResult(response));
        }
Пример #5
0
        public override Task <RoutingResponse> EnqueueMessage(TextMessage request, ServerCallContext context)
        {
            RoutingResponse response;

            using (this.m_duration.NewTimer()) {
                this.m_logger.LogDebug("Received message routing request from sensor {sensorId}.", request.SensorID);

                try {
                    var count = 0;
                    var dto   = MessageProtobufConverter.Convert(request);

                    if (MessageValidator.Validate(dto))
                    {
                        this.m_queue.Add(dto);
                        this.m_messageRequests.Inc();
                        count += 1;
                    }

                    response = new RoutingResponse {
                        Count      = count,
                        Message    = "Message queued.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                } catch (FormatException) {
                    this.m_logger.LogWarning("Received messages from an invalid sensor (ID): {sensorID}",
                                             request.SensorID);

                    response = new RoutingResponse {
                        Count      = 0,
                        Message    = "Messages not queued. Invalid sensor ID.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                }
            }

            return(Task.FromResult(response));
        }