diff --git a/AsbCloudWebApi/SignalR/ReportsHub.cs b/AsbCloudWebApi/SignalR/ReportsHub.cs index b0bd95b7..fa1e2787 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,43 @@ namespace AsbCloudWebApi.SignalR [Authorize] public class ReportsHub : BaseHub { - + private readonly BackgroundWorker backgroundWorker; + + public ReportsHub(BackgroundWorker backgroundWorker, IHubContext hubContext) + { + this.backgroundWorker = backgroundWorker; + } + + public override async Task AddToGroup(string groupName) + { + var workId = groupName.Replace("Report_", ""); + var work = backgroundWorker.WorkStore.RunOnceQueue.FirstOrDefault(work => work.Id == workId); + if (work is null) return; + + await base.AddToGroup(groupName); + var state = work.CurrentState; + var progress = new ReportProgressDto() + { + Operation = "Ожидает начала в очереди.", + Progress = 0f, + }; + if (state is not null) + { + progress = new ReportProgressDto + { + CurrentPage = 0, + Operation = state.State, + Progress = (float)state.Progress, + TotalPages = 0, + }; + } + + await Clients.Group(groupName).SendAsync( + nameof(IReportHubClient.GetReportProgress), + progress, + CancellationToken.None + ); + + } } }