using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace NucuCar.Sensors.Telemetry { public class BackgroundWorker : BackgroundService { private readonly string _azureIotHubConnectionString; private readonly bool _serviceEnabled; private readonly int _interval; private readonly ILogger _logger; public BackgroundWorker(ILogger logger, IConfiguration configuration) { _logger = logger; _serviceEnabled = configuration.GetValue("Telemetry:Enabled"); _interval = configuration.GetValue("Telemetry:Interval"); _azureIotHubConnectionString = configuration.GetValue("Telemetry:AzureIotHubConnectionString"); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { if (!_serviceEnabled) { return; } await Task.Delay(_interval, stoppingToken); using var telemetryService = TelemetryPublisher.Instance; telemetryService.Logger = _logger; telemetryService.ConnectionString = _azureIotHubConnectionString; telemetryService.TelemetrySource = "NucuCar.Sensors"; telemetryService.Start(); while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Publishing telemetry data!"); await telemetryService.PublishAsync(stoppingToken); await Task.Delay(_interval, stoppingToken); } } } }