From 85983e2870cf9bcb8e8ed0a1fa33979c837194b9 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Mon, 29 May 2023 17:50:20 +0500 Subject: [PATCH] ProcessMapController Add SirnalR notifications on modification. MethodName = "ProcessMapChanged" --- .../Controllers/ProcessMapController.cs | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/AsbCloudWebApi/Controllers/ProcessMapController.cs b/AsbCloudWebApi/Controllers/ProcessMapController.cs index 1f6ce9a0..eb18b82f 100644 --- a/AsbCloudWebApi/Controllers/ProcessMapController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMapController.cs @@ -1,17 +1,17 @@ using AsbCloudApp.Data.ProcessMap; using AsbCloudApp.Repositories; using AsbCloudApp.Services; +using AsbCloudWebApi.SignalR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; -using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { - /// /// РТК /// @@ -21,18 +21,23 @@ namespace AsbCloudWebApi.Controllers public class ProcessMapController : CrudWellRelatedController { private readonly ITelemetryService telemetryService; + private readonly IHubContext telemetryHubContext; private readonly IProcessMapReportMakerService processMapReportService; private readonly IProcessMapReportService processMapService; + private const string SirnalRMethodGetDataName = "ProcessMapChanged"; + public ProcessMapController( IWellService wellService, IProcessMapPlanRepository repository, IProcessMapReportMakerService processMapReportService, IProcessMapReportService processMapService, - ITelemetryService telemetryService) + ITelemetryService telemetryService, + IHubContext telemetryHubContext) : base(wellService, repository) { this.telemetryService = telemetryService; + this.telemetryHubContext = telemetryHubContext; this.processMapReportService = processMapReportService; this.processMapService = processMapService; @@ -56,8 +61,7 @@ namespace AsbCloudWebApi.Controllers if (idWell is null) return BadRequest($"Wrong uid {uid}"); - var dto = Enumerable.Empty(); - return Ok(dto); + throw new NotImplementedException(); } /// @@ -136,7 +140,10 @@ namespace AsbCloudWebApi.Controllers public override async Task> InsertAsync([FromBody] ProcessMapPlanDto value, CancellationToken token) { value.IdUser = User.GetUserId() ?? -1; - return await base.InsertAsync(value, token); + var result = await base.InsertAsync(value, token); + if (result.Value > 0) + await NotifyUsersBySignalR(value.IdWell, token); + return result; } /// @@ -149,8 +156,17 @@ namespace AsbCloudWebApi.Controllers public override async Task> UpdateAsync([FromBody] ProcessMapPlanDto value, CancellationToken token) { value.IdUser = User.GetUserId() ?? -1; - return await base.UpdateAsync(value, token); + var result = await base.UpdateAsync(value, token); + if (result.Value > 0) + await NotifyUsersBySignalR(value.IdWell, token); + return result; + } + + private async Task NotifyUsersBySignalR(int idWell, CancellationToken token) + { + var dtos = await service.GetAllAsync(idWell, null, token); + _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}") + .SendAsync(SirnalRMethodGetDataName, dtos), CancellationToken.None); } } - } \ No newline at end of file