DD.WellWorkover.Cloud/AsbCloudWebApi/SignalR/ReportsHub.cs
Olga Nemt f043253cf2 1. Типизация клиентских методов signal-R
2. Документирование  клиентских методов signal-R при помощи SignalRSwaggerGen
2023-10-30 12:13:38 +05:00

70 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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]
/// <summary>
/// ReportsHub
/// </summary>
[Authorize]
public class ReportsHub : BaseHub2
//BaseHub<IReportHubClient> //Hub<IReportHubClient> //BaseHub<>
{
private readonly BackgroundWorker backgroundWorker;
public ReportsHub(BackgroundWorker backgroundWorker)
{
this.backgroundWorker = backgroundWorker;
}
/// <summary>
/// Добавление в группу, отправка данных о формировании отчета
/// </summary>
/// <param name="groupName"></param>
/// <returns></returns>
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);
//}
}
}