From 2090c65bf174927c8c8c7fa4f12e95cd82292935 Mon Sep 17 00:00:00 2001 From: Loporrit <141286461+loporrit@users.noreply.github.com> Date: Fri, 6 Sep 2024 08:02:31 +0000 Subject: [PATCH] Allow file shards to signal main server directly --- .../Controllers/MainController.cs | 31 +++++++++++++++++++ .../Utils/StaticFilesServerConfiguration.cs | 3 ++ .../ShardClientReadyMessageService.cs | 5 ++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 MareSynchronosServer/MareSynchronosServer/Controllers/MainController.cs diff --git a/MareSynchronosServer/MareSynchronosServer/Controllers/MainController.cs b/MareSynchronosServer/MareSynchronosServer/Controllers/MainController.cs new file mode 100644 index 0000000..add64a4 --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Controllers/MainController.cs @@ -0,0 +1,31 @@ +using MareSynchronos.API.Routes; +using MareSynchronos.API.SignalR; +using MareSynchronosServer.Hubs; +using MareSynchronosServer.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; + +namespace MareSynchronosServer.Controllers; + +[Route(MareFiles.Main)] +public class MainController : Controller +{ + private IHubContext _hubContext; + + public MainController(ILogger logger, IHubContext hubContext) + { + _hubContext = hubContext; + } + + [HttpGet(MareFiles.Main_SendReady)] + [Authorize(Policy = "Internal")] + public IActionResult SendReadyToClients(string uid, Guid requestId) + { + _ = Task.Run(async () => + { + await _hubContext.Clients.User(uid).Client_DownloadReady(requestId); + }); + return Ok(); + } +} \ No newline at end of file diff --git a/MareSynchronosServer/MareSynchronosShared/Utils/StaticFilesServerConfiguration.cs b/MareSynchronosServer/MareSynchronosShared/Utils/StaticFilesServerConfiguration.cs index a2d1200..5abbed1 100644 --- a/MareSynchronosServer/MareSynchronosShared/Utils/StaticFilesServerConfiguration.cs +++ b/MareSynchronosServer/MareSynchronosShared/Utils/StaticFilesServerConfiguration.cs @@ -6,6 +6,7 @@ namespace MareSynchronosStaticFilesServer; public class StaticFilesServerConfiguration : MareConfigurationBase { public bool IsDistributionNode { get; set; } = false; + public bool NotifyMainServerDirectly { get; set; } = false; public Uri? MainFileServerAddress { get; set; } = null; public Uri? DistributionFileServerAddress { get; set; } = null; public bool DistributionFileServerForceHTTP2 { get; set; } = false; @@ -30,6 +31,8 @@ public class StaticFilesServerConfiguration : MareConfigurationBase { StringBuilder sb = new(); sb.AppendLine(base.ToString()); + sb.AppendLine($"{nameof(IsDistributionNode)} => {IsDistributionNode}"); + sb.AppendLine($"{nameof(NotifyMainServerDirectly)} => {NotifyMainServerDirectly}"); sb.AppendLine($"{nameof(MainFileServerAddress)} => {MainFileServerAddress}"); sb.AppendLine($"{nameof(DistributionFileServerAddress)} => {DistributionFileServerAddress}"); sb.AppendLine($"{nameof(DistributionFileServerForceHTTP2)} => {DistributionFileServerForceHTTP2}"); diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/ShardClientReadyMessageService.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/ShardClientReadyMessageService.cs index eb52190..7e59f94 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/ShardClientReadyMessageService.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/ShardClientReadyMessageService.cs @@ -25,7 +25,10 @@ public class ShardClientReadyMessageService : IClientReadyMessageService { _ = Task.Run(async () => { - var mainUrl = _configurationService.GetValue(nameof(StaticFilesServerConfiguration.MainFileServerAddress)); + var mainUrlConfigKey = _configurationService.GetValue(nameof(StaticFilesServerConfiguration.NotifyMainServerDirectly)) + ? nameof(StaticFilesServerConfiguration.MainServerAddress) + : nameof(StaticFilesServerConfiguration.MainFileServerAddress); + var mainUrl = _configurationService.GetValue(mainUrlConfigKey); var path = MareFiles.MainSendReadyFullPath(mainUrl, uid, requestId); using HttpRequestMessage msg = new() {