From 01a758941760a39b85152fccb8e6507083b8e496 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Sun, 6 Sep 2020 14:16:13 +0400 Subject: [PATCH] Implement configuration API for plugins --- sample_config.toml | 14 +++++++++++--- src/Zirconium/Core/Config.cs | 5 +++++ src/Zirconium/Core/Modules/HostModuleAPI.cs | 11 +++++++++++ .../Core/Modules/Interfaces/IHostModuleAPI.cs | 2 ++ .../HelloWorldPlugin/HelloWorldPlugin.csproj | 6 +++++- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/sample_config.toml b/sample_config.toml index 7e34df3..2f0dc6c 100644 --- a/sample_config.toml +++ b/sample_config.toml @@ -12,6 +12,14 @@ ServerID = "" # Websocket server settings [Websocket] -Host = "localhost" -Port = 8000 -Endpoint = "" \ No newline at end of file + Host = "localhost" + Port = 8000 + Endpoint = "" + +# Here you can specify settings that is exposed by plugins +# For example - [Plugins.HelloWorld] is the settings for plugin called HelloWorld +[Plugins] + [Plugins.HelloWorld] + text = "123" + [Plugins.HelloWorld.Test] + modes = ["abc"] diff --git a/src/Zirconium/Core/Config.cs b/src/Zirconium/Core/Config.cs index 8d20496..2d1c801 100644 --- a/src/Zirconium/Core/Config.cs +++ b/src/Zirconium/Core/Config.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; + namespace Zirconium.Core { public class Config @@ -16,6 +18,9 @@ namespace Zirconium.Core // Websocket server settings public Websocket Websocket { get; set; } + + // Configurations of plugins + public Dictionary Plugins { get; set; } } public class Websocket diff --git a/src/Zirconium/Core/Modules/HostModuleAPI.cs b/src/Zirconium/Core/Modules/HostModuleAPI.cs index 37f2676..a28baee 100644 --- a/src/Zirconium/Core/Modules/HostModuleAPI.cs +++ b/src/Zirconium/Core/Modules/HostModuleAPI.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System; using Newtonsoft.Json; using Zirconium.Core.Models; @@ -36,6 +37,16 @@ namespace Zirconium.Core.Modules return _app.Config.ServerID; } + public dynamic GetSettings(IModuleAPI plugin) + { + return _app.Config.Plugins.GetValueOrDefault(plugin.GetModuleUniqueName(), null); + } + + public dynamic GetSettings(string pluginName) + { + return _app.Config.Plugins.GetValueOrDefault(pluginName, null); + } + public void Hook(IC2SMessageHandler handler) { _router.AddC2SHandler(handler.GetHandlingMessageType(), handler); diff --git a/src/Zirconium/Core/Modules/Interfaces/IHostModuleAPI.cs b/src/Zirconium/Core/Modules/Interfaces/IHostModuleAPI.cs index ee0decc..7657582 100644 --- a/src/Zirconium/Core/Modules/Interfaces/IHostModuleAPI.cs +++ b/src/Zirconium/Core/Modules/Interfaces/IHostModuleAPI.cs @@ -13,5 +13,7 @@ namespace Zirconium.Core.Modules.Interfaces string[] GetServerDomains(); string GetServerID(); void SendMessage(ConnectionInfo connInfo, BaseMessage message); + dynamic GetSettings(IModuleAPI plugin); + dynamic GetSettings(string pluginName); } } \ No newline at end of file diff --git a/src/ZirconiumPluginExamples/HelloWorldPlugin/HelloWorldPlugin.csproj b/src/ZirconiumPluginExamples/HelloWorldPlugin/HelloWorldPlugin.csproj index 1b1723c..02491df 100644 --- a/src/ZirconiumPluginExamples/HelloWorldPlugin/HelloWorldPlugin.csproj +++ b/src/ZirconiumPluginExamples/HelloWorldPlugin/HelloWorldPlugin.csproj @@ -2,11 +2,15 @@ netcoreapp3.1 + false - + + runtime + + \ No newline at end of file