diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagementService.cs b/Hcs.WebApp/BackgroundServices/CampaignManagementService.cs index 15832a9..439586d 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagementService.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagementService.cs @@ -38,6 +38,7 @@ namespace Hcs.WebApp.BackgroundServices { managers.Add(manager); + manager.OnCampaignStarted += OnCampaignStarted; manager.OnCampaignProgressStep += OnCampaignProgressStep; } else @@ -65,6 +66,7 @@ namespace Hcs.WebApp.BackgroundServices { campaignManagementState.InvokeOnCampaignEnded(manager.Campaign); + manager.OnCampaignStarted -= OnCampaignStarted; manager.OnCampaignProgressStep -= OnCampaignProgressStep; } } @@ -102,6 +104,11 @@ namespace Hcs.WebApp.BackgroundServices } } + private void OnCampaignStarted(Campaign campaign) + { + campaignManagementState.InvokeOnCampaignStarted(campaign); + } + private void OnCampaignProgressStep(Campaign campaign) { campaignManagementState.InvokeOnCampaignProgressStep(campaign); diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagementState.cs b/Hcs.WebApp/BackgroundServices/CampaignManagementState.cs index f18f079..6792052 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagementState.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagementState.cs @@ -8,6 +8,7 @@ namespace Hcs.WebApp.BackgroundServices private readonly ConcurrentQueue campaigns = new(); public event Action OnCampaignCreated; + public event Action OnCampaignStarted; public event Action OnCampaignProgressStep; public event Action OnCampaignEnded; @@ -23,11 +24,11 @@ namespace Hcs.WebApp.BackgroundServices return campaigns.TryDequeue(out campaign); } - public void InvokeOnCampaignEnded(Campaign campaign) + public void InvokeOnCampaignStarted(Campaign campaign) { try { - OnCampaignEnded?.Invoke(campaign); + OnCampaignStarted?.Invoke(campaign); } catch { } } @@ -40,5 +41,14 @@ namespace Hcs.WebApp.BackgroundServices } catch { } } + + public void InvokeOnCampaignEnded(Campaign campaign) + { + try + { + OnCampaignEnded?.Invoke(campaign); + } + catch { } + } } } diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagers/IManager.cs b/Hcs.WebApp/BackgroundServices/CampaignManagers/IManager.cs index 8d9ebe0..79d1a64 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagers/IManager.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagers/IManager.cs @@ -15,6 +15,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers public ManagerState State { get; } + event Action OnCampaignStarted; event Action OnCampaignProgressStep; Task ProcessAsync(); diff --git a/Hcs.WebApp/Components/Pages/Campaigns.razor b/Hcs.WebApp/Components/Pages/Campaigns.razor index 4bc521a..33903aa 100644 --- a/Hcs.WebApp/Components/Pages/Campaigns.razor +++ b/Hcs.WebApp/Components/Pages/Campaigns.razor @@ -81,6 +81,7 @@ if (state.User.IsInRole(AppRole.ADMINISTRATOR_TYPE) || state.User.IsInRole(AppRole.OPERATOR_TYPE)) { CampaignManagementState.OnCampaignCreated += OnCampaignCreated; + CampaignManagementState.OnCampaignStarted += OnCampaignStarted; CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep; CampaignManagementState.OnCampaignEnded += OnCampaignEnded; @@ -113,6 +114,18 @@ Task.Run(RefreshCampaigns); } + void OnCampaignStarted(Campaign campaign) + { + InvokeAsync(() => + { + var targetCampaign = campaigns.FirstOrDefault(x => x.Id == campaign.Id); + if (targetCampaign != null) + { + targetCampaign.StartedAt = campaign.StartedAt; + } + }); + } + void OnCampaignProgressStep(Campaign campaign) { InvokeAsync(() => @@ -148,6 +161,7 @@ public void Dispose() { CampaignManagementState.OnCampaignCreated -= OnCampaignCreated; + CampaignManagementState.OnCampaignStarted -= OnCampaignStarted; CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep; CampaignManagementState.OnCampaignEnded -= OnCampaignEnded; }