コード例 #1
0
ファイル: DataBrokerService.cs プロジェクト: alijoschi/Vahti
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            if (!_config.DataBrokerEnabled)
            {
                return;
            }

            _logger.LogInformation("Started");
            _logger.LogInformation($"Cloud publishing enabled: {_config.CloudPublishConfiguration.Enabled}");

            var options = new ManagedMqttClientOptionsBuilder()
                          .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                          .WithClientOptions(new MqttClientOptionsBuilder()
                                             .WithClientId(GetType().Name)
                                             .WithTcpServer(_config.MqttServerAddress)
                                             .Build())
                          .Build();

            await _mqttClient.SubscribeAsync("sensordevicetype/#");

            await _mqttClient.SubscribeAsync("sensordevice/#");

            await _mqttClient.SubscribeAsync("measurement/#");

            _mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(MqttMessageReceived);

            await _mqttClient.StartAsync(options);

            var minuteCounter            = 0;
            int consecutiveReadFailCount = 0;

            while (!stoppingToken.IsCancellationRequested)
            {
                try
                {
                    if (_config.CloudPublishConfiguration.Enabled)
                    {
                        if (minuteCounter % _config.CloudPublishConfiguration.UpdateIntervalMinutes == 0)
                        {
                            await _dataBroker.PublishCurrentData();
                        }

                        if (minuteCounter % _config.CloudPublishConfiguration.HistoryUpdateIntervalMinutes == 0)
                        {
                            await _dataBroker.PublishHistoryData();
                        }

                        if (minuteCounter % HistoryDatabaseCleanupIntervalMinutes == 0)
                        {
                            await _dataBroker.DeleteOldHistoryData();
                        }
                    }

                    await _dataBroker.SendAlerts();

                    consecutiveReadFailCount = 0;
                    await Task.Delay(TimeSpan.FromSeconds(LoopInterval), stoppingToken);

                    minuteCounter++;
                }
                catch (TaskCanceledException)
                {
                    _logger.LogInformation("Stopped");
                    break;
                }
                catch (Exception ex)
                {
                    _logger.LogError($"{DateTime.Now}: Error occured in Vahti.DataBroker: {ex.Message}, {ex.StackTrace}");
                    consecutiveReadFailCount++;

                    // Break from loop if the problem persists
                    if (consecutiveReadFailCount >= MaxRepeatedFailCount)
                    {
                        break;
                    }
                    continue;
                }
            }
        }