using Hcs.WebApp.Data.Hcs; using System.Collections.Concurrent; namespace Hcs.WebApp.BackgroundServices { public class CampaignManagementState { private readonly ConcurrentQueue campaigns = new(); public event Action OnCampaignCreated; public event Action OnCampaignStarted; public event Action OnCampaignProgressStep; public event Action OnCampaignEnded; public void EnqueueCampaign(Campaign campaign) { campaigns.Enqueue(campaign); OnCampaignCreated?.Invoke(campaign); } public bool TryDequeueCampaign(out Campaign campaign) { return campaigns.TryDequeue(out campaign); } public void InvokeOnCampaignStarted(Campaign campaign) { try { OnCampaignStarted?.Invoke(campaign); } catch { } } public void InvokeOnCampaignProgressStep(Campaign campaign) { try { OnCampaignProgressStep?.Invoke(campaign); } catch { } } public void InvokeOnCampaignEnded(Campaign campaign) { try { OnCampaignEnded?.Invoke(campaign); } catch { } } } }