From 1b8d9bef619f69040ba1f705a6e5ef9285daea8e Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Wed, 25 Oct 2023 16:03:07 +0500 Subject: [PATCH] =?UTF-8?q?ReportsHub,=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20?= =?UTF-8?q?AddToGroup,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=D1=89=D0=B0=D0=B5=D1=82=20=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=BF=D0=BF=D1=83=20=D0=BE=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D1=83=D1=81=D0=B5=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=80=D0=B0=D0=BF=D0=BE=D1=80=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudWebApi/SignalR/ReportsHub.cs | 47 ++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) 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 + ); + + } } }