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))); }
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)); }
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); }
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)); } }
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); }