using Microsoft.Extensions.Logging; namespace Seyounth.Auto.Hs.Runtime.Scanner; public class ScannerService : IScannerService { public ScannerService(ILogger logger) { _logger = logger; //todo:向_scanners里添加HikScanner _scanners.ForEach(x => x.OnScanned += (barcode) => OnScanned?.Invoke(x, barcode)); } public IReadOnlyList Scanners => _scanners; private readonly ILogger _logger; private readonly List _scanners = new List(); public async Task StartAsync() { await Task.WhenAll(_scanners.Select(x => x.ConnectAsync() .ContinueWith(t => { if (t.IsCompletedSuccessfully) _logger.LogInformation($"Scanner {x.Id} connected successfully."); else _logger.LogError($"Scanner {x.Id} failed to connect, error: {t.Exception?.Message}"); }))); } public async Task StopAsync() { await Task.WhenAll(_scanners.Select(x => x.DisconnectAsync() .ContinueWith(t => { if (t.IsCompletedSuccessfully) _logger.LogInformation($"Scanner {x.Id} disconnected."); else _logger.LogError($"Scanner {x.Id} failed to disconnect, error: {t.Exception?.Message}"); }))); } public event Action? OnScanned; }