using AsbCloudApp.Data; using AsbCloudInfrastructure.Background; using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.SignalR { // SignalR manual: // https://docs.microsoft.com/ru-ru/aspnet/core/signalr/introduction?view=aspnetcore-5.0 //[SignalRHub] /// /// ReportsHub /// [Authorize] public class ReportsHub : BaseHub2 //BaseHub //Hub //BaseHub<> { private readonly BackgroundWorker backgroundWorker; public ReportsHub(BackgroundWorker backgroundWorker) { this.backgroundWorker = backgroundWorker; } /// /// Добавление в группу, отправка данных о формировании отчета /// /// /// public async Task AddToGroup(string groupName) { //await this.AddToGroup(groupName); //await this.Groups.AddToGroupAsync(Context.ConnectionId, 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 ); //await Clients.Group(groupName).GetReportProgress(progress, CancellationToken.None); } //public async Task GetReportProgressTest(object obj, CancellationToken token) //{ // await Clients.All.GetReportProgressTest(obj, token); //} } }