示例#1
0
        /// <summary>
        /// Add a plugin to the collection.
        /// </summary>
        /// <param name="path">Full file path to plugin</param>
        /// <returns>Position of plugin in collection</returns>
        /// <history>
        /// [Curtis_Beard]		07/28/2006	Created
        /// </history>
        public static int Add(string path)
        {
            PluginWrapper plugin = LoadPlugin(path);

            if (plugin != null)
            {
                return(__PluginCollection.Add(plugin));
            }

            return(-1);
        }
示例#2
0
        internal static void LockPlugins()
        {
            //所有插件(其中,DomainPlugins 在列表的前面,UIPlugins 在列表的后面。)
            _allPlugins = new PluginCollection();

            //domain plugins.
#if NET45
            var configPlugins = Configuration.Section.DomainPlugins.OfType <PluginElement>().Select(e => e.Plugin).ToArray();
#endif
#if NS2
            var configPlugins = Configuration.Section.DomainPlugins;
#endif
            if (configPlugins != null && configPlugins.Length > 0)
            {
                InitPluginsByConfig(_domainPlugins, configPlugins);
            }
            _domainPlugins.Insert(0, new Rafy.Domain.RafyDomainPlugin());
            _domainPlugins.Lock();

            foreach (var item in _domainPlugins)
            {
                _allPlugins.Add(item);
            }

            //ui plugins.
            if (_location.IsUI)
            {
#if NET45
                configPlugins = Configuration.Section.UIPlugins.OfType <PluginElement>().Select(e => e.Plugin).ToArray();
#endif
#if NS2
                configPlugins = Configuration.Section.UIPlugins;
#endif
                if (configPlugins != null && configPlugins.Length > 0)
                {
                    InitPluginsByConfig(_uiPlugins, configPlugins);
                }
                if (_location.IsWPFUI)
                {
                    _uiPlugins.Insert(0, LoadRafyPlugin("Rafy.WPF"));
                }
                _uiPlugins.Lock();

                foreach (var item in _uiPlugins)
                {
                    _allPlugins.Add(item);
                }
            }

            CheckDuplucatePlugins();

            _allPlugins.Lock();
        }
示例#3
0
        public static PluginCollection LoadCollectors()
        {
            PluginCollection loadedPlugins = new PluginCollection();

            string pluginFilter = "NodeCollector.*.dll";
            string dllDirectory = AppDomain.CurrentDomain.BaseDirectory;

            GVars.MyLog.WriteEntry(string.Format("Loading available collectors from directory {0} (filter {1})", dllDirectory, pluginFilter));

            // Search for all filtes matching the filter and try to load them
            string[] pluginFiles = Directory.GetFiles(dllDirectory, pluginFilter);
            foreach (string filename in pluginFiles)
            {
                try {
                    NodeCollector.Core.INodeCollector plugin = PluginSystem.LoadAssembly(filename);
                    loadedPlugins.Add(plugin);
                }
                catch (Exception ex)
                {
                    GVars.MyLog.WriteEntry(string.Format("Unable to load collector plugin {0}: {1}.", filename, ex.Message.ToString()), EventLogEntryType.Error, 0);
                }
            }

            // Log a list of loaded plugins to eventlog
            List <string> pluginNames = loadedPlugins.Select(x => x.GetName()).ToList();

            pluginNames.Sort();
            GVars.MyLog.WriteEntry(string.Format("Loaded plugins: {0}", string.Join(", ", pluginNames)));

            return(loadedPlugins);
        }
        /// <summary>
        /// Iterate through all the child nodes
        ///	of the XMLNode that was passed in and create instances
        ///	of the specified Types by reading the attribite values of the nodes
        ///	we use a try/Catch here because some of the nodes
        ///	might contain an invalid reference to a plugin type
        ///	</summary>
        /// <param name="parent"></param>
        /// <param name="configContext"></param>
        /// <param name="section">The XML section we will iterate against</param>
        /// <returns></returns>
        public object Create(object parent, object configContext, System.Xml.XmlNode section)
        {
            PluginCollection plugins = new PluginCollection();

            foreach (XmlNode node in section.ChildNodes)
            {
                try
                {
                    //Use the Activator class's 'CreateInstance' method
                    //to try and create an instance of the plugin by
                    //passing in the type name specified in the attribute value
                    object plugObject = Activator.CreateInstance(Type.GetType(node.Attributes["type"].Value));

                    //Cast this to an IPlugin interface and add to the collection
                    IPlugin plugin = (IPlugin)plugObject;
                    plugins.Add(plugin);
                }
                catch (Exception e)
                {
                    //Catch any exceptions
                    //but continue iterating for more plugins
                }
            }

            return(plugins);
        }
