aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/PluginLoader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/PluginLoader.cs')
-rw-r--r--OpenSim/Framework/PluginLoader.cs59
1 files changed, 35 insertions, 24 deletions
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
55 } 55 }
56 56
57 /// <summary> 57 /// <summary>
58
58 /// Generic Plugin Loader 59 /// Generic Plugin Loader
59 /// </summary> 60 /// </summary>
60 public class PluginLoader <T> : IDisposable where T : IPlugin 61 public class PluginLoader <T> : IDisposable where T : IPlugin
@@ -66,16 +67,17 @@ namespace OpenSim.Framework
66 private PluginInitialiserBase initialiser; 67 private PluginInitialiserBase initialiser;
67 private Dictionary<string,IPluginConstraint> constraints 68 private Dictionary<string,IPluginConstraint> constraints
68 = new Dictionary<string,IPluginConstraint>(); 69 = new Dictionary<string,IPluginConstraint>();
69 70
71 private static bool runonce = false;
70 private static readonly ILog log 72 private static readonly ILog log
71 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 73 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
72 74
73 public PluginInitialiserBase Initialiser 75 public PluginInitialiserBase Initialiser
74 { 76 {
75 set { initialiser = value; } 77 set { initialiser = value; }
76 get { return initialiser; } 78 get { return initialiser; }
77 } 79 }
78 80
79 public List<T> Plugins 81 public List<T> Plugins
80 { 82 {
81 get { return loaded; } 83 get { return loaded; }
@@ -84,25 +86,19 @@ namespace OpenSim.Framework
84 public PluginLoader () 86 public PluginLoader ()
85 { 87 {
86 Initialiser = new PluginInitialiserBase(); 88 Initialiser = new PluginInitialiserBase();
89 initialise_plugin_dir_ (".");
87 } 90 }
88 91
89 public PluginLoader (PluginInitialiserBase init) 92 public PluginLoader (PluginInitialiserBase init)
90 { 93 {
91 Initialiser = init; 94 Initialiser = init;
95 initialise_plugin_dir_ (".");
92 } 96 }
93 97
94 public PluginLoader (PluginInitialiserBase init, string dir) 98 public PluginLoader (PluginInitialiserBase init, string dir)
95 { 99 {
96 Initialiser = init; 100 Initialiser = init;
97 AddPluginDir (dir); 101 initialise_plugin_dir_ (dir);
98 }
99
100 public void AddPluginDir (string dir)
101 {
102 suppress_console_output_ (true);
103 AddinManager.Initialize (dir);
104 AddinManager.Registry.Update (null);
105 suppress_console_output_ (false);
106 } 102 }
107 103
108 public void AddExtensionPoint (string extpoint) 104 public void AddExtensionPoint (string extpoint)
@@ -114,22 +110,21 @@ namespace OpenSim.Framework
114 { 110 {
115 constraints.Add (extpoint, cons); 111 constraints.Add (extpoint, cons);
116 } 112 }
117 113
118 public void Load (string extpoint, string dir) 114 public void Load (string extpoint)
119 { 115 {
120 AddPluginDir (dir);
121 AddExtensionPoint (extpoint); 116 AddExtensionPoint (extpoint);
122 Load(); 117 Load();
123 } 118 }
124 119
125 public void Load () 120 public void Load ()
126 { 121 {
127 suppress_console_output_ (true); 122 log.Info("[PLUGINS]: Begin Loading " + AddinManager.Registry.RegistryPath);
128 AddinManager.Registry.Update (null);
129 suppress_console_output_ (false);
130 123
131 foreach (string ext in extpoints) 124 foreach (string ext in extpoints)
132 { 125 {
126 log.Info("[PLUGINS]: Loading extension point " + ext);
127
133 if (constraints.ContainsKey (ext)) 128 if (constraints.ContainsKey (ext))
134 { 129 {
135 IPluginConstraint cons = constraints [ext]; 130 IPluginConstraint cons = constraints [ext];
@@ -155,9 +150,25 @@ namespace OpenSim.Framework
155 p.Dispose (); 150 p.Dispose ();
156 } 151 }
157 152
158 public void ClearCache() 153 private void initialise_plugin_dir_ (string dir)
154 {
155 if (runonce == true)
156 return;
157
158 log.Info("[PLUGINS]: Initialzing " + dir);
159
160 clear_registry_();
161 suppress_console_output_ (true);
162 AddinManager.Initialize (dir);
163 AddinManager.Registry.Update (null);
164 suppress_console_output_ (false);
165 runonce = true;
166 }
167
168 private void clear_registry_ ()
159 { 169 {
160 // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) occasionally seems to corrupt its addin cache 170 // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0)
171 // occasionally seems to corrupt its addin cache
161 // Hence, as a temporary solution we'll remove it before each startup 172 // Hence, as a temporary solution we'll remove it before each startup
162 if (Directory.Exists("addin-db-000")) 173 if (Directory.Exists("addin-db-000"))
163 Directory.Delete("addin-db-000", true); 174 Directory.Delete("addin-db-000", true);
@@ -225,7 +236,7 @@ namespace OpenSim.Framework
225 public PluginFilenameConstraint (string name) 236 public PluginFilenameConstraint (string name)
226 { 237 {
227 filename = name; 238 filename = name;
228 239
229 } 240 }
230 241
231 public string Message 242 public string Message
@@ -245,7 +256,7 @@ namespace OpenSim.Framework
245 string[] path = ns[0].Path.Split('/'); 256 string[] path = ns[0].Path.Split('/');
246 if (path [path.Length-1] == filename) 257 if (path [path.Length-1] == filename)
247 return false; 258 return false;
248 259
249 return true; 260 return true;
250 } 261 }
251 } 262 }