From f043253cf2866e30c8304ea60ff0ddb589132ae9 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Mon, 30 Oct 2023 12:13:38 +0500 Subject: [PATCH] =?UTF-8?q?1.=20=D0=A2=D0=B8=D0=BF=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D1=85=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20sig?= =?UTF-8?q?nal-R=202.=20=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D1=81=D0=BA=D0=B8=D1=85=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20signal-R=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D0=B8=20SignalRSwaggerG?= =?UTF-8?q?en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudWebApi/AsbCloudWebApi.csproj | 3 +- .../Controllers/DrillTestController.cs | 8 ++--- .../ProcessMaps/ProcessMapBaseController.cs | 7 ++-- .../ProcessMapWellDrillingController.cs | 3 +- .../ProcessMapWellReamController.cs | 3 +- .../Controllers/ReportController.cs | 12 +++++-- .../ApiExplorerGroupPerVersionConvention.cs | 13 +++++++ AsbCloudWebApi/DependencyInjection.cs | 8 +++++ AsbCloudWebApi/SignalR/BaseHub.cs | 8 ++--- .../SignalR/Clients/INotificationHubClient.cs | 22 ++++++++++++ .../SignalR/Clients/IReportHubClient.cs | 21 ++++++++++++ .../SignalR/Clients/ITelemetryHubClient.cs | 34 +++++++++++++++++++ .../SignalR/Clients/IWellInfoHubClient.cs | 22 ++++++++++++ AsbCloudWebApi/SignalR/IReportHubClient.cs | 7 ---- AsbCloudWebApi/SignalR/NotificationHub.cs | 3 +- AsbCloudWebApi/SignalR/ReportsHub.cs | 29 ++++++++++++---- .../SignalR/Services/NotificationPublisher.cs | 9 +++-- AsbCloudWebApi/SignalR/TelemetryHub.cs | 5 +-- AsbCloudWebApi/SignalR/WellInfoHub.cs | 11 +++--- AsbCloudWebApi/Startup.cs | 6 ++++ 20 files changed, 191 insertions(+), 43 deletions(-) create mode 100644 AsbCloudWebApi/Conventions/ApiExplorerGroupPerVersionConvention.cs create mode 100644 AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs create mode 100644 AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs create mode 100644 AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs create mode 100644 AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs delete mode 100644 AsbCloudWebApi/SignalR/IReportHubClient.cs diff --git a/AsbCloudWebApi/AsbCloudWebApi.csproj b/AsbCloudWebApi/AsbCloudWebApi.csproj index 5f231625..0d8f4806 100644 --- a/AsbCloudWebApi/AsbCloudWebApi.csproj +++ b/AsbCloudWebApi/AsbCloudWebApi.csproj @@ -2,7 +2,7 @@ net6.0 - true + true true $(NoWarn);1591 80899ceb-210f-4f19-ac56-aa90a5d666d4 @@ -14,6 +14,7 @@ + diff --git a/AsbCloudWebApi/Controllers/DrillTestController.cs b/AsbCloudWebApi/Controllers/DrillTestController.cs index bda32d6e..2d9585dc 100644 --- a/AsbCloudWebApi/Controllers/DrillTestController.cs +++ b/AsbCloudWebApi/Controllers/DrillTestController.cs @@ -5,6 +5,7 @@ using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -28,16 +29,15 @@ public class DrillTestController : ControllerBase private readonly IDrillTestRepository drillTestRepository; private readonly IWellService wellService; private readonly ITelemetryService telemetryService; - private readonly IHubContext telemetryHubContext; + private readonly IHubContext telemetryHubContext; - public string SignalRMethodGetDataName { get; protected set; } = "ReceiveDrilltestData"; public DrillTestController( IDrillTestReportService drillTestReportService, IDrillTestRepository drillTestRepository, IWellService wellService, ITelemetryService telemetryService, - IHubContext telemetryHubContext) + IHubContext telemetryHubContext) { this.drillTestReportService = drillTestReportService; this.drillTestRepository = drillTestRepository; @@ -71,7 +71,7 @@ public class DrillTestController : ControllerBase _ = Task.Run(async () => { var clients = telemetryHubContext.Clients.Group($"well_{idWell}"); - await clients.SendAsync(SignalRMethodGetDataName, dto); + await clients.ReceiveDrilltestData(dto, token); }, CancellationToken.None); return Ok(); diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapBaseController.cs index 9bb52f33..e512aca2 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapBaseController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapBaseController.cs @@ -9,6 +9,7 @@ using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -25,7 +26,7 @@ namespace AsbCloudWebApi.Controllers.ProcessMaps; public abstract class ProcessMapBaseController : ControllerBase where T : ProcessMapPlanBaseDto { - private readonly IHubContext telemetryHubContext; + private readonly IHubContext telemetryHubContext; private readonly ITelemetryService telemetryService; private readonly IWellService wellService; private readonly IUserRepository userRepository; @@ -36,7 +37,7 @@ public abstract class ProcessMapBaseController : ControllerBase IProcessMapPlanRepository repository, IUserRepository userRepository, ICrudRepository wellSectionRepository, - IHubContext telemetryHubContext, + IHubContext telemetryHubContext, ITelemetryService telemetryService) { this.wellService = wellService; @@ -204,7 +205,7 @@ public abstract class ProcessMapBaseController : ControllerBase await telemetryHubContext.Clients .Group($"{SignalRMethod}_{idWell}") - .SendAsync("UpdateProcessMap", dtos, cancellationToken); + .UpdateProcessMap(dtos, cancellationToken); } private async Task CheckIsExistsWellSectionTypeAsync(int idWellSectionType, CancellationToken cancellationToken) diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellDrillingController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellDrillingController.cs index 89963cfb..9f6812e6 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellDrillingController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellDrillingController.cs @@ -10,6 +10,7 @@ using AsbCloudApp.Services; using AsbCloudApp.Services.ProcessMaps; using AsbCloudApp.Services.ProcessMaps.WellDrilling; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; @@ -34,7 +35,7 @@ public class ProcessMapWellDrillingController : ProcessMapBaseController wellSectionRepository, - IHubContext telemetryHubContext, + IHubContext telemetryHubContext, ITelemetryService telemetryService) : base(wellService, repository, userRepository, wellSectionRepository, telemetryHubContext, telemetryService) { diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellReamController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellReamController.cs index f0f48e74..b54323d2 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellReamController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapWellReamController.cs @@ -3,6 +3,7 @@ using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Repositories; using AsbCloudApp.Services; using AsbCloudWebApi.SignalR; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.SignalR; namespace AsbCloudWebApi.Controllers.ProcessMaps; @@ -16,7 +17,7 @@ public class ProcessMapWellReamController : ProcessMapBaseController repository, IUserRepository userRepository, ICrudRepository wellSectionRepository, - IHubContext telemetryHubContext, + IHubContext telemetryHubContext, ITelemetryService telemetryService) : base(wellService, repository, userRepository, wellSectionRepository, telemetryHubContext, telemetryService) { diff --git a/AsbCloudWebApi/Controllers/ReportController.cs b/AsbCloudWebApi/Controllers/ReportController.cs index 3386d505..5e7a8fc2 100644 --- a/AsbCloudWebApi/Controllers/ReportController.cs +++ b/AsbCloudWebApi/Controllers/ReportController.cs @@ -8,6 +8,7 @@ using System.ComponentModel.DataAnnotations; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Requests; +using AsbCloudWebApi.SignalR.Clients; namespace AsbCloudWebApi.Controllers { @@ -57,9 +58,16 @@ namespace AsbCloudWebApi.Controllers return Forbid(); void HandleReportProgressAsync(object progress, string id) => - Task.Run(() => + Task.Run(async() => { - reportsHubContext.Clients.Group($"Report_{id}").SendAsync( + //reportsHubContext.Clients.Group($"Report_{id}") + // .GetReportProgressTest(progress, token); + //.ConfigureAwait(false); + + //await reportsHubContext.Clients.Group($"Report_{id}") + // .GetReportProgress(progress, token); + + await reportsHubContext.Clients.Group($"Report_{id}").SendAsync( nameof(IReportHubClient.GetReportProgress), progress, token diff --git a/AsbCloudWebApi/Conventions/ApiExplorerGroupPerVersionConvention.cs b/AsbCloudWebApi/Conventions/ApiExplorerGroupPerVersionConvention.cs new file mode 100644 index 00000000..69a912cf --- /dev/null +++ b/AsbCloudWebApi/Conventions/ApiExplorerGroupPerVersionConvention.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using System.Linq; + +namespace AsbCloudWebApi.Conventions +{ + public class ApiExplorerGroupPerVersionConvention : IControllerModelConvention + { + public void Apply(ControllerModel controller) + { + controller.ApiExplorer.GroupName = "v1"; + } + } +} \ No newline at end of file diff --git a/AsbCloudWebApi/DependencyInjection.cs b/AsbCloudWebApi/DependencyInjection.cs index 998212b2..be2baf9b 100644 --- a/AsbCloudWebApi/DependencyInjection.cs +++ b/AsbCloudWebApi/DependencyInjection.cs @@ -46,6 +46,7 @@ namespace AsbCloudWebApi }); c.SwaggerDoc("v1", new OpenApiInfo { Title = "ASB cloud web api", Version = "v1" }); + c.SwaggerDoc("signalr", new OpenApiInfo { Title = "SignalR client methods", Version = "signalr" }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = @"JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token in the text input below. Example: 'Bearer 12345abcdef'", @@ -78,6 +79,13 @@ namespace AsbCloudWebApi var includeControllerXmlComment = true; c.IncludeXmlComments(xmlPath, includeControllerXmlComment); c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "AsbCloudApp.xml"), includeControllerXmlComment); + + c.AddSignalRSwaggerGen((_) => { + _.DisplayInDocument("signalr"); + _.UseHubXmlCommentsSummaryAsTagDescription = true; + _.UseHubXmlCommentsSummaryAsTag = true; + _.UseXmlComments(xmlPath); + }); }); } diff --git a/AsbCloudWebApi/SignalR/BaseHub.cs b/AsbCloudWebApi/SignalR/BaseHub.cs index c351ccc4..1bb151c1 100644 --- a/AsbCloudWebApi/SignalR/BaseHub.cs +++ b/AsbCloudWebApi/SignalR/BaseHub.cs @@ -1,9 +1,10 @@ +using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; namespace AsbCloudWebApi.SignalR; -public abstract class BaseHub : Hub +public abstract class BaseHub : Hub where T : class { public virtual Task AddToGroup(string groupName) => Groups.AddToGroupAsync(Context.ConnectionId, groupName); @@ -12,8 +13,7 @@ public abstract class BaseHub : Hub Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName); } -public abstract class BaseHub : BaseHub - where T : class +public abstract class BaseHub2 : Hub { - + } \ No newline at end of file diff --git a/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs b/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs new file mode 100644 index 00000000..aae2cb77 --- /dev/null +++ b/AsbCloudWebApi/SignalR/Clients/INotificationHubClient.cs @@ -0,0 +1,22 @@ +using AsbCloudWebApi.SignalR.Messages; +using SignalRSwaggerGen.Attributes; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.SignalR.Clients +{ + /// + /// Hub по работе с уведомлениями + /// + [SignalRHub] + public interface INotificationHubClient + { + /// + /// Отправка клиенту сообщения с уведомлением + /// + /// сообщение с уведомлением + /// + /// + Task ReceiveNotifications(NotificationMessage message, CancellationToken token = default); + } +} diff --git a/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs b/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs new file mode 100644 index 00000000..6c25d829 --- /dev/null +++ b/AsbCloudWebApi/SignalR/Clients/IReportHubClient.cs @@ -0,0 +1,21 @@ +using SignalRSwaggerGen.Attributes; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.SignalR.Clients +{ + /// + /// Hub по работе с отчетами + /// + [SignalRHub] + public interface IReportHubClient + { + /// + /// Отправка клиенту сообщения о статусе формирования отчета + /// + /// статус формирования отчета + /// + /// + Task GetReportProgress(object progress, CancellationToken token); + } +} diff --git a/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs b/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs new file mode 100644 index 00000000..fa915aa0 --- /dev/null +++ b/AsbCloudWebApi/SignalR/Clients/ITelemetryHubClient.cs @@ -0,0 +1,34 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Data.SAUB; +using SignalRSwaggerGen.Attributes; +using System.Collections; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.SignalR.Clients +{ + /// + /// Hub по работе с телеметрией + /// + [SignalRHub] + public interface ITelemetryHubClient + { + /// + /// Отправка клиенту уведомления о доставке с панели drill test данных + /// + /// + /// + /// + Task ReceiveDrilltestData(DrillTestDto dto, CancellationToken token = default); + + /// + /// + /// + /// + /// + /// + /// + Task UpdateProcessMap(IEnumerable dtos, CancellationToken token = default); + } +} diff --git a/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs b/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs new file mode 100644 index 00000000..a898d207 --- /dev/null +++ b/AsbCloudWebApi/SignalR/Clients/IWellInfoHubClient.cs @@ -0,0 +1,22 @@ +using AsbCloudApp.Data; +using SignalRSwaggerGen.Attributes; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.SignalR.Clients +{ + /// + /// Hub по работе с информацией о скважине + /// + [SignalRHub] + public interface IWellInfoHubClient + { + /// + /// Отправка клиенту сообщения об обновлении информации о скважине + /// + /// информация о скважине + /// + /// + Task UpdateWellInfo(object wellInfo, CancellationToken token = default); + } +} diff --git a/AsbCloudWebApi/SignalR/IReportHubClient.cs b/AsbCloudWebApi/SignalR/IReportHubClient.cs deleted file mode 100644 index 4eb9581f..00000000 --- a/AsbCloudWebApi/SignalR/IReportHubClient.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace AsbCloudWebApi.SignalR -{ - public interface IReportHubClient - { - float GetReportProgress(float progress); - } -} diff --git a/AsbCloudWebApi/SignalR/NotificationHub.cs b/AsbCloudWebApi/SignalR/NotificationHub.cs index b85ce74b..4deea974 100644 --- a/AsbCloudWebApi/SignalR/NotificationHub.cs +++ b/AsbCloudWebApi/SignalR/NotificationHub.cs @@ -2,6 +2,7 @@ using System; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Services.Notifications; +using AsbCloudWebApi.SignalR.Clients; using AsbCloudWebApi.SignalR.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -9,7 +10,7 @@ using Microsoft.AspNetCore.Mvc; namespace AsbCloudWebApi.SignalR; [Authorize] -public class NotificationHub : BaseHub +public class NotificationHub : BaseHub { private readonly ConnectionManagerService connectionManagerService; private readonly NotificationService notificationService; diff --git a/AsbCloudWebApi/SignalR/ReportsHub.cs b/AsbCloudWebApi/SignalR/ReportsHub.cs index 1097c5ef..c4335396 100644 --- a/AsbCloudWebApi/SignalR/ReportsHub.cs +++ b/AsbCloudWebApi/SignalR/ReportsHub.cs @@ -1,5 +1,6 @@ using AsbCloudApp.Data; using AsbCloudInfrastructure.Background; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; using System.Linq; @@ -10,9 +11,13 @@ 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 : BaseHub + public class ReportsHub : BaseHub2 + //BaseHub //Hub //BaseHub<> { private readonly BackgroundWorker backgroundWorker; @@ -21,9 +26,15 @@ namespace AsbCloudWebApi.SignalR this.backgroundWorker = backgroundWorker; } - public override async Task AddToGroup(string groupName) + /// + /// Добавление в группу, отправка данных о формировании отчета + /// + /// + /// + public async Task AddToGroup(string groupName) { - await base.AddToGroup(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); @@ -34,19 +45,25 @@ namespace AsbCloudWebApi.SignalR Progress = 0f, }; - var state = work?.CurrentState; + 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); + //} } } diff --git a/AsbCloudWebApi/SignalR/Services/NotificationPublisher.cs b/AsbCloudWebApi/SignalR/Services/NotificationPublisher.cs index 1f6f4f67..6799e71d 100644 --- a/AsbCloudWebApi/SignalR/Services/NotificationPublisher.cs +++ b/AsbCloudWebApi/SignalR/Services/NotificationPublisher.cs @@ -4,6 +4,7 @@ using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Repositories; +using AsbCloudWebApi.SignalR.Clients; using AsbCloudWebApi.SignalR.Messages; using Microsoft.AspNetCore.SignalR; @@ -12,11 +13,11 @@ namespace AsbCloudWebApi.SignalR.Services; public class NotificationPublisher { private readonly ConnectionManagerService connectionManagerService; - private readonly IHubContext notificationHubContext; + private readonly IHubContext notificationHubContext; private readonly INotificationRepository notificationRepository; public NotificationPublisher(ConnectionManagerService connectionManagerService, - IHubContext notificationHubContext, + IHubContext notificationHubContext, INotificationRepository notificationRepository) { this.connectionManagerService = connectionManagerService; @@ -70,8 +71,6 @@ public class NotificationPublisher CancellationToken cancellationToken) { await notificationHubContext.Clients.Client(connectionId) - .SendAsync("receiveNotifications", - message, - cancellationToken); + .ReceiveNotifications(message, cancellationToken); } } \ No newline at end of file diff --git a/AsbCloudWebApi/SignalR/TelemetryHub.cs b/AsbCloudWebApi/SignalR/TelemetryHub.cs index 9b7fd59d..69b6c628 100644 --- a/AsbCloudWebApi/SignalR/TelemetryHub.cs +++ b/AsbCloudWebApi/SignalR/TelemetryHub.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authorization; +using AsbCloudWebApi.SignalR.Clients; +using Microsoft.AspNetCore.Authorization; namespace AsbCloudWebApi.SignalR { @@ -6,7 +7,7 @@ namespace AsbCloudWebApi.SignalR // https://docs.microsoft.com/ru-ru/aspnet/core/signalr/introduction?view=aspnetcore-5.0 [Authorize] - public class TelemetryHub : BaseHub + public class TelemetryHub : BaseHub { } diff --git a/AsbCloudWebApi/SignalR/WellInfoHub.cs b/AsbCloudWebApi/SignalR/WellInfoHub.cs index 677b4f64..553923fd 100644 --- a/AsbCloudWebApi/SignalR/WellInfoHub.cs +++ b/AsbCloudWebApi/SignalR/WellInfoHub.cs @@ -4,17 +4,18 @@ using AsbCloudApp.IntegrationEvents; using AsbCloudApp.IntegrationEvents.Interfaces; using AsbCloudApp.Services; using AsbCloudInfrastructure.Services; +using AsbCloudWebApi.SignalR.Clients; using Microsoft.AspNetCore.SignalR; namespace AsbCloudWebApi.SignalR; -public class WellInfoHub : BaseHub, IIntegrationEventHandler +public class WellInfoHub : BaseHub, IIntegrationEventHandler { - private readonly IHubContext hubContext; + private readonly IHubContext hubContext; private readonly IWellService wellService; private readonly WellInfoService wellInfoService; - public WellInfoHub(IHubContext hubContext, + public WellInfoHub(IHubContext hubContext, IWellService wellService, WellInfoService wellInfoService) { @@ -34,8 +35,6 @@ public class WellInfoHub : BaseHub, IIntegrationEventHandler w.Id == well.Id); await hubContext.Clients.Group($"well_info_{integrationEvent.IdWell}") - .SendAsync(method, new + .UpdateWellInfo(new { Well = well, WellInfo = wellInfo diff --git a/AsbCloudWebApi/Startup.cs b/AsbCloudWebApi/Startup.cs index f04a53d1..343df996 100644 --- a/AsbCloudWebApi/Startup.cs +++ b/AsbCloudWebApi/Startup.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.ResponseCompression; +using AsbCloudWebApi.Conventions; namespace AsbCloudWebApi { @@ -108,6 +109,10 @@ namespace AsbCloudWebApi options.EnableForHttps = true; options.Providers.Add(); }); + + services.AddMvc(c => + c.Conventions.Add(new ApiExplorerGroupPerVersionConvention()) + ); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) @@ -116,6 +121,7 @@ namespace AsbCloudWebApi app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1"); + c.SwaggerEndpoint("/swagger/signalr/swagger.json", "signalr"); c.EnablePersistAuthorization(); c.EnableFilter(); c.DisplayOperationId();