示例#5
0
        private static void InitPluginsByConfig(PluginCollection pluginList, string[] sortedPlugins)
        {
            if (sortedPlugins.Length == 0)
            {
                return;
            }

            //如果提供了配置信息,则完成按照配置中的插件列表来初始化,所以先清空该列表。
            pluginList.Clear();

            for (int i = 0, c = sortedPlugins.Length; i < c; i++)
            {
                var name = sortedPlugins[i];

                IPlugin plugin = null;

                //可以只填写程序集名称,也可以写出插件类型的全名称。
                if (!name.Contains(','))
                {
                    #region  照程序集名称来加载插件

                    Assembly assembly = null;
                    try
                    {
                        assembly = Assembly.Load(sortedPlugins[i]);
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidProgramException(string.Format("无法加载配置文件中指定的插件:{0}。", sortedPlugins[i]), ex);
                    }
                    plugin = CreatePluginFromAssembly(assembly);

                    #endregion
                }
                else
                {
                    #region  照插件类型名称来加载插件

                    Type pluginType = null;
                    try
                    {
                        pluginType = Type.GetType(sortedPlugins[i]);
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidProgramException(string.Format("无法加载配置文件中指定的插件类型:{0}。", sortedPlugins[i]), ex);
                    }
                    if (pluginType == null)
                    {
                        throw new InvalidProgramException(string.Format("无法加载配置文件中指定的插件类型:{0}。", sortedPlugins[i]));
                    }

                    plugin = Activator.CreateInstance(pluginType, true) as IPlugin;

                    #endregion
                }

                pluginList.Add(plugin);
            }
        }
示例#6
0
        /// <summary>
        /// Loads the assembly and looks for a class of type IPlugin.
        /// </summary>
        /// <param name="plugin">Plugin to load.</param>
        /// <returns>True if the assembly loaded correctly and contains a valid Tilde plugin.</returns>
        /// <remarks>Throws an exception if loading the assembly failed.</remarks>
        private bool LoadPluginInternal(PluginDetails plugin)
        {
            Assembly assembly = Assembly.LoadFile(plugin.Path);

            foreach (PluginDetails details in mPlugins)
            {
                if (details.Assembly.FullName == assembly.FullName)
                {
                    return(false);
                }
            }

            foreach (Type type in assembly.GetTypes())
            {
                if (typeof(IPlugin).IsAssignableFrom(type) && type != typeof(IPlugin))
                {
                    plugin.Assembly = assembly;
                    mAssemblies.Add(assembly);
                    mPlugins.Add(plugin);
                    return(true);
                }
            }

            return(false);
        }
        static void Main(string[] args)
        {
            string        testStrToLow = "StringToLower plugin test";
            StringToLower strToLow     = new StringToLower();

            testStrToLow = strToLow.Modify(testStrToLow);
            Console.WriteLine(testStrToLow);
            Console.WriteLine();

            string        testStrToUp = "StringToUpper plugin test";
            StringToUpper strToUp     = new StringToUpper();

            testStrToUp = strToUp.Modify(testStrToUp);
            Console.WriteLine(testStrToUp);
            Console.WriteLine();

            PluginCollection <string> plCol = new PluginCollection <string>();

            plCol.Add(strToLow);
            plCol.Add(strToUp);
            string testPlCol = "PluginCollection plugin Test";

            testPlCol = plCol.Modify(testPlCol);
            Console.WriteLine(testPlCol);
            Console.WriteLine();

            string testPlPrint = "PluginPrinter  test";
            PluginPrinter <string> plPrinter = new PluginPrinter <string>(strToLow, testPlPrint);

            plPrinter.Print();
            Console.WriteLine();

            Console.WriteLine("DoublePlugin plugin test");
            double       testDouble = -54.582;
            DoublePlugin doublePl   = new DoublePlugin();

            Console.WriteLine(doublePl.Modify(testDouble));
            Console.WriteLine();

            Console.WriteLine("PluginablePlugin plugin test");
            PluginablePlugin plaginablePl = new PluginablePlugin(doublePl);

            Console.WriteLine(plaginablePl.Modify(testDouble));

            Console.ReadLine();
        }
