From 44f25885437d6d09ea04cf74db4556df95821d56 Mon Sep 17 00:00:00 2001 From: vnugent Date: Fri, 16 Jun 2023 13:33:43 -0400 Subject: Some tcp buf, minor bits and bobs --- lib/Plugins.PluginBase/src/IPluginTaskObserver.cs | 46 +++++++++++++++++++++++ lib/Plugins.PluginBase/src/PluginBase.cs | 17 +++------ 2 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 lib/Plugins.PluginBase/src/IPluginTaskObserver.cs (limited to 'lib/Plugins.PluginBase') diff --git a/lib/Plugins.PluginBase/src/IPluginTaskObserver.cs b/lib/Plugins.PluginBase/src/IPluginTaskObserver.cs new file mode 100644 index 0000000..df75614 --- /dev/null +++ b/lib/Plugins.PluginBase/src/IPluginTaskObserver.cs @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2023 Vaughn Nugent +* +* Library: VNLib +* Package: VNLib.Plugins.PluginBase +* File: IPluginTaskObserver.cs +* +* IPluginTaskObserver.cs is part of VNLib.Plugins.PluginBase which is part of the larger +* VNLib collection of libraries and utilities. +* +* VNLib.Plugins.PluginBase 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.PluginBase 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.PluginBase. If not, see http://www.gnu.org/licenses/. +*/ + +using System.Threading.Tasks; + +namespace VNLib.Plugins +{ + /// + /// Represents an plugin task observer to observe background operations + /// + public interface IPluginTaskObserver + { + /// + /// Adds a task to the observation list + /// + /// The task to observe + void ObserveTask(Task task); + + /// + /// Removes a task from the task observation list + /// + /// The task to remove + void RemoveObservedTask(Task task); + } +} \ No newline at end of file diff --git a/lib/Plugins.PluginBase/src/PluginBase.cs b/lib/Plugins.PluginBase/src/PluginBase.cs index 37dafc6..d2564a6 100644 --- a/lib/Plugins.PluginBase/src/PluginBase.cs +++ b/lib/Plugins.PluginBase/src/PluginBase.cs @@ -38,11 +38,12 @@ using VNLib.Plugins.Attributes; namespace VNLib.Plugins { + /// /// Provides a concrete base class for instances using the Serilog logging provider. /// Accepts the standard plugin configuration constructors /// - public abstract class PluginBase : MarshalByRefObject, IPlugin + public abstract class PluginBase : MarshalByRefObject, IPlugin, IPluginTaskObserver { /* * CTS exists for the life of the plugin, its resources are never disposed @@ -90,9 +91,7 @@ namespace VNLib.Plugins /// public JsonElement PluginConfig => Configuration.RootElement.GetProperty(GetType().Name); - /// /// - /// public abstract string PluginName { get; } /// @@ -340,10 +339,7 @@ namespace VNLib.Plugins } } - /// - /// Adds a task to the observation list - /// - /// The task to observe + /// public void ObserveTask(Task task) { lock (DeferredTasks) @@ -352,10 +348,7 @@ namespace VNLib.Plugins } } - /// - /// Removes a task from the task observation list - /// - /// The task to remove + /// public void RemoveObservedTask(Task task) { lock (DeferredTasks) @@ -379,10 +372,12 @@ namespace VNLib.Plugins /// /// protected abstract void OnLoad(); + /// /// Invoked when all endpoints have been removed from service. All managed and unmanged resources should be released. /// protected abstract void OnUnLoad(); + /// /// Invoked before called by the host app to get all endpoints /// for the current plugin -- cgit