Update campaign progress UI
This commit is contained in:
@ -37,6 +37,8 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
if (manager != null)
|
if (manager != null)
|
||||||
{
|
{
|
||||||
managers.Add(manager);
|
managers.Add(manager);
|
||||||
|
|
||||||
|
manager.OnCampaignProgressStep += OnCampaignProgressStep;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -62,6 +64,8 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
if (manager.State == IManager.ManagerState.Ended)
|
if (manager.State == IManager.ManagerState.Ended)
|
||||||
{
|
{
|
||||||
campaignManagementState.InvokeOnCampaignEnded(manager.Campaign);
|
campaignManagementState.InvokeOnCampaignEnded(manager.Campaign);
|
||||||
|
|
||||||
|
manager.OnCampaignProgressStep -= OnCampaignProgressStep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,5 +101,10 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
campaignManagementState.EnqueueCampaign(campaign);
|
campaignManagementState.EnqueueCampaign(campaign);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnCampaignProgressStep(Campaign campaign)
|
||||||
|
{
|
||||||
|
campaignManagementState.InvokeOnCampaignProgressStep(campaign);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
private readonly ConcurrentQueue<Campaign> campaigns = new();
|
private readonly ConcurrentQueue<Campaign> campaigns = new();
|
||||||
|
|
||||||
public event Action<Campaign> OnCampaignCreated;
|
public event Action<Campaign> OnCampaignCreated;
|
||||||
|
public event Action<Campaign> OnCampaignProgressStep;
|
||||||
public event Action<Campaign> OnCampaignEnded;
|
public event Action<Campaign> OnCampaignEnded;
|
||||||
|
|
||||||
public void EnqueueCampaign(Campaign campaign)
|
public void EnqueueCampaign(Campaign campaign)
|
||||||
@ -30,5 +31,14 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InvokeOnCampaignProgressStep(Campaign campaign)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OnCampaignProgressStep?.Invoke(campaign);
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
|||||||
|
|
||||||
public ManagerState State { get; }
|
public ManagerState State { get; }
|
||||||
|
|
||||||
|
event Action<Campaign> OnCampaignProgressStep;
|
||||||
|
|
||||||
Task ProcessAsync();
|
Task ProcessAsync();
|
||||||
|
|
||||||
Task EndWithFailAsync(Exception e);
|
Task EndWithFailAsync(Exception e);
|
||||||
|
|||||||
@ -25,6 +25,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
|||||||
|
|
||||||
public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created;
|
public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created;
|
||||||
|
|
||||||
|
public event Action<Campaign>? OnCampaignProgressStep;
|
||||||
|
|
||||||
public abstract Task ProcessAsync();
|
public abstract Task ProcessAsync();
|
||||||
|
|
||||||
public async Task EndWithFailAsync(Exception e)
|
public async Task EndWithFailAsync(Exception e)
|
||||||
@ -45,6 +47,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
|||||||
campaign.Step = step;
|
campaign.Step = step;
|
||||||
campaign.Progress = (step + 1) / StepCount;
|
campaign.Progress = (step + 1) / StepCount;
|
||||||
await HeadquartersService.UpdateCampaignStepAndProgressAsync(context, campaign);
|
await HeadquartersService.UpdateCampaignStepAndProgressAsync(context, campaign);
|
||||||
|
|
||||||
|
OnCampaignProgressStep?.Invoke(campaign);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -81,6 +81,7 @@
|
|||||||
if (state.User.IsInRole(AppRole.ADMINISTRATOR_TYPE) || state.User.IsInRole(AppRole.OPERATOR_TYPE))
|
if (state.User.IsInRole(AppRole.ADMINISTRATOR_TYPE) || state.User.IsInRole(AppRole.OPERATOR_TYPE))
|
||||||
{
|
{
|
||||||
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
||||||
|
CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep;
|
||||||
CampaignManagementState.OnCampaignEnded += OnCampaignEnded;
|
CampaignManagementState.OnCampaignEnded += OnCampaignEnded;
|
||||||
|
|
||||||
campaigns = await HeadquartersService.GetCampaignsAsync();
|
campaigns = await HeadquartersService.GetCampaignsAsync();
|
||||||
@ -109,6 +110,19 @@
|
|||||||
Task.Run(RefreshCampaigns);
|
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)
|
void OnCampaignEnded(Campaign campaign)
|
||||||
{
|
{
|
||||||
Task.Run(RefreshCampaigns);
|
Task.Run(RefreshCampaigns);
|
||||||
@ -131,6 +145,7 @@
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
CampaignManagementState.OnCampaignCreated -= OnCampaignCreated;
|
CampaignManagementState.OnCampaignCreated -= OnCampaignCreated;
|
||||||
|
CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep;
|
||||||
CampaignManagementState.OnCampaignEnded -= OnCampaignEnded;
|
CampaignManagementState.OnCampaignEnded -= OnCampaignEnded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user