using System.Collections.Concurrent; using System.ComponentModel; using IBKRTrader.Core.Logging; namespace IBKRTrader.Core.Workers; /// /// Leichtgewichtige Registry über alle Worker/Services. Start/Stop übernimmt der Generic Host /// (jeder Worker ist ein ). Diese Klasse /// stellt die live-bindbare Liste für die Workers-Ansicht bereit und erlaubt den manuellen Trigger. /// public class WorkerEngine { private readonly ConcurrentDictionary _registry = new(); /// /// Live-bindbare Liste für die Workers-Ansicht. Die Liste selbst ändert sich zur Laufzeit /// nicht – die Worker werden hier einmal registriert; was sich ändert, meldet /// über INotifyPropertyChanged. /// public BindingList WorkerInfos { get; } = []; public WorkerEngine(IEnumerable workers, LoggingService logger) { foreach (var worker in workers) { _registry[worker.Name] = worker; WorkerInfos.Add(worker.Info); } logger.Info("Core", $"WorkerEngine: {_registry.Count} Worker/Services registriert."); } /// Löst einen sofortigen manuellen Run des benannten Workers aus. public async Task TriggerWorkerAsync(string name) { if (_registry.TryGetValue(name, out var worker)) await worker.TriggerAsync(); } }