using System.Threading; using System.Threading.Tasks; using EasyNetQ; using MalwareMultiScan.Api.Services.Interfaces; using MalwareMultiScan.Backends.Messages; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace MalwareMultiScan.Api.Services.Implementations { /// public class ReceiverHostedService : IReceiverHostedService { private readonly IBus _bus; private readonly IConfiguration _configuration; private readonly ILogger _logger; private readonly IScanResultService _scanResultService; /// /// Initialize receiver hosted service. /// /// EasyNetQ bus. /// Configuration. /// Scan result service. /// Logger. public ReceiverHostedService(IBus bus, IConfiguration configuration, IScanResultService 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, message.Duration, 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; } } }