aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs')
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs95
1 files changed, 95 insertions, 0 deletions
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs
new file mode 100644
index 0000000..ab39568
--- /dev/null
+++ b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs
@@ -0,0 +1,95 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.IO;
30using System.Reflection;
31using System.Text;
32using log4net;
33using OpenSim.ApplicationPlugins.ScriptEngine.Components;
34
35namespace OpenSim.ApplicationPlugins.ScriptEngine
36{
37 /// <summary>
38 /// Used to load ScriptEngine component .dll's
39 /// </summary>
40 internal class ComponentLoader
41 {
42 internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
43 private ScriptEnginePlugin scriptEnginePlugin;
44 public ComponentLoader(ScriptEnginePlugin sep)
45 {
46 scriptEnginePlugin = sep;
47 }
48
49 /// <summary>
50 /// Load components from directory
51 /// </summary>
52 /// <param name="directory"></param>
53 public void Load(string directory)
54 {
55 // We may want to change how this functions as currently it required unique class names for each component
56
57 foreach (string file in Directory.GetFiles(directory, "*.dll"))
58 {
59 //m_log.DebugFormat("[ScriptEngine]: Loading: [{0}].", file);
60 Assembly componentAssembly = Assembly.LoadFrom(file);
61 if (componentAssembly != null)
62 {
63 try
64 {
65 // Go through all types in the assembly
66 foreach (Type componentType in componentAssembly.GetTypes())
67 {
68 if (componentType.IsPublic
69 && !componentType.IsAbstract)
70 {
71 if (componentType.IsSubclassOf(typeof (ComponentBase)))
72 {
73 // We have found an type which is derived from ProdiverBase, add it to provider list
74 m_log.InfoFormat("[ScriptEngine]: Adding component: {0}", componentType.Name);
75 ComponentRegistry.providers.Add(componentType.Name, componentType);
76 }
77 if (componentType.IsSubclassOf(typeof(RegionScriptEngineBase)))
78 {
79 // We have found an type which is derived from RegionScriptEngineBase, add it to engine list
80 m_log.InfoFormat("[ScriptEngine]: Adding script engine: {0}", componentType.Name);
81 ComponentRegistry.scriptEngines.Add(componentType.Name, componentType);
82 }
83 }
84 }
85 }
86 catch
87 (ReflectionTypeLoadException)
88 {
89 m_log.InfoFormat("[ScriptEngine]: Could not load types for [{0}].", componentAssembly.FullName);
90 }
91 } //if
92 } //foreach
93 }
94 }
95} \ No newline at end of file