コード例 #1
0
        private void PluginsPluginsReloaded(object sender, EventArgs e)
        {
            plugins.Clear();
            bot.CleanPlugins();

            foreach (var pluginName in pluginManager.GetSubclasses("Huffelpuff.Plugins.AbstractPlugin"))
            {
                Log.Instance.Log("Initialize Plugin " + pluginName, Level.Info);
                var p = (AbstractPlugin)pluginManager.CreateInstance(pluginName, BindingFlags.CreateInstance, new object[] { bot });
                try
                {
                    p.Init();
                }
                catch (Exception exception)
                {
                    Log.Instance.Log(exception);
                    continue;
                }

                if (p.Ready)
                {
                    plugins.Add(p);
                }
                else
                {
                    OnPluginLoadEvent(new PluginLoadEventArgs(pluginName, PluginLoadEventType.Failed, null));
                }
            }

            foreach (var plugin in plugins)
            {
                var    assemblyParts   = GetAssemblyParts(plugin.AssemblyName);
                string assemblyVersion = assemblyParts.AssemblyVersion;
                string assemblyName    = assemblyParts.AssemblyName;

                string newAssemblyVersion;
                PluginLoadEventType loadType;
                if (oldPlugs.TryGetValue(assemblyName, out newAssemblyVersion))
                {
                    loadType = assemblyVersion != newAssemblyVersion ? PluginLoadEventType.Update : PluginLoadEventType.Reload;
                    oldPlugs.Remove(assemblyName);
                }
                else
                {
                    loadType = PluginLoadEventType.Load;
                }
                OnPluginLoadEvent(new PluginLoadEventArgs(plugin.FullName, loadType, plugin));
            }

            foreach (var s in oldPlugs)
            {
                OnPluginLoadEvent(new PluginLoadEventArgs(s.Key, PluginLoadEventType.Remove, null));
            }

            oldPlugs.Clear();
            foreach (var assemblyParts in plugins.Select(plugin => GetAssemblyParts(plugin.AssemblyName)))
            {
                oldPlugs.Add(assemblyParts.AssemblyName, assemblyParts.AssemblyVersion);
            }

            if (bot.MainBotData == null)
            {
                return;
            }

            foreach (var pluginname in bot.MainBotData.Plugin.Select(pl => pl.PluginName))
            {
                var plugin = plugins.Where(p => p.FullName == pluginname).FirstOrDefault();

                if (plugin != null)
                {
                    try
                    {
                        plugin.Activate();
                    }
                    catch (Exception exception)
                    {
                        Log.Instance.Log(exception);
                        continue;
                    }
                }
            }
        }