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/README.md | 81 +++++---------------------------------------------- 1 file changed, 7 insertions(+), 74 deletions(-) (limited to 'lib/Plugins') diff --git a/lib/Plugins/README.md b/lib/Plugins/README.md index 1f08b6f..a4f4fc0 100644 --- a/lib/Plugins/README.md +++ b/lib/Plugins/README.md @@ -4,81 +4,14 @@ A compact and simple contract interface and supporting types for runtime loadabl **This library has no internal or external dependencies** -#### Builds -Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my [website](https://www.vaughnnugent.com/resources/software). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file. +### Builds +Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file. -### Usage with VNLib.Plugins.Essentials. +### Docs and Guides +Documentation, specifications, and setup guides are available on my website. -The **VNLib.Plugins.Essentials** library discovers IEndpoint types at runtime inside `EventProcessor` types. For correct usage with the `EventProcessor` class you should implement the interface `IVirtualEndpoint` otherwise your endpoint will not get loaded. +[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Plugins) +[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core) -All plugins that intend to be loaded with the **VNLib.Plugins.Essentials.ServiceStack** application library, should conform to these signatures. The ServiceStack library also implements the additional lifecycle hooks if you choose to implement them. - -## Breakdown - -The `IPlugin` interface: a simple contract -``` programming language C# - //Should be public and concrete for runtime loading - public sealed class MyPlugin : IPluign - { - private readonly LinkedList _endpoints; - - public MyPlugin() - { - _endpoints = new LinkedList(); - } - - public string PluginName { get; } = "MyPlugin"; - - public void Load() - { - //Load plugin, build endpoints - IEndpoint ep1 = new MyEndpoint(); - IEndpoint ep2 = new MyEndpoint(); - //Add endpoints - _endpoints.AddLast(ep1); - _endpoints.AddLast(ep2); - } - - public void Unload() - { - //Unload resources - } - - public IEnumerable GetEndpoints() - { - //Return the endpoints for this plugin - return _endpoints; - } - - ... Additional lifecycle methods using the Attributes namespace - } -``` - -The `IEndpoint` interface: represents a resource location in a url search path -``` programming language C# - //Should be public and concrete - internal class MyEndpoint : IEndpoint - { - public string Path { get; } = "/my/resource"; - } -``` - -A step farther is the `IVirtualEndpoint` which processes an entity of the specified type, and implements the IEndpoint interface: -_This interface was built for usage with the `IHttpEvent` interface as the entity type._ -``` - //Should be public and concrete - internal class MyVirtualEndpoint : IVirtualEndpoint - { - public string Path { get; } = "/my/resource"; - - //process HTTP connection - public ValutTask Process(IHttpEvent entity) - { - //Process the entity - return VfReturnType.ProcessAsFile; - } - } -``` ## License -The software in this repository is licensed under the GNU GPL version 2.0 (or any later version). -See the LICENSE files for more information. \ No newline at end of file +The software in this repository is licensed under the GNU GPL version 2.0 (or any later version). See the LICENSE files for more information. \ No newline at end of file -- cgit