From a8510fb835dcc5e1142d700164ce5a4bd44e1a25 Mon Sep 17 00:00:00 2001 From: vman Date: Sun, 30 Oct 2022 02:28:12 -0400 Subject: Add project files. --- Plugins/SessionProvider/GlobalCache.cs | 141 +++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 Plugins/SessionProvider/GlobalCache.cs (limited to 'Plugins/SessionProvider/GlobalCache.cs') diff --git a/Plugins/SessionProvider/GlobalCache.cs b/Plugins/SessionProvider/GlobalCache.cs new file mode 100644 index 0000000..ff16f47 --- /dev/null +++ b/Plugins/SessionProvider/GlobalCache.cs @@ -0,0 +1,141 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +//using VNLib.Data.Caching; +//using VNLib.Net.Messaging.FBM.Client; +//using VNLib.Net.Messaging.FBM.Client.Exceptions; + + +namespace VNLib.Plugins.Essentials.Sessions +{ + /*internal class GlobalCache : IGlobalCacheProvider + { + private readonly FBMClient Client; + private readonly TimeSpan OperationTimeout; + + public GlobalCache(FBMClient cacheProvider, TimeSpan cancellation) + { + this.Client = cacheProvider; + this.OperationTimeout = cancellation; + } + + //If the wait handle will block, the client is connected + bool IGlobalCacheProvider.IsConnected => !Client.ConnectionStatusHandle.WaitOne(0); + + async Task IGlobalCacheProvider.DeleteAsync(string key) + { + if (OperationTimeout > TimeSpan.Zero && OperationTimeout < TimeSpan.MaxValue) + { + CancellationTokenSource cts = new(OperationTimeout); + try + { + //Delete value + await Client.DeleteObjectAsync(key, cts.Token); + } + catch (FBMException fbm) + { + //Catch fbm excpetions and wrap them in global cache exception + throw new GlobalCacheException("Failed to delete cache record, see inner exception", fbm); + } + catch (OperationCanceledException) + { + throw new TimeoutException("The operation has been cancelled, due to a timeout"); + } + finally + { + cts.Dispose(); + } + } + else + { + try + { + //Delete value + await Client.DeleteObjectAsync(key); + } + catch (FBMException fbm) + { + //Catch fbm excpetions and wrap them in global cache exception + throw new GlobalCacheException("Failed to delete cache record, see inner exception", fbm); + } + } + } + + async Task IGlobalCacheProvider.GetAsync(string key) + { + if (OperationTimeout > TimeSpan.Zero && OperationTimeout < TimeSpan.MaxValue) + { + CancellationTokenSource cts = new(OperationTimeout); + try + { + //Try to get the value + return await Client.GetObjectAsync(key, cts.Token); + } + catch (FBMException fbm) + { + //Catch fbm excpetions and wrap them in global cache exception + throw new GlobalCacheException("Failed to delete cache record, see inner exception", fbm); + } + catch (OperationCanceledException) + { + throw new TimeoutException("The operation has been cancelled, due to a timeout"); + } + finally + { + cts.Dispose(); + } + } + else + { + try + { + //Try to get the value + return await Client.GetObjectAsync(key); + } + catch (FBMException fbm) + { + //Catch fbm excpetions and wrap them in global cache exception + throw new GlobalCacheException("Failed to delete cache record, see inner exception", fbm); + } + } + } + + async Task IGlobalCacheProvider.SetAsync(string key, T value) + { + if (OperationTimeout > TimeSpan.Zero && OperationTimeout < TimeSpan.MaxValue) + { + CancellationTokenSource cts = new(OperationTimeout); + try + { + await Client.AddOrUpdateObjectAsync(key, null, value, cts.Token); + } + catch (FBMException fbm) + { + //Catch fbm excpetions and wrap them in global cache exception + throw new GlobalCacheException("Failed to delete cache record, see inner exception", fbm); + } + catch (OperationCanceledException) + { + throw new TimeoutException("The operation has been cancelled, due to a timeout"); + } + finally + { + cts.Dispose(); + } + } + else + { + try + { + await Client.AddOrUpdateObjectAsync(key, null, value); + } + catch (FBMException fbm) + { + //Catch fbm excpetions and wrap them in global cache exception + throw new GlobalCacheException("Failed to delete cache record, see inner exception", fbm); + } + } + } + }*/ +} -- cgit