add a simple plugin system
This commit is contained in:
60
Pilz.Plugins.Advanced/PluginFunctionController.cs
Normal file
60
Pilz.Plugins.Advanced/PluginFunctionController.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user