using Microsoft.Extensions.Logging; namespace Seyounth.Auto.Hs.Runtime.Printer; public class PrinterService : IPrinterService { public IReadOnlyList Printers => _printers; private readonly ILogger _logger; private readonly List _printers = new List(); public PrinterService(IEnumerable printers,ILogger logger) { _logger = logger; _printers.AddRange(printers); //todo: load printers from configuration or new } public async Task StartAsync() { await Task.WhenAll(Printers.Select(e => e.ConnectAsync())); } public async Task StopAsync() { await Task.WhenAll(Printers.Select(x => x.DisconnectAsync() .ContinueWith(t => { if (t.IsCompletedSuccessfully) _logger.LogInformation($"Printer {x.Id} disconnected"); else _logger.LogError(t.Exception, $"Printer {x.Id} failed to disconnect,error: {t.Exception.Message}"); }))); } public Task PrintAsync(int id, string content) { var printer = Printers.FirstOrDefault(x => x.Id == id); if (printer == null) throw new ArgumentException("Printer not found", nameof(id)); return printer.PrintAsync(content); } }