diff --git a/AsbCloudWebApi/Controllers/SAUB/TelemetryDataBaseController.cs b/AsbCloudWebApi/Controllers/SAUB/TelemetryDataBaseController.cs index 4649d91d..c19cfbd2 100644 --- a/AsbCloudWebApi/Controllers/SAUB/TelemetryDataBaseController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/TelemetryDataBaseController.cs @@ -2,6 +2,7 @@ using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; @@ -23,20 +24,22 @@ namespace AsbCloudWebApi.Controllers.SAUB protected readonly IWellService wellService; private readonly ITelemetryService telemetryService; private readonly ITelemetryDataService telemetryDataService; - private readonly IHubContext telemetryHubContext; - - public string SignalRMethodGetDataName { get; protected set; } = "ReceiveData"; + protected readonly IHubContext telemetryHubContext; + public Action> SignalrReceiveDataOperation { get; set; } public TelemetryDataBaseController( ITelemetryService telemetryService, ITelemetryDataService telemetryDataService, IWellService wellService, - IHubContext telemetryHubContext) + IHubContext telemetryHubContext) { this.telemetryService = telemetryService; this.telemetryDataService = telemetryDataService; this.wellService = wellService; this.telemetryHubContext = telemetryHubContext; + this.SignalrReceiveDataOperation = (int? idWell, IEnumerable dtos) => { + telemetryHubContext.Clients.Group($"well_{idWell}").ReceiveData(dtos, CancellationToken.None); + }; } /// @@ -55,8 +58,7 @@ namespace AsbCloudWebApi.Controllers.SAUB var idWell = telemetryService.GetIdWellByTelemetryUid(uid); if (idWell is not null && dtos.Any()) - _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}") - .SendAsync(SignalRMethodGetDataName, dtos), CancellationToken.None); + _ = Task.Run(() => SignalrReceiveDataOperation.Invoke(idWell, dtos)); return Ok(); } @@ -75,7 +77,7 @@ namespace AsbCloudWebApi.Controllers.SAUB [Permission] public virtual async Task>> GetDataAsync(int idWell, DateTime begin = default, - int intervalSec = 600, + int intervalSec = 600, int approxPointsCount = 1024, //TODO: сделать cancellationToken обязательным CancellationToken token = default) diff --git a/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSaubController.cs b/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSaubController.cs index be694818..6cee68c0 100644 --- a/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSaubController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSaubController.cs @@ -1,12 +1,14 @@ using AsbCloudApp.Data.SAUB; using AsbCloudApp.Services; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; -using System.Threading.Tasks; -using System.Threading; using System; -using Microsoft.AspNetCore.Http; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers.SAUB { @@ -23,14 +25,16 @@ namespace AsbCloudWebApi.Controllers.SAUB ITelemetryService telemetryService, ITelemetryDataSaubService telemetryDataService, IWellService wellService, - IHubContext telemetryHubContext) + IHubContext telemetryHubContext) : base( telemetryService, telemetryDataService, wellService, telemetryHubContext) { - SignalRMethodGetDataName = "ReceiveDataSaub"; + SignalrReceiveDataOperation = (int? idWell, IEnumerable dtos) => { + telemetryHubContext.Clients.Group($"well_{idWell}").ReceiveDataSaub(dtos, CancellationToken.None); + }; telemetryDataSaubService = telemetryDataService; } diff --git a/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSpinController.cs b/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSpinController.cs index c8b55cc6..05ae423f 100644 --- a/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSpinController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/TelemetryDataSpinController.cs @@ -1,8 +1,11 @@ using AsbCloudApp.Data.SAUB; using AsbCloudApp.Services; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; +using System.Collections.Generic; +using System.Threading; namespace AsbCloudWebApi.Controllers.SAUB { @@ -17,14 +20,16 @@ namespace AsbCloudWebApi.Controllers.SAUB ITelemetryService telemetryService, ITelemetryDataService telemetryDataService, IWellService wellService, - IHubContext telemetryHubContext) + IHubContext telemetryHubContext) : base( telemetryService, telemetryDataService, wellService, telemetryHubContext) { - SignalRMethodGetDataName = "ReceiveDataSpin"; + SignalrReceiveDataOperation = (int? idWell, IEnumerable dtos) => { + telemetryHubContext.Clients.Group($"well_{idWell}").ReceiveDataSpin(dtos, CancellationToken.None); + }; } } } diff --git a/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs b/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs index aae2cb77..09c36851 100644 --- a/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs +++ b/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs @@ -12,11 +12,12 @@ namespace AsbCloudWebApi.SignalR.Clients public interface INotificationHubClient { /// - /// Отправка клиенту сообщения с уведомлением + /// Отправка клиенту сообщения с уведомлением. + /// Для подписки на метод необходимо отправить connectionId /// /// сообщение с уведомлением /// /// - Task ReceiveNotifications(NotificationMessage message, CancellationToken token = default); + Task ReceiveNotifications(NotificationMessage message, CancellationToken token); } } diff --git a/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs b/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs index 6c25d829..dde7da3f 100644 --- a/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs +++ b/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs @@ -11,7 +11,8 @@ namespace AsbCloudWebApi.SignalR.Clients public interface IReportHubClient { /// - /// Отправка клиенту сообщения о статусе формирования отчета + /// Отправка клиенту сообщения о статусе формирования отчета. + /// Для подписки на метод необходимо отправить сообщение в формате $"Report_{id}" /// /// статус формирования отчета /// diff --git a/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs b/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs index fa915aa0..6e1578be 100644 --- a/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs +++ b/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs @@ -1,8 +1,6 @@ -using AsbCloudApp.Data; -using AsbCloudApp.Data.SAUB; +using AsbCloudApp.Data.SAUB; using SignalRSwaggerGen.Attributes; using System.Collections; -using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -15,12 +13,13 @@ namespace AsbCloudWebApi.SignalR.Clients public interface ITelemetryHubClient { /// - /// Отправка клиенту уведомления о доставке с панели drill test данных + /// Отправка клиенту уведомления о доставке с панели drill test данных. + /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" /// /// /// /// - Task ReceiveDrilltestData(DrillTestDto dto, CancellationToken token = default); + Task ReceiveDrilltestData(DrillTestDto dto, CancellationToken token); /// /// @@ -29,6 +28,37 @@ namespace AsbCloudWebApi.SignalR.Clients /// /// /// - Task UpdateProcessMap(IEnumerable dtos, CancellationToken token = default); + Task UpdateProcessMap(IEnumerable dtos, CancellationToken token); + + /// + /// Отправка данных клиенту. + /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" + /// + /// + /// + /// + /// + Task ReceiveData(IEnumerable dtos, CancellationToken token); + + /// + /// Отправка сауб-данных клиенту. + /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" + /// + /// + /// + /// + /// + Task ReceiveDataSaub(IEnumerable dtos, CancellationToken token); + + /// + /// Отправка спин-данных клиенту. + /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" + /// + /// + /// + /// + /// + Task ReceiveDataSpin(IEnumerable dtos, CancellationToken token); + } } diff --git a/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs b/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs index a898d207..110143ed 100644 --- a/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs +++ b/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs @@ -13,10 +13,11 @@ namespace AsbCloudWebApi.SignalR.Clients { /// /// Отправка клиенту сообщения об обновлении информации о скважине + /// Для подписки на метод необходимо отправить сообщение в формате $"well_info_{idWell}" /// /// информация о скважине /// /// - Task UpdateWellInfo(object wellInfo, CancellationToken token = default); + Task UpdateWellInfo(object wellInfo, CancellationToken token); } }