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..c2e9eb52 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs @@ -1,3 +1,4 @@ +using System.Collections.Concurrent; using SPTarkov.DI.Annotations; namespace SPTarkov.Server.Core.Utils.Logger; @@ -10,8 +11,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; @@ -35,30 +35,17 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) { while (!_loggerCancellationTokens.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 +93,7 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) public void EnqueueMessage(SptLogMessage message) { - lock (_messageQueueLock) - { - _messageQueue.Enqueue(message); - } + _messageQueue.TryAdd(message); } public void DumpAndStop() 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; diff --git a/Testing/TestMod/Components/Pages/TestModPage.razor b/Testing/TestMod/Components/Pages/TestModPage.razor index 16584ae3..b4939cea 100644 --- a/Testing/TestMod/Components/Pages/TestModPage.razor +++ b/Testing/TestMod/Components/Pages/TestModPage.razor @@ -1,9 +1,23 @@ -@page "/test/page" +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@rendermode InteractiveServer +@page "/test/page"

TestModPage

Chomp! -@code { +

Counter Test

+

Current count: @count

+ + + +@code { + private int count = 0; + + private void IncrementCount() + { + count++; + } }