示例#1
0
        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);
        }
示例#2
0
        private void loadPlugins()
        {
            libraries        = GetAssembliesFromDirectory(Environment.LibrariesDirectory);
            pluginAssemblies = LoadAssembliesFromDirectory(Environment.PluginsDirectory);
            List <Type> pluginImplemenations = RocketHelper.GetTypesFromInterface(pluginAssemblies, "IRocketPlugin");

            foreach (Type pluginType in pluginImplemenations)
            {
                GameObject plugin = new GameObject(pluginType.Name, pluginType);
                DontDestroyOnLoad(plugin);
                plugins.Add(plugin);
            }
            OnPluginsLoaded.TryInvoke();
        }
示例#3
0
        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());
        }
示例#4
0
        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);
        }
        private void loadPlugins()
        {
            libraries = FindAssembliesInDirectory(Environment.LibrariesDirectory);
            foreach (KeyValuePair <AssemblyName, string> pair in FindAssembliesInDirectory(Environment.PluginsDirectory))
            {
                if (!libraries.ContainsKey(pair.Key))
                {
                    libraries.Add(pair.Key, pair.Value);
                }
            }

            pluginAssemblies = LoadAssembliesFromDirectory(Environment.PluginsDirectory);
            List <Type> pluginImplemenations = RocketHelper.GetTypesFromInterface(pluginAssemblies, "IRocketPlugin");

            foreach (Type pluginType in pluginImplemenations)
            {
                GameObject plugin = new GameObject(pluginType.Name, pluginType);
                DontDestroyOnLoad(plugin);
                plugins.Add(plugin);
            }
            OnPluginsLoaded.TryInvoke();
        }
示例#6
0
        internal void loadPlugins()
        {
            libraries = GetAssembliesFromDirectory(Environment.LibrariesDirectory);
            foreach (KeyValuePair <string, string> pair in GetAssembliesFromDirectory(Environment.PluginsDirectory))
            {
                if (!libraries.ContainsKey(pair.Key))
                {
                    libraries.Add(pair.Key, pair.Value);
                }
            }

            pluginAssemblies = LoadAssembliesFromDirectory(Environment.PluginsDirectory);
            List <Type> pluginImplemenations = RocketHelper.NewGetTypesFromInterface(pluginAssemblies, typeof(IRocketPlugin));

            foreach (Type pluginType in pluginImplemenations)
            {
                GameObject plugin = new GameObject(pluginType.Name, pluginType);
                UnityEngine.Object.DontDestroyOnLoad(plugin);
                plugins.Add(plugin);
            }
            OnPluginsLoaded.TryInvoke();
        }
示例#7
0
 internal static void RunPluginsLoaded() => OnPluginsLoaded?.Invoke();
 public void RunPluginsLoaded() => OnPluginsLoaded?.Invoke();
示例#9
0
        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();
        }