Notify clients when campaign ends
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
using Hcs.WebApp.BackgroundServices.CampaignManagers;
|
using Hcs.WebApp.BackgroundServices.CampaignManagers;
|
||||||
|
using Hcs.WebApp.Data.Hcs;
|
||||||
using Hcs.WebApp.Services;
|
using Hcs.WebApp.Services;
|
||||||
|
|
||||||
namespace Hcs.WebApp.BackgroundServices
|
namespace Hcs.WebApp.BackgroundServices
|
||||||
@ -42,6 +43,8 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
using var scope = scopeFactory.CreateScope();
|
using var scope = scopeFactory.CreateScope();
|
||||||
var headquartersService = scope.ServiceProvider.GetRequiredService<HeadquartersService>();
|
var headquartersService = scope.ServiceProvider.GetRequiredService<HeadquartersService>();
|
||||||
await headquartersService.SetCampaignEndedWithFailAsync(campaign.Id, "Не удалось найти подходящий менеджер кампании");
|
await headquartersService.SetCampaignEndedWithFailAsync(campaign.Id, "Не удалось найти подходящий менеджер кампании");
|
||||||
|
|
||||||
|
campaignManagementState.InvokeOnCampaignEnded(campaign);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,6 +58,11 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
{
|
{
|
||||||
await manager.EndWithFailAsync(e);
|
await manager.EndWithFailAsync(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (manager.State == IManager.ManagerState.Ended)
|
||||||
|
{
|
||||||
|
campaignManagementState.InvokeOnCampaignEnded(manager.Campaign);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
managers.RemoveAll(x => x.State == IManager.ManagerState.Ended);
|
managers.RemoveAll(x => x.State == IManager.ManagerState.Ended);
|
||||||
|
|||||||
@ -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> OnCampaignEnded;
|
||||||
|
|
||||||
public void EnqueueCampaign(Campaign campaign)
|
public void EnqueueCampaign(Campaign campaign)
|
||||||
{
|
{
|
||||||
@ -20,5 +21,14 @@ namespace Hcs.WebApp.BackgroundServices
|
|||||||
{
|
{
|
||||||
return campaigns.TryDequeue(out campaign);
|
return campaigns.TryDequeue(out campaign);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InvokeOnCampaignEnded(Campaign campaign)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OnCampaignEnded?.Invoke(campaign);
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
using Hcs.WebApp.Data.Hcs;
|
||||||
|
|
||||||
|
namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
||||||
{
|
{
|
||||||
public interface IManager
|
public interface IManager
|
||||||
{
|
{
|
||||||
@ -9,6 +11,8 @@
|
|||||||
Ended
|
Ended
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Campaign Campaign { get; }
|
||||||
|
|
||||||
public ManagerState State { get; }
|
public ManagerState State { get; }
|
||||||
|
|
||||||
Task ProcessAsync();
|
Task ProcessAsync();
|
||||||
|
|||||||
@ -18,6 +18,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
|||||||
|
|
||||||
protected HeadquartersService HeadquartersService => headquartersService ??= scope.ServiceProvider.GetRequiredService<HeadquartersService>();
|
protected HeadquartersService HeadquartersService => headquartersService ??= scope.ServiceProvider.GetRequiredService<HeadquartersService>();
|
||||||
|
|
||||||
|
public Campaign Campaign => campaign;
|
||||||
|
|
||||||
public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created;
|
public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created;
|
||||||
|
|
||||||
public abstract Task ProcessAsync();
|
public abstract Task ProcessAsync();
|
||||||
|
|||||||
@ -90,6 +90,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
||||||
|
CampaignManagementState.OnCampaignEnded += OnCampaignEnded;
|
||||||
|
|
||||||
registries = await RegistryService.GetAllRegistriesAsync(true);
|
registries = await RegistryService.GetAllRegistriesAsync(true);
|
||||||
}
|
}
|
||||||
@ -168,8 +169,29 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnCampaignEnded(Campaign campaign)
|
||||||
|
{
|
||||||
|
if (campaign.Type == Campaign.CampaignType.ExportCommonRegistryElements_15_7_0_1)
|
||||||
|
{
|
||||||
|
InvokeAsync(() => Task.Run(RefreshRegistries));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task RefreshRegistries()
|
||||||
|
{
|
||||||
|
ChangeState(CommonPageState.Loading);
|
||||||
|
|
||||||
|
registries = await RegistryService.GetAllRegistriesAsync(true);
|
||||||
|
|
||||||
|
if (state != CommonPageState.OperationWaiting)
|
||||||
|
{
|
||||||
|
ChangeState(CommonPageState.Idle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
CampaignManagementState.OnCampaignCreated -= OnCampaignCreated;
|
CampaignManagementState.OnCampaignCreated -= OnCampaignCreated;
|
||||||
|
CampaignManagementState.OnCampaignEnded -= OnCampaignEnded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user