示例#8
0
        public static PluginCollection SelectAll()
        {
            PluginCollection List = new PluginCollection();

            using (IDataReader rd = SqlHelper.ExecuteReader(DAL.con(), CommandType.StoredProcedure, "sp_tblPlugin_Select_SelectAll_hoangda"))
            {
                while (rd.Read())
                {
                    List.Add(getFromReader(rd));
                }
            }
            return(List);
        }
        static void Main(string[] args)
        {
            string testStrToLow = "StringToLower plugin test";
            StringToLower strToLow = new StringToLower();
            testStrToLow = strToLow.Modify(testStrToLow);
            Console.WriteLine(testStrToLow);
            Console.WriteLine();

            string testStrToUp = "StringToUpper plugin test";
            StringToUpper strToUp = new StringToUpper();
            testStrToUp = strToUp.Modify(testStrToUp);
            Console.WriteLine(testStrToUp);
            Console.WriteLine();

            PluginCollection<string> plCol = new PluginCollection<string>();
            plCol.Add(strToLow);
            plCol.Add(strToUp);
            string testPlCol = "PluginCollection plugin Test";
            testPlCol = plCol.Modify(testPlCol);
            Console.WriteLine(testPlCol);
            Console.WriteLine();

            string testPlPrint = "PluginPrinter  test";
            PluginPrinter<string> plPrinter = new PluginPrinter<string>(strToLow, testPlPrint);
            plPrinter.Print();
            Console.WriteLine();

            Console.WriteLine("DoublePlugin plugin test");
            double testDouble = -54.582;
            DoublePlugin doublePl = new DoublePlugin();
            Console.WriteLine(doublePl.Modify(testDouble));
            Console.WriteLine();

            Console.WriteLine("PluginablePlugin plugin test");
            PluginablePlugin plaginablePl = new PluginablePlugin(doublePl);
            Console.WriteLine(plaginablePl.Modify(testDouble));

            Console.ReadLine();
        }
示例#10
0
        internal static void CreateStartupPlugins()
        {
            //所有插件(其中,DomainPlugins 在列表的前面,UIPlugins 在列表的后面。)
            //domain plugins.
            IPluginConfig[] configPlugins = GetDomainPluginsConfig();
            CreateStartupPluginsByConfig(_domainPlugins, configPlugins);
            _domainPlugins.Insert(0, new Rafy.Domain.RafyDomainPlugin());//其实这里不应该使用上层的类,但是内部为了简单实现,且效率更高。
            _domainPlugins.Lock();

            foreach (var item in _domainPlugins)
            {
                _allPlugins.Add(item);
            }

            //ui plugins.
            if (_location.IsUI)
            {
                configPlugins = GetUIPluginsConfig();
                CreateStartupPluginsByConfig(_uiPlugins, configPlugins);
                //if (_location.IsWPFUI)
                //{
                //    _uiPlugins.Insert(0, CreatePlugin("Rafy.WPF.RafyWPFPlugin, Rafy.WPF"));
                //    //_uiPlugins.Insert(0, LoadRafyPlugin("Rafy.WPF"));
                //}
                _uiPlugins.Lock();

                foreach (var item in _uiPlugins)
                {
                    _allPlugins.Add(item);
                }
            }

            CheckDuplucatePlugins();

            _allPlugins.Lock();
        }
示例#11
0
        void InitBass()
        {
            // initialize default output device
            if (!Bass.Init())
            {
                MessageBox.Show("Can't initialize device");

                Application.Current.Shutdown();
            }

            // initialize file selector
            _ofd.Filter = "BASS built-in (*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif)|*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif";

            // look for plugins (in the executable's directory)
            foreach (var plugin in Directory.EnumerateFiles(Environment.CurrentDirectory, "bass*.dll"))
            {
                var fileName = Path.GetFileNameWithoutExtension(plugin);

                int hPlugin;

                if ((hPlugin = Bass.PluginLoad(plugin)) == 0)
                {
                    continue;
                }

                // plugin loaded...
                var pinfo = Bass.PluginGetInfo(hPlugin);

                // get plugin info to add to the file selector filter...
                foreach (var format in pinfo.Formats)
                {
                    _ofd.Filter += $"|{format.Name} ({format.FileExtensions}) - {fileName}|{format.FileExtensions}";
                }

                // add plugin to the list
                PluginCollection.Add(fileName);
            }

            _ofd.Filter += "|All Files|*.*";

            if (PluginCollection.Count == 0) // no plugins...
            {
                PluginCollection.Add("no plugins - visit the BASS webpage to get some");
            }
        }
