Enable loading plugins on server startup

This commit is contained in:
ChronosX88 2020-07-18 13:34:32 +04:00
parent 394f9ab908
commit 5be00542b8
2 changed files with 23 additions and 13 deletions

View File

@ -24,6 +24,8 @@ namespace Zirconium.Core
Router = new Router(this);
HostModuleAPI = new HostModuleAPI(this, Router);
AuthManager = new AuthManager(this);
ModuleManager = new ModuleManager(HostModuleAPI);
ModuleManager.LoadModules(config.PluginsDirPath, config.EnabledPlugins);
Log.Info("Zirconium is initialized successfully");
}

View File

@ -23,8 +23,13 @@ namespace Zirconium.Core.Modules
_moduleMutex = new Mutex();
}
public void LoadModules(string folderPath) {
public void LoadModules(string folderPath, string[] enabledModules)
{
var loaders = new List<PluginLoader>();
if (folderPath == "") {
Logging.Log.Warning("Plugins folder path is not specified!");
return;
}
// create module loaders
foreach (var dir in Directory.GetDirectories(folderPath))
@ -33,18 +38,21 @@ namespace Zirconium.Core.Modules
var pluginDll = Path.Combine(dir, dirName + ".dll");
if (File.Exists(pluginDll))
{
var loader = PluginLoader.CreateFromAssemblyFile(
pluginDll,
sharedTypes: new[] {
typeof(IModuleAPI),
typeof(IHostModuleAPI),
typeof(IC2SMessageHandler),
typeof(ICoreEventHandler),
typeof(BaseMessage),
typeof(CoreEvent)
}
);
loaders.Add(loader);
if (enabledModules.Where(x => x == pluginDll).FirstOrDefault() != null)
{
var loader = PluginLoader.CreateFromAssemblyFile(
pluginDll,
sharedTypes: new[] {
typeof(IModuleAPI),
typeof(IHostModuleAPI),
typeof(IC2SMessageHandler),
typeof(ICoreEventHandler),
typeof(BaseMessage),
typeof(CoreEvent)
}
);
loaders.Add(loader);
}
}
}