add a simple plugin system

This commit is contained in:
2023-11-14 14:20:26 +01:00
parent 1c4d7554e2
commit 9b7eb40cfc
20 changed files with 563 additions and 6 deletions

View File

@@ -0,0 +1,60 @@
namespace Pilz.Plugins.Advanced
{
public sealed class PluginFunctionController
{
public static PluginFunctionController Instance { get; private set; } = new();
private readonly List<PluginFunction> functions = new();
public IReadOnlyCollection<PluginFunction> Functions => functions.AsReadOnly();
public void RegisterFunction(PluginFunction function)
{
if (!functions.Contains(function))
functions.Add(function);
}
public void UnregisterFunction(PluginFunction function)
{
functions.Remove(function);
}
public IEnumerable<PluginFunction> GetFunctions(string functionType)
{
return functions.Where(n => n.Type == functionType);
}
public void ExecuteAll(string functionType)
{
foreach (var function in GetFunctions(functionType))
function.Execute();
}
public void ExecuteAll(string functionType, params object?[]? @params)
{
foreach (var function in GetFunctions(functionType))
function.Execute(@params);
}
public void ExecuteAll(string functionType, PluginFunctionParameter @params)
{
foreach (var function in GetFunctions(functionType))
function.Execute(@params);
}
public IEnumerable<object?> ExcuteAndGetResults(string functionType)
{
return GetFunctions(functionType).Select(n => n.Execute());
}
public IEnumerable<object?> ExcuteAndGetResults(string functionType, params object?[]? @params)
{
return GetFunctions(functionType).Select(n => n.Execute(@params));
}
public IEnumerable<object?> ExcuteAndGetResults(string functionType, PluginFunctionParameter @params)
{
return GetFunctions(functionType).Select(n => n.Execute(@params));
}
}
}