diff --git a/Hcs.WebApp/BackgroundServices/Delegates.cs b/Hcs.WebApp/BackgroundServices/Delegates.cs new file mode 100644 index 0000000..9449448 --- /dev/null +++ b/Hcs.WebApp/BackgroundServices/Delegates.cs @@ -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); +} diff --git a/Hcs.WebApp/BackgroundServices/EventsAggregator.cs b/Hcs.WebApp/BackgroundServices/EventsAggregator.cs new file mode 100644 index 0000000..18d64bf --- /dev/null +++ b/Hcs.WebApp/BackgroundServices/EventsAggregator.cs @@ -0,0 +1,22 @@ +using Hcs.WebApp.Data.Hcs; + +namespace Hcs.WebApp.BackgroundServices +{ + public class EventsAggregator + { + public event Action 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); + } + } +} diff --git a/Hcs.WebApp/BackgroundServices/OperationExecutionState.cs b/Hcs.WebApp/BackgroundServices/OperationExecutionState.cs index 4d9c555..dc122d9 100644 --- a/Hcs.WebApp/BackgroundServices/OperationExecutionState.cs +++ b/Hcs.WebApp/BackgroundServices/OperationExecutionState.cs @@ -5,10 +5,6 @@ namespace Hcs.WebApp.BackgroundServices { 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 operationsInQueue = new(); private readonly HashSet operationsInProcess = []; diff --git a/Hcs.WebApp/BackgroundServices/ResultGetState.cs b/Hcs.WebApp/BackgroundServices/ResultGetState.cs index 998470e..390b07b 100644 --- a/Hcs.WebApp/BackgroundServices/ResultGetState.cs +++ b/Hcs.WebApp/BackgroundServices/ResultGetState.cs @@ -5,8 +5,6 @@ namespace Hcs.WebApp.BackgroundServices { public class ResultGetState { - public delegate void OperationEnded(int operationId, int campaignId, DateTime endedAt, string failureReason); - private readonly ConcurrentQueue operationsInQueue = new(); private readonly HashSet operationsInProcess = []; diff --git a/Hcs.WebApp/Components/Pages/Campaigns.razor b/Hcs.WebApp/Components/Pages/Campaigns.razor index 2b2911e..baf725a 100644 --- a/Hcs.WebApp/Components/Pages/Campaigns.razor +++ b/Hcs.WebApp/Components/Pages/Campaigns.razor @@ -11,8 +11,7 @@ @inject AuthenticationStateProvider AuthenticationStateProvider @inject HeadquartersService HeadquartersService @inject CampaignManagementState CampaignManagementState -@inject OperationExecutionState OperationExecutionState -@inject ResultGetState ResultGetState +@inject EventsAggregator EventsAggregator Кампании @@ -85,11 +84,9 @@ CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep; CampaignManagementState.OnCampaignEnded += OnCampaignEnded; - OperationExecutionState.OnOperationStarted += OnOperationStarted; - OperationExecutionState.OnOperationExecuted += OnOperationExecuted; - OperationExecutionState.OnOperationEnded += OnOperationEnded; - - ResultGetState.OnOperationEnded += OnOperationEnded; + EventsAggregator.OnOperationStarted += OnOperationStarted; + EventsAggregator.OnOperationExecuted += OnOperationExecuted; + EventsAggregator.OnOperationEnded += OnOperationEnded; } ChangeState(PageState.Idle); @@ -263,10 +260,8 @@ CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep; CampaignManagementState.OnCampaignEnded -= OnCampaignEnded; - OperationExecutionState.OnOperationStarted -= OnOperationStarted; - OperationExecutionState.OnOperationExecuted -= OnOperationExecuted; - OperationExecutionState.OnOperationEnded -= OnOperationEnded; - - ResultGetState.OnOperationEnded -= OnOperationEnded; + EventsAggregator.OnOperationStarted -= OnOperationStarted; + EventsAggregator.OnOperationExecuted -= OnOperationExecuted; + EventsAggregator.OnOperationEnded -= OnOperationEnded; } } diff --git a/Hcs.WebApp/Components/Pages/Operations.razor b/Hcs.WebApp/Components/Pages/Operations.razor index 9aa75e4..4903ac1 100644 --- a/Hcs.WebApp/Components/Pages/Operations.razor +++ b/Hcs.WebApp/Components/Pages/Operations.razor @@ -10,8 +10,7 @@ @inject AuthenticationStateProvider AuthenticationStateProvider @inject HeadquartersService HeadquartersService -@inject OperationExecutionState OperationExecutionState -@inject ResultGetState ResultGetState +@inject EventsAggregator EventsAggregator Операции @@ -61,12 +60,10 @@ { operations = await HeadquartersService.GetOperationsAsync(); - OperationExecutionState.OnOperationCreated += OnOperationCreated; - OperationExecutionState.OnOperationStarted += OnOperationStarted; - OperationExecutionState.OnOperationExecuted += OnOperationExecuted; - OperationExecutionState.OnOperationEnded += OnOperationEnded; - - ResultGetState.OnOperationEnded += OnOperationEnded; + EventsAggregator.OnOperationCreated += OnOperationCreated; + EventsAggregator.OnOperationStarted += OnOperationStarted; + EventsAggregator.OnOperationExecuted += OnOperationExecuted; + EventsAggregator.OnOperationEnded += OnOperationEnded; } ChangeState(PageState.Idle); @@ -137,11 +134,9 @@ public void Dispose() { - OperationExecutionState.OnOperationCreated -= OnOperationCreated; - OperationExecutionState.OnOperationStarted -= OnOperationStarted; - OperationExecutionState.OnOperationExecuted -= OnOperationExecuted; - OperationExecutionState.OnOperationEnded -= OnOperationEnded; - - ResultGetState.OnOperationEnded -= OnOperationEnded; + EventsAggregator.OnOperationCreated -= OnOperationCreated; + EventsAggregator.OnOperationStarted -= OnOperationStarted; + EventsAggregator.OnOperationExecuted -= OnOperationExecuted; + EventsAggregator.OnOperationEnded -= OnOperationEnded; } } diff --git a/Hcs.WebApp/Program.cs b/Hcs.WebApp/Program.cs index e59c25f..ebefe22 100644 --- a/Hcs.WebApp/Program.cs +++ b/Hcs.WebApp/Program.cs @@ -74,10 +74,13 @@ builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); + builder.Services.AddHostedService(); builder.Services.AddHostedService(); builder.Services.AddHostedService();