aboutsummaryrefslogtreecommitdiff
path: root/VNLib.Plugins.Extensions.Loading/Events/EventHandle.cs
diff options
context:
space:
mode:
Diffstat (limited to 'VNLib.Plugins.Extensions.Loading/Events/EventHandle.cs')
-rw-r--r--VNLib.Plugins.Extensions.Loading/Events/EventHandle.cs114
1 files changed, 0 insertions, 114 deletions
diff --git a/VNLib.Plugins.Extensions.Loading/Events/EventHandle.cs b/VNLib.Plugins.Extensions.Loading/Events/EventHandle.cs
deleted file mode 100644
index e9f3ff0..0000000
--- a/VNLib.Plugins.Extensions.Loading/Events/EventHandle.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-* Copyright (c) 2022 Vaughn Nugent
-*
-* Library: VNLib
-* Package: VNLib.Plugins.Extensions.Loading
-* File: EventHandle.cs
-*
-* EventHandle.cs is part of VNLib.Plugins.Extensions.Loading which is part of the larger
-* VNLib collection of libraries and utilities.
-*
-* VNLib.Plugins.Extensions.Loading is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published
-* by the Free Software Foundation, either version 2 of the License,
-* or (at your option) any later version.
-*
-* VNLib.Plugins.Extensions.Loading 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
-* General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with VNLib.Plugins.Extensions.Loading. If not, see http://www.gnu.org/licenses/.
-*/
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-using VNLib.Utils;
-using VNLib.Utils.Extensions;
-using VNLib.Utils.Logging;
-using VNLib.Utils.Resources;
-
-namespace VNLib.Plugins.Extensions.Loading.Events
-{
- /// <summary>
- /// Represents a handle to a scheduled event interval that is managed by the plugin but may be cancled by disposing the instance
- /// </summary>
- public class EventHandle : VnDisposeable
- {
- private readonly PluginBase _pbase;
- private readonly Timer _eventTimer;
- private readonly TimeSpan _interval;
- private readonly AsyncSchedulableCallback _callback;
-
- internal EventHandle(AsyncSchedulableCallback callback, TimeSpan interval, PluginBase pbase)
- {
- _pbase = pbase;
- _interval = interval;
- _callback = callback;
-
- //Init new timer
- _eventTimer = new(OnTimerElapsed, this, interval, interval);
-
- //Register dispose to unload token
- _ = pbase.UnloadToken.RegisterUnobserved(Dispose);
- }
-
- private void OnTimerElapsed(object? state)
- {
- //Run on task scheuler
- _ = Task.Run(RunInterval)
- .ConfigureAwait(false);
- }
-
- private async Task RunInterval()
- {
- try
- {
- await _callback(_pbase.Log, _pbase.UnloadToken);
- }
- catch (OperationCanceledException)
- {
- //unloaded
- _pbase.Log.Verbose("Interval callback canceled due to plugin unload or other event cancellation");
- }
- catch (Exception ex)
- {
- _pbase.Log.Error(ex, "Unhandled exception raised during timer callback");
- }
- }
-
- /// <summary>
- /// Invokes the event handler manually and observes the result.
- /// This method writes execptions to the plugin's default log provider.
- /// </summary>
- /// <returns></returns>
- /// <exception cref="ObjectDisposedException"></exception>
- public Task ManualInvoke()
- {
- Check();
- return Task.Run(RunInterval);
- }
-
-
- /// <summary>
- /// Pauses the event timer until the <see cref="OpenHandle"/> is released or disposed
- /// then resumes to the inital interval period
- /// </summary>
- /// <returns>A <see cref="OpenHandle"/> that restores the timer to its initial state when disposed</returns>
- /// <exception cref="ObjectDisposedException"></exception>
- public OpenHandle Pause()
- {
- Check();
- return _eventTimer.Stop(_interval);
- }
-
- ///<inheritdoc/>
- protected override void Free()
- {
- _eventTimer.Dispose();
- }
- }
-}