Change events args

This commit is contained in:
2025-11-05 18:49:58 +09:00
parent e58221c430
commit 1d58bf8439
10 changed files with 99 additions and 66 deletions

View File

@ -15,42 +15,36 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
protected readonly ResultWaitState resultWaitState = resultWaitState;
protected readonly Campaign campaign = campaign;
private IManager.ManagerState state;
private HeadquartersService? headquartersService;
public Campaign Campaign => campaign;
public IManager.ManagerState State
{
get => state;
set
{
if (state != value)
{
state = value;
if (state == IManager.ManagerState.Started)
{
OnCampaignStarted?.Invoke(campaign);
}
}
}
}
public IManager.ManagerState State { get; protected set; }
protected HeadquartersService HeadquartersService => headquartersService ??= scope.ServiceProvider.GetRequiredService<HeadquartersService>();
protected abstract int StepCount { get; }
public event Action<Campaign> OnCampaignStarted;
public event Action<Campaign>? OnCampaignProgressStep;
public event IManager.CampaignStarted OnCampaignStarted;
public event IManager.CampaignProgressStep OnCampaignProgressStep;
public event IManager.CampaignEnded OnCampaignEnded;
public abstract Task ProcessAsync();
public async Task EndWithFailAsync(Exception e)
{
await HeadquartersService.SetCampaignEndedWithFailAsync(campaign.Id, e.CombineMessages());
var endedAt = DateTime.UtcNow;
var failureReason = e.CombineMessages();
await HeadquartersService.SetCampaignEndedWithFailAsync(campaign.Id, endedAt, failureReason);
State = IManager.ManagerState.Ended;
InvokeOnCampaignEnded(endedAt, failureReason);
}
protected void InvokeOnCampaignStarted(DateTime startedAt)
{
OnCampaignStarted?.Invoke(campaign.Id, startedAt);
}
protected async Task ProgressStepAsync(int step)
@ -59,13 +53,18 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
await ProgressStepAsync(context, step);
}
protected void InvokeOnCampaignEnded(DateTime endedAt, string failureReason)
{
OnCampaignEnded?.Invoke(campaign.Id, campaign.Type, endedAt, failureReason);
}
protected async Task ProgressStepAsync(HcsDbContext context, int step)
{
campaign.Step = step;
campaign.Progress = Convert.ToInt32(((step + 1) / (float)StepCount * 100));
await HeadquartersService.UpdateCampaignStepAndProgressAsync(context, campaign);
OnCampaignProgressStep?.Invoke(campaign);
OnCampaignProgressStep?.Invoke(campaign.Id, campaign.Step, campaign.Progress);
}
}
}