public void LoadPlugins() { LogFactory.SystemLogger.Info("开始载入插件"); Plugins.Clear(); DirectoryInfo pluginRootFolder = new DirectoryInfo(PluginFolder); if (pluginRootFolder.Exists) { var pluginLoader = new PluginLoader <IKancollePlugin>(); var aiFolders = (from di in pluginRootFolder.GetDirectories() select di.FullName).ToList(); var collection = pluginLoader.LoadPlugins(aiFolders); if (collection.Count > 0) { foreach (var pluginDll in collection) { foreach (var plugin in pluginDll.PluginObjects) { if (plugin.Name == null || plugin.Name == "") { LogFactory.SystemLogger.Error($"插件文件'{pluginDll.Name}'中的类型{plugin.GetType().FullName}'载入失败,插件名'Name'不能为空"); continue; } var samePlugin = Plugins.Find(p => p.Name == plugin.Name); if (samePlugin != null) { IKancollePlugin p; if (samePlugin.Version > plugin.Version) { p = samePlugin; } else { p = plugin; } LogFactory.SystemLogger.Error($"存在多个插件'{plugin.Name}',将只保留版本最高的一个[Version={p.Version}]"); Plugins.Remove(samePlugin); Plugins.Add(p); } else { Plugins.Add(plugin); LogFactory.SystemLogger.Info($"插件'{plugin.Name}'载入成功"); } } } } } LogFactory.SystemLogger.Info($"插件载入完毕,共载入{Plugins.Count}个插件"); OnPluginsLoaded?.Invoke(Plugins); }
public void Start(string pluginsPath = null) { if (pluginsPath == null) { pluginsPath = Directory.GetCurrentDirectory() + "\\plugins"; } var plugins = pluginManager.LoadPlugins(pluginsPath); OnPluginsLoaded?.Invoke(this, new PluginEventArgs(plugins)); OnCurrentSongChanged += pluginManager.OnCurrentSongChanged; OnStreamUpdate += pluginManager.OnStreamUpdate; OnStreamOver += pluginManager.OnStreamOver; Running = true; runningTask = Task.Run(() => GetHttpStream()); }
public void Start(string pluginsPath = null) { if (string.IsNullOrEmpty(Url)) { Radio.Log("The specified Url is empty.", this); return; } if (pluginsPath == null) { pluginsPath = Directory.GetCurrentDirectory() + "\\plugins"; } var plugins = pluginManager.LoadPlugins(pluginsPath); OnPluginsLoaded?.Invoke(this, new PluginEventArgs(plugins)); OnCurrentSongChanged += pluginManager.OnCurrentSongChanged; OnStreamStart += pluginManager.OnStreamStart; OnStreamUpdate += pluginManager.OnStreamUpdate; OnStreamOver += pluginManager.OnStreamOver; Running = true; runningTask = Task.Run(GetHttpStreamAsync); }
internal static void RunPluginsLoaded() => OnPluginsLoaded?.Invoke();
public void RunPluginsLoaded() => OnPluginsLoaded?.Invoke();
public void LoadPlugins() { MakeSuperSureCriticalPluginsAreEnabled(); PurgeDuplicateEnabledPlugins(); Log.Write(Log.Type.PLUGIN, "Reloading plugins for guild " + _parentHandler.GetGuild().Name); OnPrePluginsLoaded?.Invoke(); Filter <string> filter = new Filter <string>(x => _enabledPlugins.GetValue().Any(y => NameMatches(x, y)), x => ContainsDependencies(_enabledPlugins.GetValue(), x)); string[] toLoad = PluginLoader.GetPlugins().Select(x => Plugin.GetFullName(x)).ToArray(); toLoad = filter.FilterModules(toLoad).ToArray(); Log.Write(Log.Type.PLUGIN, "Loading plugins: " + string.Join(',', toLoad)); foreach (string name in toLoad) { Type pluginType = PluginLoader.GetPlugin(name); if (pluginType == null) { Log.Write(Log.Type.WARNING, $"Attempted to instantiate unloaded/unknown plugin type {name}"); } else { Log.Plugin($"Instantiating plugin '{Plugin.GetVersionedFullName(pluginType)}'."); IPlugin plugin = AssemblyLoader.Instantiate <IPlugin>(pluginType); _activePlugins.Add(plugin); } } bool initError = false; foreach (IPlugin plugin in _activePlugins) { try { Log.Write(Log.Type.PLUGIN, "Pre-initializing plugin " + Plugin.GetVersionedFullName(plugin.GetType())); plugin.PreInitialize(_parentHandler); } catch (Exception exc) { ReportInitError("pre-initialization", new PluginInitializationException(Plugin.GetName(plugin.GetType()), exc), plugin, ref initError); } } foreach (IPlugin plugin in _activePlugins) { try { Log.Write(Log.Type.PLUGIN, "Initializing plugin " + Plugin.GetVersionedFullName(plugin.GetType())); plugin.Initialize(); } catch (Exception exc) { ReportInitError("initialization", new PluginInitializationException(Plugin.GetName(plugin.GetType()), exc), plugin, ref initError); } } foreach (IPlugin plugin in _activePlugins) { try { Log.Write(Log.Type.PLUGIN, "Post-initializing plugin " + Plugin.GetVersionedFullName(plugin.GetType())); plugin.PostInitialize(); } catch (Exception exc) { ReportInitError("post-initialization", new PluginInitializationException(Plugin.GetName(plugin.GetType()), exc), plugin, ref initError); } OnPluginLoaded?.Invoke(plugin); } if (initError) { ReloadPlugins(); } OnPluginsLoaded?.Invoke(); }