diff options
author | vnugent <public@vaughnnugent.com> | 2023-04-08 16:43:02 -0400 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2023-04-08 16:43:02 -0400 |
commit | a866d831efc95900de2326f09531a54a65f18ea2 (patch) | |
tree | e61350d7bd831311bc5180bcf00e95a4401b9113 /lib/VNLib.Plugins.Extensions.VNCache/src/RemoteCacheOperator.cs | |
parent | f56566feeeff0441ba8dd22e4ed755fab1ef7e11 (diff) |
Expose public configuration api
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.VNCache/src/RemoteCacheOperator.cs')
-rw-r--r-- | lib/VNLib.Plugins.Extensions.VNCache/src/RemoteCacheOperator.cs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/VNLib.Plugins.Extensions.VNCache/src/RemoteCacheOperator.cs b/lib/VNLib.Plugins.Extensions.VNCache/src/RemoteCacheOperator.cs new file mode 100644 index 0000000..1f0742d --- /dev/null +++ b/lib/VNLib.Plugins.Extensions.VNCache/src/RemoteCacheOperator.cs @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2023 Vaughn Nugent +* +* Library: VNLib +* Package: VNLib.Plugins.Extensions.VNCache +* File: RemoteCacheOperator.cs +* +* RemoteCacheOperator.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; +using System.Threading; +using System.Threading.Tasks; + +using VNLib.Data.Caching; +using VNLib.Plugins.Extensions.Loading; +using VNLib.Utils.Logging; + +namespace VNLib.Plugins.Extensions.VNCache +{ + /// <summary> + /// Represents a handle to a VNCache cache client, that exposes a cancellable + /// <see cref="IAsyncBackgroundWork"/> to run inside a <see cref="PluginBase"/> + /// or standlone in your own background work handler + /// </summary> + /// <remarks> + /// The background work method must be sheduled for the cache client to be + /// connected to the backing store + /// </remarks> + public sealed class RemoteCacheOperator : IAsyncBackgroundWork, IAsyncConfigurable + { + private readonly VnCacheClient _client; + private CancellationTokenSource? _tokenSource; + + internal RemoteCacheOperator(VnCacheClient client) + { + _client = client; + } + + /// <summary> + /// The configured global cache instance + /// </summary> + public IGlobalCacheProvider Cache => _client; + + ///<inheritdoc/> + ///<exception cref="ArgumentNullException"></exception> + public async Task DoWorkAsync(ILogProvider pluginLog, CancellationToken exitToken) + { + _ = pluginLog ?? throw new ArgumentNullException(nameof(pluginLog)); + + //Create cts linked to the exit token to allow user cancellation of the listener + using(_tokenSource = CancellationTokenSource.CreateLinkedTokenSource(exitToken)) + { + //Do work with linked source + await _client.DoWorkAsync(pluginLog, _tokenSource.Token) + .ConfigureAwait(false); + } + + //Remove cts + _tokenSource = null; + } + + /// <summary> + /// Cancels the background cache client listener + /// </summary> + public void CancelListener() => _tokenSource?.Cancel(); + + ///<inheritdoc/> + public Task ConfigureServiceAsync(PluginBase plugin) + { + return _client.ConfigureServiceAsync(plugin); + } + } +}
\ No newline at end of file |