aboutsummaryrefslogtreecommitdiff
path: root/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-11-02 01:50:06 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2023-11-02 01:50:06 -0400
commit9ddece0eac4dc3718c4f9279b4695d645a3e3cef (patch)
tree85f24fe1ee6f3845ef5bbb390530ea7e8042bbf2 /libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs
parent43c9196b01799e334bde92e892f0bac47759901a (diff)
also carried away
Diffstat (limited to 'libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs')
-rw-r--r--libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs31
1 files changed, 22 insertions, 9 deletions
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<WebSessionStore>();
- }
- 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;
+
+ ///<inheritdoc/>
public ValueTask<SessionHandle> 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<SessionHandle> AwaitAsyncGet(ValueTask<WebSession?> async)
{
//Inct wait count while async waiting