aboutsummaryrefslogtreecommitdiff
path: root/lib/VNLib.Plugins.Extensions.VNCache/src/VNCacheExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.VNCache/src/VNCacheExtensions.cs')
-rw-r--r--lib/VNLib.Plugins.Extensions.VNCache/src/VNCacheExtensions.cs108
1 files changed, 0 insertions, 108 deletions
diff --git a/lib/VNLib.Plugins.Extensions.VNCache/src/VNCacheExtensions.cs b/lib/VNLib.Plugins.Extensions.VNCache/src/VNCacheExtensions.cs
deleted file mode 100644
index 5f58142..0000000
--- a/lib/VNLib.Plugins.Extensions.VNCache/src/VNCacheExtensions.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-* Copyright (c) 2022 Vaughn Nugent
-*
-* Library: VNLib
-* Package: VNLib.Plugins.Extensions.VNCache
-* File: VNCacheExtensions.cs
-*
-* VNCacheExtensions.cs is part of VNLib.Plugins.Extensions.VNCache which is part of the larger
-* VNLib collection of libraries and utilities.
-*
-* VNLib.Plugins.Extensions.VNCache 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.
-*
-* VNLib.Plugins.Extensions.VNCache 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.Text.Json;
-
-using VNLib.Utils.Logging;
-using VNLib.Data.Caching;
-using VNLib.Data.Caching.Extensions;
-using VNLib.Plugins.Extensions.Loading;
-
-namespace VNLib.Plugins.Extensions.VNCache
-{
- /// <summary>
- /// Contains extension methods for aquiring a Plugin managed
- /// global cache provider.
- /// </summary>
- public static class VNCacheExtensions
- {
- /// <summary>
- /// Loads the shared cache provider for the current plugin
- /// </summary>
- /// <param name="pbase"></param>
- /// <param name="localized">A localized log provider to write cache logging information to</param>
- /// <returns>The shared <see cref="IGlobalCacheProvider"/> </returns>
- /// <remarks>
- /// The returned instance, background work, logging, and its lifetime
- /// are managed by the current plugin. Beware when calling this method
- /// network connections may be spawend and managed in the background by
- /// this library.
- /// </remarks>
- public static VnCacheClient GetGlobalCache(this PluginBase pbase, ILogProvider? localized = null)
- => LoadingExtensions.GetOrCreateSingleton<VnCacheClient>(pbase, localized == null ? LoadCacheClient : (pbase) => LoadCacheClient(pbase, localized));
-
- private static VnCacheClient LoadCacheClient(PluginBase pbase) => LoadCacheClient(pbase, pbase.Log);
-
- private static VnCacheClient LoadCacheClient(PluginBase pbase, ILogProvider localized)
- {
- //Get config for client
- IReadOnlyDictionary<string, JsonElement> config = pbase.GetConfigForType<VnCacheClient>();
-
- //Init client
- ILogProvider? debugLog = pbase.IsDebug() ? pbase.Log : null;
- VnCacheClient client = new(debugLog);
-
- //Begin cache connections by scheduling a task on the plugin's scheduler
- _ = pbase.DeferTask(() => RunClientAsync(pbase, config, localized, client), 250);
-
- return client;
- }
-
- private static async Task RunClientAsync(PluginBase pbase, IReadOnlyDictionary<string, JsonElement> config, ILogProvider localized, VnCacheClient client)
- {
- ILogProvider Log = localized;
-
- try
- {
- //Try loading config
- await client.LoadConfigAsync(pbase, config);
-
- Log.Verbose("VNCache client configration loaded successfully");
-
- //Run and wait for exit
- await client.RunAsync(Log, pbase.UnloadToken);
- }
- catch (OperationCanceledException)
- { }
- catch (KeyNotFoundException e)
- {
- Log.Error("Missing required configuration variable for VnCache client: {0}", e.Message);
- }
- catch (FBMServerNegiationException fne)
- {
- Log.Error("Failed to negotiate connection with cache server {reason}", fne.Message);
- }
- catch (Exception ex)
- {
- Log.Error(ex, "Unhandled exception occured in background cache client listening task");
- }
- finally
- {
- client.Dispose();
- }
-
- Log.Information("Cache client exited");
- }
- }
-}