Add events aggregator

This commit is contained in:
2025-11-16 16:52:06 +09:00
parent 7991c558cd
commit 6abff9cc7e
7 changed files with 49 additions and 32 deletions

View File

@ -0,0 +1,8 @@
namespace Hcs.WebApp.BackgroundServices
{
public delegate void OperationStarted(int operationId, int campaignId, DateTime startedAt);
public delegate void OperationExecuted(int operationId, int campaignId, string messageGuid);
public delegate void OperationEnded(int operationId, int campaignId, DateTime endedAt, string failureReason);
}

View File

@ -0,0 +1,22 @@
using Hcs.WebApp.Data.Hcs;
namespace Hcs.WebApp.BackgroundServices
{
public class EventsAggregator
{
public event Action<Operation> OnOperationCreated;
public event OperationStarted OnOperationStarted;
public event OperationExecuted OnOperationExecuted;
public event OperationEnded OnOperationEnded;
public EventsAggregator(OperationExecutionState operationExecutionState, ResultGetState resultGetState)
{
operationExecutionState.OnOperationCreated += (a) => OnOperationCreated?.Invoke(a);
operationExecutionState.OnOperationStarted += (a, b, c) => OnOperationStarted?.Invoke(a, b, c);
operationExecutionState.OnOperationExecuted += (a, b, c) => OnOperationExecuted?.Invoke(a, b, c);
operationExecutionState.OnOperationEnded += (a, b, c, d) => OnOperationEnded?.Invoke(a, b, c, d);
resultGetState.OnOperationEnded += (a, b, c, d) => OnOperationEnded?.Invoke(a, b, c, d);
}
}
}

View File

