Update campaign progress UI

This commit is contained in:
2025-11-05 16:00:52 +09:00
parent 20d2de5070
commit 785a1db668
5 changed files with 40 additions and 0 deletions

View File

@ -37,6 +37,8 @@ namespace Hcs.WebApp.BackgroundServices
if (manager != null)
{
managers.Add(manager);
manager.OnCampaignProgressStep += OnCampaignProgressStep;
}
else
{
@ -62,6 +64,8 @@ namespace Hcs.WebApp.BackgroundServices
if (manager.State == IManager.ManagerState.Ended)
{
campaignManagementState.InvokeOnCampaignEnded(manager.Campaign);
manager.OnCampaignProgressStep -= OnCampaignProgressStep;
}
}
@ -97,5 +101,10 @@ namespace Hcs.WebApp.BackgroundServices
campaignManagementState.EnqueueCampaign(campaign);
}
}
private void OnCampaignProgressStep(Campaign campaign)
{
campaignManagementState.InvokeOnCampaignProgressStep(campaign);
}
}
}

View File

@ -8,6 +8,7 @@ namespace Hcs.WebApp.BackgroundServices
private readonly ConcurrentQueue<Campaign> campaigns = new();
public event Action<Campaign> OnCampaignCreated;
public event Action<Campaign> OnCampaignProgressStep;
public event Action<Campaign> OnCampaignEnded;
public void EnqueueCampaign(Campaign campaign)
@ -30,5 +31,14 @@ namespace Hcs.WebApp.BackgroundServices
}
catch { }
}
public void InvokeOnCampaignProgressStep(Campaign campaign)
{
try
{
OnCampaignProgressStep?.Invoke(campaign);
}
catch { }
}
}
}

View File

@ -15,6 +15,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
public ManagerState State { get; }
event Action<Campaign> OnCampaignProgressStep;
Task ProcessAsync();
Task EndWithFailAsync(Exception e);

View File

@ -25,6 +25,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created;
public event Action<Campaign>? OnCampaignProgressStep;
public abstract Task ProcessAsync();
public async Task EndWithFailAsync(Exception e)
@ -45,6 +47,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
campaign.Step = step;
campaign.Progress = (step + 1) / StepCount;
await HeadquartersService.UpdateCampaignStepAndProgressAsync(context, campaign);
OnCampaignProgressStep?.Invoke(campaign);
}
}
}

View File

@ -81,6 +81,7 @@
if (state.User.IsInRole(AppRole.ADMINISTRATOR_TYPE) || state.User.IsInRole(AppRole.OPERATOR_TYPE))
{
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep;
CampaignManagementState.OnCampaignEnded += OnCampaignEnded;
campaigns = await HeadquartersService.GetCampaignsAsync();
@ -109,6 +110,19 @@
Task.Run(RefreshCampaigns);
}
void OnCampaignProgressStep(Campaign campaign)
{
InvokeAsync(() =>
{
var targetCampaign = campaigns.FirstOrDefault(x => x.Id == campaign.Id);
if (targetCampaign != null)
{
targetCampaign.Step = campaign.Step;
targetCampaign.Progress = campaign.Progress;
}
});
}
void OnCampaignEnded(Campaign campaign)
{
Task.Run(RefreshCampaigns);
@ -131,6 +145,7 @@
public void Dispose()
{
CampaignManagementState.OnCampaignCreated -= OnCampaignCreated;
CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep;
CampaignManagementState.OnCampaignEnded -= OnCampaignEnded;
}
}