示例#12
0
        /// <summary>
        /// 在运行时,按需加载指定的插件
        /// </summary>
        /// <param name="pluginClass">要加载的插件类</param>
        /// <param name="pluginType">该插件的类型</param>
        /// <param name="checkExistence">是否检查存在性?</param>
        private static void LoadRuntimePlugin(string pluginClass, PluginType pluginType, bool checkExistence)
        {
            var plugin = CreatePlugin(pluginClass);

            //已经加载过的插件,不再加载。
            if (checkExistence && _allPlugins.Find(plugin.Assembly) != null)
            {
                return;
            }

            if (pluginType == PluginType.Domain)
            {
                _domainPlugins.Unlock();
                _domainPlugins.Add(plugin);
                _domainPlugins.Lock();
            }
            else
            {
                _uiPlugins.Unlock();
                _uiPlugins.Add(plugin);
                _uiPlugins.Lock();
            }

            _allPlugins.Unlock();
            _allPlugins.Add(plugin);
            _allPlugins.Lock();

            //实体类型对应的集合需要重建。
            EntityConfigRepository.ClearCache();

            var handler = RuntimePluginLoaded;

            if (handler != null)
            {
                handler(null, new PluginEventArgs
                {
                    Plugin     = plugin,
                    PluginType = pluginType
                });
            }

            //加载完成后,再初始化。
            plugin.Initialize(_appCore);
        }
示例#13
0
        private static void CreateStartupPluginsByConfig(PluginCollection pluginList, IPluginConfig[] sortedPlugins)
        {
            if (sortedPlugins.Length == 0)
            {
                return;
            }

            for (int i = 0, c = sortedPlugins.Length; i < c; i++)
            {
                var pluginSection = sortedPlugins[i];
                if (pluginSection.LoadType == PluginLoadType.AsRequired && EnablePluginLoadAsRequired)
                {
                    continue;
                }

                IPlugin plugin = CreatePlugin(pluginSection.Plugin);

                pluginList.Add(plugin);
            }
        }
