diff --git a/AsbCloudWebApi/SignalR/ReportsHub.cs b/AsbCloudWebApi/SignalR/ReportsHub.cs index b0bd95b7..1097c5ef 100644 --- a/AsbCloudWebApi/SignalR/ReportsHub.cs +++ b/AsbCloudWebApi/SignalR/ReportsHub.cs @@ -1,4 +1,10 @@ -using Microsoft.AspNetCore.Authorization; +using AsbCloudApp.Data; +using AsbCloudInfrastructure.Background; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.SignalR; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; namespace AsbCloudWebApi.SignalR { @@ -8,6 +14,39 @@ namespace AsbCloudWebApi.SignalR [Authorize] public class ReportsHub : BaseHub { - + private readonly BackgroundWorker backgroundWorker; + + public ReportsHub(BackgroundWorker backgroundWorker) + { + this.backgroundWorker = backgroundWorker; + } + + public override async Task AddToGroup(string groupName) + { + await base.AddToGroup(groupName); + + var workId = groupName.Replace("Report_", ""); + var work = backgroundWorker.WorkStore.RunOnceQueue.FirstOrDefault(work => work.Id == workId); + + var progress = new ReportProgressDto() + { + Operation = "Ожидает начала в очереди.", + Progress = 0f, + }; + + var state = work?.CurrentState; + if (state is not null) + { + progress.Operation = state.State; + progress.Progress = (float)state.Progress; + } + + await Clients.Group(groupName).SendAsync( + nameof(IReportHubClient.GetReportProgress), + progress, + CancellationToken.None + ); + + } } }