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); Router = new Router(this);
HostModuleAPI = new HostModuleAPI(this, Router); HostModuleAPI = new HostModuleAPI(this, Router);
AuthManager = new AuthManager(this); AuthManager = new AuthManager(this);
ModuleManager = new ModuleManager(HostModuleAPI);
ModuleManager.LoadModules(config.PluginsDirPath, config.EnabledPlugins);
Log.Info("Zirconium is initialized successfully"); Log.Info("Zirconium is initialized successfully");
} }

View File

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