Пример #1
0
        public string[] GetAllPluginNames()
        {
            config = (PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");
            PluginConfigurationElement pe = new PluginConfigurationElement();
            ArrayList ps = new ArrayList();

            for (Int32 i = 0; i < config.PluginCollection.Count; i++)
            {
                pe = config.PluginCollection[i];
                ps.Add(pe.Name);
            }
            return((String[])ps.ToArray(typeof(String)));
        }
Пример #2
0
        public bool Contains(string pluginName)
        {
            config = (PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");
            PluginConfigurationElement pe = new PluginConfigurationElement();
            List <String> ps = new List <string>();

            for (Int32 i = 0; i < config.PluginCollection.Count; i++)
            {
                pe = config.PluginCollection[i];
                ps.Add(pe.Name);
            }
            return(ps.Contains(pluginName));
        }
Пример #3
0
        public bool LoadPlugin(string pluginName)
        {
            Boolean result = false;

            config = (PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");
            PluginConfigurationElement pe = new PluginConfigurationElement();

            String path = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "";

            try
            {
                for (Int32 i = 0; i < config.PluginCollection.Count; i++)
                {
                    pe = config.PluginCollection[i];
                    if (pe.Name == pluginName)
                    {
                        Assembly      assembly = Assembly.LoadFile(path + "\\" + pe.Assembly);
                        Type          type     = assembly.GetType(pe.Type);
                        IServerPlugin instance = (IServerPlugin)Activator.CreateInstance(type);
                        instance.ServerApplication = application;
                        instance.Load();
                        plugins[pluginName] = instance;
                        result = true;
                        break;
                    }
                }
                if (!result)
                {
                    application.WriteMessage(string.Format("未找到插件{0}!", pluginName));
                }
            }
            catch (Exception e)
            {
                application.WriteMessage(string.Format("出现错误:{0}", e.Message));
                result = false;
            }
            return(result);
        }
Пример #4
0
        public void LoadAllPlugin()
        {
            PluginConfigurationElement pe = new PluginConfigurationElement();

            config = (PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");
            if (config == null)
            {
                application.WriteMessage("未配置插件文件!");
                return;
            }
            String path = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "";

            try
            {
                for (Int32 i = 0; i < config.PluginCollection.Count; i++)
                {
                    pe = config.PluginCollection[i];
                    if (File.Exists(path + "\\" + pe.Assembly))
                    {
                        Assembly      assembly = Assembly.LoadFile(path + "\\" + pe.Assembly);
                        Type          type     = assembly.GetType(pe.Type);
                        IServerPlugin instance = (IServerPlugin)Activator.CreateInstance(type);
                        instance.ServerApplication = application;
                        instance.Load();
                        plugins[pe.Name] = instance;
                    }
                    else
                    {
                        application.WriteMessage(string.Format("服务器端插件文件{0}不存在!", pe.Assembly));
                    }
                }
            }
            catch (Exception e)
            {
                application.WriteMessage(string.Format("出现错误:{0}", e.Message));
            }
        }
Пример #5
0
        public static void InitialisePlugins(LumbricusConfiguration config)
        {
            logger.Info("Initialising plugins");
            string pluginsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins");

            // Add the plugin initialiser
            AppDomain.CurrentDomain.AssemblyLoad += PluginInitializer;

            PluginConfigurationElement plugin = null;

            // TODO: This bit needs DRYing up.
            // TODO: TODO: And probably moving to somewhere in LumbricusShared?
            plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == "AutoRejoinPlugin");
            if (plugin == null)
            {
                logger.Trace("Skipping core plugin `AutoRejoinPlugin` as it is not mentioned in the configuration");
            }
            else if (!plugin.Enabled)
            {
                logger.Trace("Skipping core plugin `AutoRejoinPlugin` as it's disabled in the configuration");
            }
            else
            {
                LumbricusConfiguration.AddPlugin(new AutoRejoinPlugin());
            }

            plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == "HelpPlugin");
            if (plugin == null)
            {
                logger.Trace("Skipping core plugin `HelpPlugin` as it is not mentioned in the configuration");
            }
            else if (!plugin.Enabled)
            {
                logger.Trace("Skipping core plugin `HelpPlugin` as it's disabled in the configuration");
            }
            else
            {
                LumbricusConfiguration.AddPlugin(new HelpPlugin());
            }

            plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == "SeenPlugin");
            if (plugin == null)
            {
                logger.Trace("Skipping core plugin `SeenPlugin` as it is not mentioned in the configuration");
            }
            else if (!plugin.Enabled)
            {
                logger.Trace("Skipping core plugin `SeenPlugin` as it's disabled in the configuration");
            }
            else
            {
                LumbricusConfiguration.AddPlugin(new SeenPlugin());
            }

            plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == "TrackBanPlugin");
            if (plugin == null)
            {
                logger.Trace("Skipping core plugin `TrackBanPlugin` as it is not mentioned in the configuration");
            }
            else if (!plugin.Enabled)
            {
                logger.Trace("Skipping core plugin `TrackBanPlugin` as it's disabled in the configuration");
            }
            else
            {
                LumbricusConfiguration.AddPlugin(new TrackBanPlugin());
            }

            plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == "TrackKickPlugin");
            if (plugin == null)
            {
                logger.Trace("Skipping core plugin `TrackKickPlugin` as it is not mentioned in the configuration");
            }
            else if (!plugin.Enabled)
            {
                logger.Trace("Skipping core plugin `TrackKickPlugin` as it's disabled in the configuration");
            }
            else
            {
                LumbricusConfiguration.AddPlugin(new TrackKickPlugin());
            }

            plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == "TrackUserPlugin");
            if (plugin == null)
            {
                logger.Trace("Skipping core plugin `TrackUserPlugin` as it is not mentioned in the configuration");
            }
            else if (!plugin.Enabled)
            {
                logger.Trace("Skipping core plugin `TrackUserPlugin` as it's disabled in the configuration");
            }
            else
            {
                LumbricusConfiguration.AddPlugin(new TrackUserPlugin());
            }

            foreach (string dll in Directory.GetFiles(pluginsPath, "*.dll", SearchOption.TopDirectoryOnly))
            {
                try {
                    string pluginFileName = Path.GetFileNameWithoutExtension(dll);
                    plugin = config.PluginConfigs.SingleOrDefault(x => x.Name == pluginFileName);
                    if (plugin == null)
                    {
                        logger.Trace("Skipping assembly `{0}` as it is not mentioned in the configuration", dll);
                        continue;
                    }
                    if (!plugin.Enabled)
                    {
                        logger.Trace("Skipping assembly `{0}` as it is disabled in the configuration", dll);
                        continue;
                    }
                    Assembly loadedAssembly = Assembly.LoadFile(dll);
                    logger.Trace("Loaded plugin `{0}`", loadedAssembly.GetName());
                } catch (FileLoadException e) {
                    logger.Trace("Plugin file `{0}` has already been loaded? O.o", dll);
                    logger.Trace(e);
                } catch (BadImageFormatException e) {
                    logger.Trace("`{0}` is not a valid Lumbricus plugin file.", dll);
                    throw e;
                }
            }

            // Remove the plugin initialiser as it's no longer needed
            AppDomain.CurrentDomain.AssemblyLoad -= PluginInitializer;

            logger.Info("{0} plugins enabled", LumbricusConfiguration.Plugins.Count);
        }