From 5670e5a123f63afcffdccafb947046f6712d6d32 Mon Sep 17 00:00:00 2001 From: Archangel Date: Fri, 10 Oct 2025 14:52:59 +0200 Subject: [PATCH 1/5] Set page render mode --- .../SPTarkov.Server.Web/Components/App.razor | 16 ++++++++++++++-- .../SPTarkov.Server.Web/Components/Routes.razor | 2 +- Libraries/SPTarkov.Server.Web/SPTWeb.cs | 5 ++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Libraries/SPTarkov.Server.Web/Components/App.razor b/Libraries/SPTarkov.Server.Web/Components/App.razor index 35e0c7a9..0b240e24 100644 --- a/Libraries/SPTarkov.Server.Web/Components/App.razor +++ b/Libraries/SPTarkov.Server.Web/Components/App.razor @@ -6,14 +6,26 @@ - + - + @code { + + [CascadingParameter] + private HttpContext HttpContext { get; set; } = default!; + + private IComponentRenderMode? PageRenderMode + { + get + { + + return HttpContext.AcceptsInteractiveRouting() ? InteractiveServer : null; + } + } } diff --git a/Libraries/SPTarkov.Server.Web/Components/Routes.razor b/Libraries/SPTarkov.Server.Web/Components/Routes.razor index de83bf4c..5c9f64d6 100644 --- a/Libraries/SPTarkov.Server.Web/Components/Routes.razor +++ b/Libraries/SPTarkov.Server.Web/Components/Routes.razor @@ -1,7 +1,7 @@ @using System.Reflection @using SPTarkov.Server.Web.Components.Layout - + diff --git a/Libraries/SPTarkov.Server.Web/SPTWeb.cs b/Libraries/SPTarkov.Server.Web/SPTWeb.cs index cb08fdf7..c4c11bc3 100644 --- a/Libraries/SPTarkov.Server.Web/SPTWeb.cs +++ b/Libraries/SPTarkov.Server.Web/SPTWeb.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.FileProviders; +using System.Reflection; +using Microsoft.Extensions.FileProviders; using MudBlazor.Services; using SPTarkov.Server.Core.Models.Spt.Mod; using SPTarkov.Server.Web.Components; @@ -8,6 +9,7 @@ namespace SPTarkov.Server.Web; public static class SPTWeb { internal static IEnumerable SptWebMods = []; + internal static List SptWebModsAssemblies = []; public static void InitializeSptBlazor(this WebApplicationBuilder builder, IReadOnlyList sptMods) { @@ -39,6 +41,7 @@ public static class SPTWeb foreach (var assembly in mod.Assemblies) { razorBuilder.AddAdditionalAssemblies(assembly); + SptWebModsAssemblies.Add(assembly); } var modAssembly = mod.ModMetadata.GetType().Assembly; From 70ef0bcc7e70cbc64f5141d455b0e6fd614f014c Mon Sep 17 00:00:00 2001 From: Archangel Date: Fri, 10 Oct 2025 14:54:55 +0200 Subject: [PATCH 2/5] Add interactive element to test page --- Testing/TestMod/Components/Pages/TestModPage.razor | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Testing/TestMod/Components/Pages/TestModPage.razor b/Testing/TestMod/Components/Pages/TestModPage.razor index 16584ae3..61d9ced6 100644 --- a/Testing/TestMod/Components/Pages/TestModPage.razor +++ b/Testing/TestMod/Components/Pages/TestModPage.razor @@ -4,6 +4,17 @@ Chomp! -@code { +

Counter Test

+

Current count: @count

+ + + +@code { + private int count = 0; + + private void IncrementCount() + { + count++; + } } From 8fb7b9612776e7ce2e134b320861860582b761bc Mon Sep 17 00:00:00 2001 From: Archangel Date: Fri, 10 Oct 2025 15:25:15 +0200 Subject: [PATCH 3/5] Render test page interactively --- Testing/TestMod/Components/Pages/TestModPage.razor | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Testing/TestMod/Components/Pages/TestModPage.razor b/Testing/TestMod/Components/Pages/TestModPage.razor index 61d9ced6..b4939cea 100644 --- a/Testing/TestMod/Components/Pages/TestModPage.razor +++ b/Testing/TestMod/Components/Pages/TestModPage.razor @@ -1,4 +1,7 @@ -@page "/test/page" +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@rendermode InteractiveServer +@page "/test/page"

TestModPage

From c3724181650d9261dee4fecd8106785d99848315 Mon Sep 17 00:00:00 2001 From: Archangel Date: Fri, 10 Oct 2025 16:13:24 +0200 Subject: [PATCH 4/5] Improve SptLogger stability & do not implement IDisposable --- .../Utils/Logger/SptLogger.cs | 7 +--- .../Utils/Logger/SptLoggerQueueManager.cs | 37 ++++++------------- 2 files changed, 12 insertions(+), 32 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs index ef16e795..29b7d599 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs @@ -6,7 +6,7 @@ using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel; namespace SPTarkov.Server.Core.Utils.Logger; [Injectable(TypePriority = int.MinValue)] -public class SptLogger : ISptLogger, IDisposable +public class SptLogger : ISptLogger { private string _category; private readonly SptLoggerQueueManager _loggerQueueManager; @@ -206,9 +206,4 @@ public class SptLogger : ISptLogger, IDisposable { _loggerQueueManager.DumpAndStop(); } - - public void Dispose() - { - _loggerQueueManager.DumpAndStop(); - } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs index 6b1ff94b..1d3181c2 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs @@ -1,3 +1,5 @@ +using System.Collections.Concurrent; +using Microsoft.Extensions.Logging; using SPTarkov.DI.Annotations; namespace SPTarkov.Server.Core.Utils.Logger; @@ -10,8 +12,7 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) private Thread? _loggerTask; private readonly Lock LoggerTaskLock = new(); private readonly CancellationTokenSource _loggerCancellationTokens = new(); - private readonly Queue _messageQueue = new(); - private readonly Lock _messageQueueLock = new(); + private readonly BlockingCollection _messageQueue = new(); private Dictionary? _logHandlers; private SptLoggerConfiguration _config; @@ -33,32 +34,19 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) private void LoggerWorkerThread() { - while (!_loggerCancellationTokens.IsCancellationRequested) + while (!_loggerCancellationTokens.Token.IsCancellationRequested) { - lock (_messageQueueLock) + try { - if (_messageQueue.Count != 0) - { - while (_messageQueue.TryDequeue(out var message)) - { - LogMessage(message); - } - } - } - - Thread.Sleep((int)_config.PoolingTimeMs); - } - - lock (_messageQueueLock) - { - // make sure after cancellation that no messages are outstanding - if (_messageQueue.Count != 0) - { - while (_messageQueue.TryDequeue(out var message)) + foreach (var message in _messageQueue.GetConsumingEnumerable(_loggerCancellationTokens.Token)) { LogMessage(message); } } + catch (Exception ex) + { + Console.WriteLine($"Logger queue caught exception: {ex}"); + } } } @@ -106,10 +94,7 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) public void EnqueueMessage(SptLogMessage message) { - lock (_messageQueueLock) - { - _messageQueue.Enqueue(message); - } + _messageQueue.TryAdd(message); } public void DumpAndStop() From 699a4dfafec1923fcf1d1d0731648e76c5370a50 Mon Sep 17 00:00:00 2001 From: Archangel Date: Fri, 10 Oct 2025 16:14:23 +0200 Subject: [PATCH 5/5] Cleanup --- .../SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs index 1d3181c2..c2e9eb52 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs @@ -1,5 +1,4 @@ using System.Collections.Concurrent; -using Microsoft.Extensions.Logging; using SPTarkov.DI.Annotations; namespace SPTarkov.Server.Core.Utils.Logger; @@ -34,7 +33,7 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) private void LoggerWorkerThread() { - while (!_loggerCancellationTokens.Token.IsCancellationRequested) + while (!_loggerCancellationTokens.IsCancellationRequested) { try {