From 9ddece0eac4dc3718c4f9279b4695d645a3e3cef Mon Sep 17 00:00:00 2001 From: vnugent Date: Thu, 2 Nov 2023 01:50:06 -0400 Subject: also carried away --- .../src/WebSessionProvider.cs | 31 +++++++++++++++------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs') diff --git a/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs b/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs index 655bae8..5516fef 100644 --- a/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs +++ b/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs @@ -27,6 +27,7 @@ using System.Threading; using System.Threading.Tasks; using VNLib.Net.Http; +using VNLib.Utils.Logging; using VNLib.Plugins.Essentials; using VNLib.Plugins.Essentials.Sessions; using VNLib.Plugins.Extensions.Loading; @@ -34,17 +35,20 @@ using VNLib.Plugins.Extensions.Loading; namespace VNLib.Plugins.Sessions.VNCache { - [ConfigurationName(WebSessionProviderEntry.WEB_SESSION_CONFIG)] - internal sealed class WebSessionProvider : ISessionProvider + [ExternService] + [ConfigurationName(WEB_SESSION_CONFIG)] + public sealed class WebSessionProvider : ISessionProvider { + internal const string WEB_SESSION_CONFIG = "web"; + internal const string LOGGER_SCOPE = "WEB-SESSIONS"; + private static readonly SessionHandle _vf = new (null, FileProcessArgs.VirtualSkip, null); private readonly WebSessionStore _sessions; private readonly uint _maxConnections; private uint _waitingConnections; - - public bool IsConnected => _sessions.IsConnected; + public WebSessionProvider(PluginBase plugin, IConfigScope config) { @@ -52,15 +56,20 @@ namespace VNLib.Plugins.Sessions.VNCache //Init session provider _sessions = plugin.GetOrCreateSingleton(); - } - private SessionHandle PostProcess(WebSession? session) - { - return session == null ? SessionHandle.Empty : new SessionHandle(session, OnSessionReleases); + ILogProvider logger = plugin.Log.CreateScope("WEB-SESSIONS"); + + logger.Information("Session provider loaded"); } - private ValueTask OnSessionReleases(ISession session, IHttpEvent entity) => _sessions.ReleaseSessionAsync((WebSession)session, entity); + /* + * This is a dynamic method captured by the session loader to determine if the + * current session provider can process the incoming request. + */ + public bool CanProcess(IHttpEvent entity) => _sessions.IsConnected; + + /// public ValueTask GetSessionAsync(IHttpEvent entity, CancellationToken cancellationToken) { //Limit max number of waiting clients and make sure were connected @@ -88,6 +97,10 @@ namespace VNLib.Plugins.Sessions.VNCache } } + private SessionHandle PostProcess(WebSession? session) => session == null ? SessionHandle.Empty : new (session, OnSessionReleases); + + private ValueTask OnSessionReleases(ISession session, IHttpEvent entity) => _sessions.ReleaseSessionAsync((WebSession)session, entity); + private async Task AwaitAsyncGet(ValueTask async) { //Inct wait count while async waiting -- cgit