using System; using System.Threading; using System.Threading.Tasks; using LavishVMAPI; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using TinyIpc.DependencyInjection; namespace MRBot.Services { internal sealed class CommandProcessor : BackgroundService { private readonly ITinyIpcFactory _tinyIpcFactory; private readonly ILogger _logger; public CommandProcessor(ITinyIpcFactory tinyIpcFactory, ILogger logger) { _tinyIpcFactory = tinyIpcFactory; _logger = logger; } public override Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("Starting command processor"); return base.StartAsync(cancellationToken); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using var tinyIpcInstance = _tinyIpcFactory.CreateInstance(); try { await foreach (var message in tinyIpcInstance.MessageBus.SubscribeAsync(stoppingToken)) { if(stoppingToken.IsCancellationRequested) return; _logger.LogInformation($"Received message: {message}"); } } catch (Exception e) { Console.WriteLine(e); throw; } } } }