From 7fd63d9dc84cce5a6e6b177ff3b62598b08978f4 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Thu, 10 Jul 2008 13:45:46 +0000 Subject: Mantis#1682. Thank you kindly, Sempuki for a patch that: Move control of Mono.Addins from source attributes to external XML files. This removes a lot of coupling of the source with Mono.Addins --- OpenSim/Framework/PluginLoader.cs | 59 +++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 24 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/PluginLoader.cs b/OpenSim/Framework/PluginLoader.cs index 9104958..cfc1d7c 100644 --- a/OpenSim/Framework/PluginLoader.cs +++ b/OpenSim/Framework/PluginLoader.cs @@ -55,6 +55,7 @@ namespace OpenSim.Framework } /// + /// Generic Plugin Loader /// public class PluginLoader : IDisposable where T : IPlugin @@ -66,16 +67,17 @@ namespace OpenSim.Framework private PluginInitialiserBase initialiser; private Dictionary constraints = new Dictionary(); - + + private static bool runonce = false; private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - + public PluginInitialiserBase Initialiser { set { initialiser = value; } get { return initialiser; } } - + public List Plugins { get { return loaded; } @@ -84,25 +86,19 @@ namespace OpenSim.Framework public PluginLoader () { Initialiser = new PluginInitialiserBase(); + initialise_plugin_dir_ ("."); } public PluginLoader (PluginInitialiserBase init) { - Initialiser = init; + Initialiser = init; + initialise_plugin_dir_ ("."); } public PluginLoader (PluginInitialiserBase init, string dir) { - Initialiser = init; - AddPluginDir (dir); - } - - public void AddPluginDir (string dir) - { - suppress_console_output_ (true); - AddinManager.Initialize (dir); - AddinManager.Registry.Update (null); - suppress_console_output_ (false); + Initialiser = init; + initialise_plugin_dir_ (dir); } public void AddExtensionPoint (string extpoint) @@ -114,22 +110,21 @@ namespace OpenSim.Framework { constraints.Add (extpoint, cons); } - - public void Load (string extpoint, string dir) + + public void Load (string extpoint) { - AddPluginDir (dir); AddExtensionPoint (extpoint); Load(); } public void Load () { - suppress_console_output_ (true); - AddinManager.Registry.Update (null); - suppress_console_output_ (false); + log.Info("[PLUGINS]: Begin Loading " + AddinManager.Registry.RegistryPath); foreach (string ext in extpoints) { + log.Info("[PLUGINS]: Loading extension point " + ext); + if (constraints.ContainsKey (ext)) { IPluginConstraint cons = constraints [ext]; @@ -155,9 +150,25 @@ namespace OpenSim.Framework p.Dispose (); } - public void ClearCache() + private void initialise_plugin_dir_ (string dir) + { + if (runonce == true) + return; + + log.Info("[PLUGINS]: Initialzing " + dir); + + clear_registry_(); + suppress_console_output_ (true); + AddinManager.Initialize (dir); + AddinManager.Registry.Update (null); + suppress_console_output_ (false); + runonce = true; + } + + private void clear_registry_ () { - // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) occasionally seems to corrupt its addin cache + // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) + // occasionally seems to corrupt its addin cache // Hence, as a temporary solution we'll remove it before each startup if (Directory.Exists("addin-db-000")) Directory.Delete("addin-db-000", true); @@ -225,7 +236,7 @@ namespace OpenSim.Framework public PluginFilenameConstraint (string name) { filename = name; - + } public string Message @@ -245,7 +256,7 @@ namespace OpenSim.Framework string[] path = ns[0].Path.Split('/'); if (path [path.Length-1] == filename) return false; - + return true; } } -- cgit v1.1