示例#14
0
    public static PluginCollection GetPlugins(string rootFolder, HttpSessionState session, AdminPanelSettings apSettings)
    {
        PluginCollection result = new PluginCollection();

        try
        {
            foreach (Plugin pl in apSettings.Plugins)
            {
                if (Directory.Exists(Path.Combine(rootFolder, @"plugins\" + pl.FolderName)))
                {
                    result.Add(pl);
                }
            }
        }
        catch (Exception error)
        {
            Log.WriteException(error);
            throw;
        }

        return(result);
    }
示例#15
0
        /// <summary>
        /// Loads the plug-ins into memory.
        /// </summary>
        /// <returns>Returns the number of loaded plug-ins.</returns>
        public int LoadPlugins()
        {
            int         count    = 0;
            XmlDocument document = new XmlDocument();

            document.Load(Path.Combine(Program.StartupPath, "TibiaTekPlus.Plugins.xml"));
            string path;

            foreach (XmlElement element in document["plugins"]["installed"])
            {
                try
                {
                    path = Path.Combine(Program.StartupPath, element.GetAttribute("fullname") + ".dll");
                    if (File.Exists(path))
                    {
                        Plugin plugin = (Plugin)Activator.CreateInstance(Type.GetType(element["assemblyQualifiedName"].InnerText));
                        plugin.Host = this;
                        plugins.Add(plugin);
                        count++;
                        if (PluginLoaded != null)
                        {
                            PluginLoaded.Invoke(plugin);
                        }
                    }
                    else
                    {
                        MessageBox.Show(String.Format(Language.kernel_error1, element["title"], element["author"], element.GetAttribute("fullname")), Language.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(String.Format(Language.kernel_error2, element.GetAttribute("fullname"), e.StackTrace + "\n" + e.Message), Language.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            return(count);
        }
示例#16
0
        /// <summary>
        /// 加载插件
        /// </summary>
        public static void Init()
        {
            if (s_Initialized)
            {
                return;
            }

            lock (s_InitLocker)
            {
                if (s_Initialized)
                {
                    return;
                }

                //TODO:读取设置

                string pluginFolder = Globals.GetPath(SystemDirecotry.Plugins);

                if (Directory.Exists(pluginFolder) == false)
                {
                    s_Initialized = true;
                    return;
                    //throw new Exception(String.Format(Resources.PluginManager_PluginFolderNotFound, pluginFolder));
                }

                PluginCollection plugins = new PluginCollection();

                foreach (string dir in Directory.GetDirectories(pluginFolder))
                {
                    string pluginName = Path.GetFileNameWithoutExtension(dir);

                    Type pluginType = null;

                    if (BuildManager.CodeAssemblies != null)
                    {
                        foreach (Assembly assembly in BuildManager.CodeAssemblies)
                        {
                            pluginType = assembly.GetType("MaxLabs.bbsMax.Web.plugins." + pluginName, false, true);

                            if (pluginType != null)
                            {
                                break;
                            }
                        }
                    }

                    if (pluginType == null)
                    {
                        pluginType = BuildManager.GetType("MaxLabs.bbsMax.Web.plugins." + pluginName, false);
                    }

                    if (pluginType != null)
                    {
                        PluginBase plugin = (PluginBase)Activator.CreateInstance(pluginType);

                        if (plugin != null)
                        {
                            plugin.DoInitialize();

                            plugin.Name = pluginName;

                            string pluginDisableFile = IOUtil.JoinPath(dir, "plugin_disabled");

                            plugin.Enable = File.Exists(pluginDisableFile) == false;

                            plugins.Add(plugin);
                        }
                    }
                    else
                    {
                        //TODO:记录下警告信息
                    }
                }

                s_Initialized = true;
                s_Plugins     = plugins;
            }
        }
示例#17
0
 /// <summary>
 /// 获得插件对象
 /// </summary>
 /// <param name="pluginCol">当前插件集合</param>
 /// <param name="_type">插件类型</param>
 private static void getPluginObject(PluginCollection pluginCol, Type _type)
 {
     IPlugin plugin = null;
     try
     {
         //object aa = Activator.CreateInstance(_type);
         //创建一个插件对象实例
         plugin = Activator.CreateInstance(_type) as IPlugin;
     }
     catch
     {
         if (AppLog.log.IsErrorEnabled)
         {
             AppLog.log.Error(_type.FullName + "反射生成对象时发生异常");
         }
     }
     finally
     {
         if (plugin != null)
         {
             //判断该插件是否已经存在插件集合中了,如果不是则加入该对象
             if (!pluginCol.Contains(plugin))
             {
                 pluginCol.Add(plugin);
             }
         }
     }
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            pluginID = LoadPluginID();

            rootFolder = Page.MapPath("");

            if (!Page.IsPostBack)
            {
                pluginID = (!string.IsNullOrEmpty(Request.QueryString["plugin"]) ? Request.QueryString["plugin"] : pluginID);
            }
            try
            {
                PluginCollection Plugins = Plugin.GetPlugins(rootFolder, Page.Session, (Page as DefaultPage).Settings);

                installedPlugins.Clear();
                foreach (Plugin pl in Plugins)
                {
                    AdminPanelMainPlugin pctrl = (AdminPanelMainPlugin)LoadControl("../plugins/" + pl.FolderName + "/main.ascx");
                    pctrl.InitPlugin();
                    if (pctrl.CanLoadPlugin())
                    {
                        installedPlugins.Add(pl);
                    }
                }

                string mode = (!string.IsNullOrEmpty(Request.QueryString["mode"]) ? Request.QueryString["mode"] : string.Empty);
                if (!Page.IsPostBack)
                {
                    switch (mode)
                    {
                    case "help":
                        Response.Redirect((Page as DefaultPage).HelpUrl, false);
                        break;
                    }
                }

                if (string.IsNullOrEmpty(pluginID) && installedPlugins.Count > 0)
                {
                    pluginID = installedPlugins[0].ID;
                }
                Plugin plugin = LoadPlugin(pluginID);
                if (plugin != null)
                {
                    SavePluginID(plugin);
                }
                else
                {
                    AdminPanelUtils.SetPageErrorMessage(Page, "Plugin not found!");
                }

                WebMail.adminpanel.core.Menu ctrl = (WebMail.adminpanel.core.Menu)LoadControl("Menu.ascx");
                if (ctrl != null)
                {
                    ctrl.Plugins  = installedPlugins;
                    ctrl.pluginID = pluginID;
                    menuPlaceHolder.Controls.Add(ctrl);
                }
            }
            catch (Exception ex)
            {
                Log.WriteException(ex);
                AdminPanelUtils.SetPageErrorMessage(Page, ex.Message + ": " + (ex.InnerException != null ? ex.InnerException.Message : ex.Message));
            }
        }