diff options
Diffstat (limited to 'Plugins/SessionProvider/SessionClientEntryPoint.cs')
-rw-r--r-- | Plugins/SessionProvider/SessionClientEntryPoint.cs | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/Plugins/SessionProvider/SessionClientEntryPoint.cs b/Plugins/SessionProvider/SessionClientEntryPoint.cs deleted file mode 100644 index f429831..0000000 --- a/Plugins/SessionProvider/SessionClientEntryPoint.cs +++ /dev/null @@ -1,148 +0,0 @@ -/* -* Copyright (c) 2022 Vaughn Nugent -* -* Library: VNLib -* Package: SessionProvider -* File: SessionClientEntryPoint.cs -* -* SessionClientEntryPoint.cs is part of SessionProvider which is part of the larger -* VNLib collection of libraries and utilities. -* -* SessionProvider is free software: you can redistribute it and/or modify -* it under the terms of the GNU Affero General Public License as -* published by the Free Software Foundation, either version 3 of the -* License, or (at your option) any later version. -* -* SessionProvider is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU Affero General Public License for more details. -* -* You should have received a copy of the GNU Affero General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ - -using System; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using System.Collections.Generic; - -using VNLib.Net.Http; -using VNLib.Utils.Logging; -using VNLib.Plugins.Extensions.Loading; -using VNLib.Plugins.Essentials.Sessions.Runtime; - -namespace VNLib.Plugins.Essentials.Sessions -{ - /// <summary> - /// The implementation type for dynamic loading of unified session providers - /// </summary> - public sealed class SessionClientEntryPoint : PluginBase, ISessionProvider - { - public override string PluginName => "Essentials.Sessions"; - - - private readonly List<AssemblyLoader<IRuntimeSessionProvider>> ProviderLoaders = new(); - - private IRuntimeSessionProvider[] ProviderArray = Array.Empty<IRuntimeSessionProvider>(); - - - ValueTask<SessionHandle> ISessionProvider.GetSessionAsync(IHttpEvent entity, CancellationToken token) - { - //Loop through providers - for (int i = 0; i < ProviderArray.Length; i++) - { - //Check if provider can process the entity - if (ProviderArray[i].CanProcess(entity)) - { - //Get session - return ProviderArray[i].GetSessionAsync(entity, token); - } - } - - //Return empty session - return new ValueTask<SessionHandle>(SessionHandle.Empty); - } - - protected override void OnLoad() - { - try - { - Log.Verbose("Loading all specified session providers"); - - //Get all provider names - IEnumerable<string> providerAssemblyNames = PluginConfig.GetProperty("provider_assemblies") - .EnumerateArray() - .Where(s => s.GetString() != null) - .Select(s => s.GetString()!); - - - foreach(string asm in providerAssemblyNames) - { - Log.Verbose("Loading {dll} session provider", asm); - - //Attempt to load provider - AssemblyLoader<IRuntimeSessionProvider> prov = this.LoadAssembly<IRuntimeSessionProvider>(asm); - - //Create localized log - LocalizedLogProvider log = new(Log, $"{Path.GetFileName(asm)}"); - - //Try to load the websessions - prov.Resource.Load(this, log); - - //Add provider to list - ProviderLoaders.Add(prov); - } - - if(ProviderLoaders.Count > 0) - { - //Create array for searching for providers - ProviderArray = ProviderLoaders.Select(s => s.Resource).ToArray(); - - Log.Information("Loaded {count} session providers", ProviderArray.Length); - } - else - { - Log.Information("No session providers loaded"); - } - - Log.Information("Plugin loaded"); - } - catch (KeyNotFoundException knf) - { - //Dispose providers - ProviderLoaders.ForEach(s => s.Dispose()); - - Log.Warn("Plugin configuration was missing required variables {var}", knf.Message); - } - catch - { - //Dispose providers - ProviderLoaders.ForEach(s => s.Dispose()); - throw; - } - } - - protected override void OnUnLoad() - { - //Clear array - ProviderArray = Array.Empty<IRuntimeSessionProvider>(); - - //Cleanup assemblies - ProviderLoaders.ForEach(p => p.Dispose()); - ProviderLoaders.Clear(); - - Log.Information("Plugin unloaded"); - } - - protected override void ProcessHostCommand(string cmd) - { - if (!this.IsDebug()) - { - return; - } - } - } -} |