@ -5,10 +5,6 @@ namespace Hcs.WebApp.BackgroundServices
{ {
public class OperationExecutionState public class OperationExecutionState
{ {
public delegate void OperationStarted(int operationId, int campaignId, DateTime startedAt);
public delegate void OperationExecuted(int operationId, int campaignId, string messageGuid);
public delegate void OperationEnded(int operationId, int campaignId, DateTime endedAt, string failureReason);
private readonly ConcurrentQueue<Operation> operationsInQueue = new(); private readonly ConcurrentQueue<Operation> operationsInQueue = new();
private readonly HashSet<Operation> operationsInProcess = []; private readonly HashSet<Operation> operationsInProcess = [];

View File

@ -5,8 +5,6 @@ namespace Hcs.WebApp.BackgroundServices
{ {
public class ResultGetState public class ResultGetState
{ {
public delegate void OperationEnded(int operationId, int campaignId, DateTime endedAt, string failureReason);
private readonly ConcurrentQueue<Operation> operationsInQueue = new(); private readonly ConcurrentQueue<Operation> operationsInQueue = new();
private readonly HashSet<Operation> operationsInProcess = []; private readonly HashSet<Operation> operationsInProcess = [];

View File

@ -11,8 +11,7 @@
@inject AuthenticationStateProvider AuthenticationStateProvider @inject AuthenticationStateProvider AuthenticationStateProvider
@inject HeadquartersService HeadquartersService @inject HeadquartersService HeadquartersService
@inject CampaignManagementState CampaignManagementState @inject CampaignManagementState CampaignManagementState
@inject OperationExecutionState OperationExecutionState @inject EventsAggregator EventsAggregator
@inject ResultGetState ResultGetState
<PageTitle>Кампании</PageTitle> <PageTitle>Кампании</PageTitle>
@ -85,11 +84,9 @@
CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep; CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep;
CampaignManagementState.OnCampaignEnded += OnCampaignEnded; CampaignManagementState.OnCampaignEnded += OnCampaignEnded;
OperationExecutionState.OnOperationStarted += OnOperationStarted; EventsAggregator.OnOperationStarted += OnOperationStarted;
OperationExecutionState.OnOperationExecuted += OnOperationExecuted; EventsAggregator.OnOperationExecuted += OnOperationExecuted;
OperationExecutionState.OnOperationEnded += OnOperationEnded; EventsAggregator.OnOperationEnded += OnOperationEnded;
ResultGetState.OnOperationEnded += OnOperationEnded;
} }
ChangeState(PageState.Idle); ChangeState(PageState.Idle);
@ -263,10 +260,8 @@
CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep; CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep;
CampaignManagementState.OnCampaignEnded -= OnCampaignEnded; CampaignManagementState.OnCampaignEnded -= OnCampaignEnded;
OperationExecutionState.OnOperationStarted -= OnOperationStarted; EventsAggregator.OnOperationStarted -= OnOperationStarted;
OperationExecutionState.OnOperationExecuted -= OnOperationExecuted; EventsAggregator.OnOperationExecuted -= OnOperationExecuted;
OperationExecutionState.OnOperationEnded -= OnOperationEnded; EventsAggregator.OnOperationEnded -= OnOperationEnded;
ResultGetState.OnOperationEnded -= OnOperationEnded;
} }
} }

View File

@ -10,8 +10,7 @@
@inject AuthenticationStateProvider AuthenticationStateProvider @inject AuthenticationStateProvider AuthenticationStateProvider
@inject HeadquartersService HeadquartersService @inject HeadquartersService HeadquartersService
@inject OperationExecutionState OperationExecutionState @inject EventsAggregator EventsAggregator
@inject ResultGetState ResultGetState
<PageTitle>Операции</PageTitle> <PageTitle>Операции</PageTitle>
@ -61,12 +60,10 @@
{ {
operations = await HeadquartersService.GetOperationsAsync(); operations = await HeadquartersService.GetOperationsAsync();
OperationExecutionState.OnOperationCreated += OnOperationCreated; EventsAggregator.OnOperationCreated += OnOperationCreated;
OperationExecutionState.OnOperationStarted += OnOperationStarted; EventsAggregator.OnOperationStarted += OnOperationStarted;
OperationExecutionState.OnOperationExecuted += OnOperationExecuted; EventsAggregator.OnOperationExecuted += OnOperationExecuted;
OperationExecutionState.OnOperationEnded += OnOperationEnded; EventsAggregator.OnOperationEnded += OnOperationEnded;
ResultGetState.OnOperationEnded += OnOperationEnded;
} }
ChangeState(PageState.Idle); ChangeState(PageState.Idle);
@ -137,11 +134,9 @@
public void Dispose() public void Dispose()
{ {
OperationExecutionState.OnOperationCreated -= OnOperationCreated; EventsAggregator.OnOperationCreated -= OnOperationCreated;
OperationExecutionState.OnOperationStarted -= OnOperationStarted; EventsAggregator.OnOperationStarted -= OnOperationStarted;
OperationExecutionState.OnOperationExecuted -= OnOperationExecuted; EventsAggregator.OnOperationExecuted -= OnOperationExecuted;
OperationExecutionState.OnOperationEnded -= OnOperationEnded; EventsAggregator.OnOperationEnded -= OnOperationEnded;
ResultGetState.OnOperationEnded -= OnOperationEnded;
} }
} }

View File

@ -74,10 +74,13 @@ builder.Services.AddScoped<HouseService>();
builder.Services.AddSingleton<CampaignManagementState>(); builder.Services.AddSingleton<CampaignManagementState>();
builder.Services.AddSingleton<OperationExecutionState>(); builder.Services.AddSingleton<OperationExecutionState>();
builder.Services.AddSingleton<ResultGetState>(); builder.Services.AddSingleton<ResultGetState>();
builder.Services.AddSingleton<ManagerFactory>(); builder.Services.AddSingleton<ManagerFactory>();
builder.Services.AddSingleton<ExecutorFactory>(); builder.Services.AddSingleton<ExecutorFactory>();
builder.Services.AddSingleton<ResultGetterFactory>(); builder.Services.AddSingleton<ResultGetterFactory>();
builder.Services.AddSingleton<EventsAggregator>();
builder.Services.AddHostedService<CampaignManagementService>(); builder.Services.AddHostedService<CampaignManagementService>();
builder.Services.AddHostedService<OperationExecutionService>(); builder.Services.AddHostedService<OperationExecutionService>();
builder.Services.AddHostedService<ResultGetService>(); builder.Services.AddHostedService<ResultGetService>();