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();
}
}