using System.Threading; using System.Threading.Tasks; using EasyNetQ; using MalwareMultiScan.Backends.Messages; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace MalwareMultiScan.Api.Services { /// /// Receiver hosted service. /// public class ReceiverHostedService : IHostedService { private readonly IBus _bus; private readonly IConfiguration _configuration; private readonly ILogger _logger; private readonly ScanResultService _scanResultService; /// /// Create receiver hosted service. /// /// Service bus. /// Configuration. /// Scan result service. /// Logger. public ReceiverHostedService(IBus bus, IConfiguration configuration, ScanResultService scanResultService, ILogger logger) { _bus = bus; _configuration = configuration; _scanResultService = scanResultService; _logger = logger; } /// public Task StartAsync(CancellationToken cancellationToken) { _bus.Receive(_configuration.GetValue("ResultsSubscriptionId"), async message => { message.Threats ??= new string[] { }; _logger.LogInformation( $"Received a result from {message.Backend} for {message.Id} " + $"with threats {string.Join(",", message.Threats)}"); await _scanResultService.UpdateScanResultForBackend( message.Id, message.Backend, true, message.Succeeded, message.Threats); }); _logger.LogInformation( "Started hosted service for receiving scan results"); return Task.CompletedTask; } /// public Task StopAsync(CancellationToken cancellationToken) { _bus.Dispose(); _logger.LogInformation( "Stopped hosted service for receiving scan results"); return Task.CompletedTask; } } }