diff options
author | Tedd Hansen | 2008-11-08 17:35:48 +0000 |
---|---|---|
committer | Tedd Hansen | 2008-11-08 17:35:48 +0000 |
commit | 9511a8c76370f21e839114007dcd2b25c69b009a (patch) | |
tree | b63323dfd96ecd1cc3cd560939bd66bb43ec9c1c /OpenSim/ApplicationPlugins | |
parent | * Added IClientIM to IClientCore interfaces (diff) | |
download | opensim-SC_OLD-9511a8c76370f21e839114007dcd2b25c69b009a.zip opensim-SC_OLD-9511a8c76370f21e839114007dcd2b25c69b009a.tar.gz opensim-SC_OLD-9511a8c76370f21e839114007dcd2b25c69b009a.tar.bz2 opensim-SC_OLD-9511a8c76370f21e839114007dcd2b25c69b009a.tar.xz |
Work in progress on SECS stuff. Have been holding it off until after 0.6 release. Still messy as hell and doesn't really work yet. Will undergo dramatic changes. AND MOST IMPORTANTLY: Will be conformed to work in coop with todays DNE and XEngine, hopefully one day providing a common interface for all components.
Diffstat (limited to '')
13 files changed, 219 insertions, 458 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 0b6dd5e..6f8ec43 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -66,6 +66,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
66 | throw new PluginNotInitialisedException (Name); | 66 | throw new PluginNotInitialisedException (Name); |
67 | } | 67 | } |
68 | 68 | ||
69 | |||
69 | public void Initialise(OpenSimBase openSim) | 70 | public void Initialise(OpenSimBase openSim) |
70 | { | 71 | { |
71 | m_configSource = openSim.ConfigSource.Source; | 72 | m_configSource = openSim.ConfigSource.Source; |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs deleted file mode 100644 index d2e3cd0..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs +++ /dev/null | |||
@@ -1,101 +0,0 @@ | |||
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 | */ | ||
27 | using System; | ||
28 | using System.Collections.Generic; | ||
29 | using System.IO; | ||
30 | using System.Reflection; | ||
31 | using System.Text; | ||
32 | using log4net; | ||
33 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | ||
34 | |||
35 | namespace 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 | lock (ComponentRegistry.providers) | ||
76 | { | ||
77 | ComponentRegistry.providers.Add(componentType.Name, componentType); | ||
78 | } | ||
79 | } | ||
80 | if (componentType.IsSubclassOf(typeof(RegionScriptEngineBase))) | ||
81 | { | ||
82 | // We have found an type which is derived from RegionScriptEngineBase, add it to engine list | ||
83 | m_log.InfoFormat("[ScriptEngine]: Adding script engine: {0}", componentType.Name); | ||
84 | lock (ComponentRegistry.scriptEngines) | ||
85 | { | ||
86 | ComponentRegistry.scriptEngines.Add(componentType.Name, componentType); | ||
87 | } | ||
88 | } | ||
89 | } | ||
90 | } | ||
91 | } | ||
92 | catch | ||
93 | (ReflectionTypeLoadException) | ||
94 | { | ||
95 | m_log.InfoFormat("[ScriptEngine]: Could not load types for [{0}].", componentAssembly.FullName); | ||
96 | } | ||
97 | } //if | ||
98 | } //foreach | ||
99 | } | ||
100 | } | ||
101 | } \ No newline at end of file | ||
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs deleted file mode 100644 index 5ffa490..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs +++ /dev/null | |||
@@ -1,68 +0,0 @@ | |||
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 | */ | ||
27 | using System; | ||
28 | using System.Collections.Generic; | ||
29 | using System.Text; | ||
30 | using OpenSim.ApplicationPlugins.ScriptEngine; | ||
31 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | ||
32 | |||
33 | namespace OpenSim.ApplicationPlugins.ScriptEngine | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// Component providers | ||
37 | /// This is where any component (any part) of the Script Engine Component System (SECS) registers. | ||
38 | /// Nothing is instanciated at this point. The modules just need to register here to be available for any script engine. | ||
39 | /// </summary> | ||
40 | public static class ComponentRegistry | ||
41 | { | ||
42 | // Component providers are registered here wit a name (string) | ||
43 | // When a script engine is created the components are instanciated | ||
44 | public static Dictionary<string, Type> providers = new Dictionary<string, Type>(); | ||
45 | public static Dictionary<string, Type> scriptEngines = new Dictionary<string, Type>(); | ||
46 | |||
47 | ///// <summary> | ||
48 | ///// Returns a list of ProviderBase objects which has been instanciated by their name | ||
49 | ///// </summary> | ||
50 | ///// <param name="Providers">List of Script Engine Components</param> | ||
51 | ///// <returns></returns> | ||
52 | //public static List<ComponentBase> GetComponents(string[] Providers) | ||
53 | //{ | ||
54 | // List<ComponentBase> pbl = new List<ComponentBase>(); | ||
55 | // if (Providers != null) | ||
56 | // { | ||
57 | // foreach (string p in Providers) | ||
58 | // { | ||
59 | // if (providers.ContainsKey(p)) | ||
60 | // pbl.Add(Activator.CreateInstance(providers[p]) as ComponentBase); | ||
61 | // } | ||
62 | // } | ||
63 | |||
64 | // return pbl; | ||
65 | //} | ||
66 | |||
67 | } | ||
68 | } \ No newline at end of file | ||
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs index e6def85..115d237 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs +++ b/OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs | |||
@@ -26,45 +26,51 @@ | |||
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Reflection; | ||
29 | using System.Text; | 30 | using System.Text; |
31 | using log4net; | ||
30 | using Nini.Config; | 32 | using Nini.Config; |
31 | using OpenSim.Region.Environment.Interfaces; | 33 | using OpenSim.Region.Environment.Interfaces; |
32 | using OpenSim.Region.Environment.Scenes; | 34 | using OpenSim.Region.Environment.Scenes; |
35 | using OpenSim.ScriptEngine.Shared; | ||
33 | 36 | ||
34 | namespace OpenSim.ApplicationPlugins.ScriptEngine | 37 | namespace OpenSim.ApplicationPlugins.ScriptEngine |
35 | { | 38 | { |
36 | public class RegionScriptEnginePlugin : IRegionModule | 39 | public class RegionEngineLoader : IRegionModule |
37 | { | 40 | { |
38 | // This is a region module. | 41 | // This is a region module. |
39 | // This means: Every time a new region is created, a new instance of this module is also created. | 42 | // This means: Every time a new region is created, a new instance of this module is also created. |
40 | // This module is responsible for starting the script engine for this region. | 43 | // This module is responsible for starting the script engine for this region. |
44 | public string Name { get { return "SECS.DotNetEngine.Scheduler.RegionLoader"; } } | ||
45 | public bool IsSharedModule { get { return true; } } | ||
41 | 46 | ||
47 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
42 | private string tempScriptEngineName = "DotNetEngine"; | 48 | private string tempScriptEngineName = "DotNetEngine"; |
43 | public RegionScriptEngineBase scriptEngine; | 49 | public IScriptEngine scriptEngine; |
50 | public IConfigSource ConfigSource; | ||
51 | public IConfig ScriptConfigSource; | ||
44 | public void Initialise(Scene scene, IConfigSource source) | 52 | public void Initialise(Scene scene, IConfigSource source) |
45 | { | 53 | { |
46 | return; | ||
47 | // New region is being created | 54 | // New region is being created |
48 | // Create a new script engine | 55 | // Create a new script engine |
49 | // try | 56 | // Make sure we have config |
50 | // { | 57 | if (ConfigSource.Configs["SECS"] == null) |
51 | // lock (ComponentRegistry.scriptEngines) | 58 | ConfigSource.AddConfig("SECS"); |
52 | // { | 59 | ScriptConfigSource = ConfigSource.Configs["SECS"]; |
53 | // scriptEngine = | 60 | |
54 | // Activator.CreateInstance(ComponentRegistry.scriptEngines[tempScriptEngineName]) as | 61 | // Is SECS enabled? |
55 | // RegionScriptEngineBase; | 62 | if (ScriptConfigSource.GetBoolean("Enabled", false)) |
56 | // } | 63 | { |
57 | // scriptEngine.Initialize(scene, source); | 64 | LoadEngine(); |
58 | // } | 65 | if (scriptEngine != null) |
59 | // catch (Exception ex) | 66 | scriptEngine.Initialise(scene, source); |
60 | // { | 67 | } |
61 | // scriptEngine.m_log.Error("[ScriptEngine]: Unable to load engine \"" + tempScriptEngineName + "\": " + ex.ToString()); | ||
62 | // } | ||
63 | } | 68 | } |
64 | 69 | ||
65 | public void PostInitialise() | 70 | public void PostInitialise() |
66 | { | 71 | { |
67 | // Nothing | 72 | if (scriptEngine != null) |
73 | scriptEngine.PostInitialise(); | ||
68 | } | 74 | } |
69 | 75 | ||
70 | public void Close() | 76 | public void Close() |
@@ -76,18 +82,34 @@ namespace OpenSim.ApplicationPlugins.ScriptEngine | |||
76 | } | 82 | } |
77 | catch (Exception ex) | 83 | catch (Exception ex) |
78 | { | 84 | { |
79 | scriptEngine.m_log.Error("[ScriptEngine]: Unable to close engine \"" + tempScriptEngineName + "\": " + ex.ToString()); | 85 | m_log.ErrorFormat("[{0}] Unable to close engine \"{1}\": {2}", Name, tempScriptEngineName, ex.ToString()); |
80 | } | 86 | } |
81 | } | 87 | } |
82 | 88 | ||
83 | public string Name | 89 | private void LoadEngine() |
84 | { | 90 | { |
85 | get { return "ScriptEngine Region Loader"; } | 91 | m_log.DebugFormat("[{0}] Loading region script engine engine \"{1}\".", Name, tempScriptEngineName); |
92 | try | ||
93 | { | ||
94 | lock (ScriptEnginePlugin.scriptEngines) | ||
95 | { | ||
96 | if (!ScriptEnginePlugin.scriptEngines.ContainsKey(tempScriptEngineName)) | ||
97 | { | ||
98 | m_log.ErrorFormat("[{0}] Unable to load region script engine: Script engine \"{1}\" does not exist.", Name, tempScriptEngineName); | ||
99 | } | ||
100 | else | ||
101 | { | ||
102 | scriptEngine = | ||
103 | Activator.CreateInstance(ScriptEnginePlugin.scriptEngines[tempScriptEngineName]) as | ||
104 | IScriptEngine; | ||
105 | } | ||
106 | } | ||
107 | } | ||
108 | catch (Exception ex) | ||
109 | { | ||
110 | m_log.ErrorFormat("[{0}] Internal error loading region script engine \"{1}\": {2}", Name, tempScriptEngineName, ex.ToString()); | ||
111 | } | ||
86 | } | 112 | } |
87 | 113 | ||
88 | public bool IsSharedModule | ||
89 | { | ||
90 | get { return true; } | ||
91 | } | ||
92 | } | 114 | } |
93 | } | 115 | } |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs deleted file mode 100644 index 89a90ae..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs +++ /dev/null | |||
@@ -1,182 +0,0 @@ | |||
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 | */ | ||
27 | using System; | ||
28 | using System.Collections.Generic; | ||
29 | using System.Reflection; | ||
30 | using System.Text; | ||
31 | using log4net; | ||
32 | using Nini.Config; | ||
33 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | ||
34 | using OpenSim.Region.Environment.Scenes; | ||
35 | |||
36 | namespace OpenSim.ApplicationPlugins.ScriptEngine | ||
37 | { | ||
38 | public abstract class RegionScriptEngineBase | ||
39 | { | ||
40 | |||
41 | /// <summary> | ||
42 | /// Called on region initialize | ||
43 | /// </summary> | ||
44 | public abstract void Initialize(); | ||
45 | public abstract string Name { get; } | ||
46 | /// <summary> | ||
47 | /// Called before components receive Close() | ||
48 | /// </summary> | ||
49 | public abstract void PreClose(); | ||
50 | // Hold list of all the different components we have working for us | ||
51 | public List<ComponentBase> Components = new List<ComponentBase>(); | ||
52 | |||
53 | public Scene m_Scene; | ||
54 | public IConfigSource m_ConfigSource; | ||
55 | public readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
56 | |||
57 | public void Initialize(Scene scene, IConfigSource source) | ||
58 | { | ||
59 | // Region started | ||
60 | m_Scene = scene; | ||
61 | m_ConfigSource = source; | ||
62 | Initialize(); | ||
63 | } | ||
64 | |||
65 | /// <summary> | ||
66 | /// Creates instances of script engine components inside "components" List | ||
67 | /// </summary> | ||
68 | /// <param name="ComponentList">Array of comonent names to initialize</param> | ||
69 | public void InitializeComponents(string[] ComponentList) | ||
70 | { | ||
71 | // Take list of providers to initialize and make instances of them | ||
72 | foreach (string c in ComponentList) | ||
73 | { | ||
74 | m_log.Info("[" + Name + "]: Loading: " + c); | ||
75 | lock (Components) | ||
76 | { | ||
77 | lock (ComponentRegistry.providers) | ||
78 | { | ||
79 | try | ||
80 | { | ||
81 | if (ComponentRegistry.providers.ContainsKey(c)) | ||
82 | Components.Add(Activator.CreateInstance(ComponentRegistry.providers[c]) as ComponentBase); | ||
83 | else | ||
84 | m_log.Error("[" + Name + "]: Component \"" + c + "\" not found, can not load"); | ||
85 | } | ||
86 | catch (Exception ex) | ||
87 | { | ||
88 | m_log.Error("[" + Name + "]: Exception loading \"" + c + "\": " + ex.ToString()); | ||
89 | } | ||
90 | } | ||
91 | } | ||
92 | } | ||
93 | |||
94 | |||
95 | // Run Initialize on all our providers, hand over a reference of ourself. | ||
96 | foreach (ComponentBase p in Components.ToArray()) | ||
97 | { | ||
98 | try | ||
99 | { | ||
100 | p.Initialize(this); | ||
101 | } | ||
102 | catch (Exception ex) | ||
103 | { | ||
104 | lock (Components) | ||
105 | { | ||
106 | m_log.Error("[" + Name + "]: Error initializing \"" + p.GetType().FullName + "\": " + | ||
107 | ex.ToString()); | ||
108 | if (Components.Contains(p)) | ||
109 | Components.Remove(p); | ||
110 | } | ||
111 | } | ||
112 | } | ||
113 | // All modules has been initialized, call Start() on them. | ||
114 | foreach (ComponentBase p in Components.ToArray()) | ||
115 | { | ||
116 | try | ||
117 | { | ||
118 | p.Start(); | ||
119 | } | ||
120 | catch (Exception ex) | ||
121 | { | ||
122 | lock (Components) | ||
123 | { | ||
124 | m_log.Error("[" + Name + "]: Error starting \"" + p.GetType().FullName + "\": " + ex.ToString()); | ||
125 | if (Components.Contains(p)) | ||
126 | Components.Remove(p); | ||
127 | } | ||
128 | } | ||
129 | } | ||
130 | |||
131 | } | ||
132 | |||
133 | #region Functions to return lists based on type | ||
134 | // Predicate for searching List for a certain type | ||
135 | private static bool FindType<T>(ComponentBase pb) | ||
136 | { | ||
137 | if (pb.GetType() is T) | ||
138 | return true; | ||
139 | return false; | ||
140 | } | ||
141 | public List<ComponentBase> GetCommandComponentList() | ||
142 | { | ||
143 | return Components.FindAll(FindType<CommandBase>); | ||
144 | } | ||
145 | public List<ComponentBase> GetCompilerComponentList() | ||
146 | { | ||
147 | return Components.FindAll(FindType<CompilerBase>); | ||
148 | } | ||
149 | public List<ComponentBase> GetEventComponentList() | ||
150 | { | ||
151 | return Components.FindAll(FindType<EventBase>); | ||
152 | } | ||
153 | public List<ComponentBase> GetScheduleComponentList() | ||
154 | { | ||
155 | return Components.FindAll(FindType<SchedulerBase>); | ||
156 | } | ||
157 | |||
158 | #endregion | ||
159 | |||
160 | public void Close() | ||
161 | { | ||
162 | // We need to shut down | ||
163 | |||
164 | // First call abstracted PreClose() | ||
165 | PreClose(); | ||
166 | |||
167 | // Then Call Close() on all components | ||
168 | foreach (ComponentBase p in Components.ToArray()) | ||
169 | { | ||
170 | try | ||
171 | { | ||
172 | p.Close(); | ||
173 | } | ||
174 | catch (Exception) | ||
175 | { | ||
176 | // TODO: Print error to console | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | } | ||
181 | } | ||
182 | |||
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml deleted file mode 100644 index 38f6eb0..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | <Addin id="ScriptEngine" version="0.1"> | ||
2 | <Runtime> | ||
3 | <Import assembly="OpenSim.ApplicationPlugins.ScriptEngine.dll" /> | ||
4 | </Runtime> | ||
5 | <Dependencies> | ||
6 | <Addin id="OpenSim" version="0.5" /> | ||
7 | <Addin id="RegionProxy" version="0.1" /> | ||
8 | </Dependencies> | ||
9 | <Extension path="/OpenSim/Startup"> | ||
10 | <Plugin id="ScriptEngine" type="OpenSim.ApplicationPlugins.ScriptEngine.ScriptEnginePlugin" /> | ||
11 | </Extension> | ||
12 | </Addin> | ||
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml new file mode 100644 index 0000000..f067bf4 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml | |||
@@ -0,0 +1,11 @@ | |||
1 | <Addin id="OpenSim.ApplicationPlugins.ScriptEngine" version="0.1"> | ||
2 | <Runtime> | ||
3 | <Import assembly="OpenSim.ApplicationPlugins.ScriptEngine.dll" /> | ||
4 | </Runtime> | ||
5 | <Dependencies> | ||
6 | <Addin id="OpenSim" version="0.5" /> | ||
7 | </Dependencies> | ||
8 | <Extension path = "/OpenSim/Startup"> | ||
9 | <Plugin id="ScriptEnginePlugin" type="OpenSim.ApplicationPlugins.ScriptEngine.ScriptEnginePlugin" /> | ||
10 | </Extension> | ||
11 | </Addin> | ||
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs index 32c7748..f81b848 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs +++ b/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs | |||
@@ -26,29 +26,143 @@ | |||
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.IO; | ||
29 | using System.Reflection; | 30 | using System.Reflection; |
30 | using System.Text; | 31 | using System.Text; |
32 | using System.Threading; | ||
33 | using OpenSim.ScriptEngine.Shared; | ||
31 | using log4net; | 34 | using log4net; |
32 | 35 | ||
33 | namespace OpenSim.ApplicationPlugins.ScriptEngine | 36 | namespace OpenSim.ApplicationPlugins.ScriptEngine |
34 | { | 37 | { |
38 | /// <summary> | ||
39 | /// Loads all Script Engine Components | ||
40 | /// </summary> | ||
35 | public class ScriptEnginePlugin : IApplicationPlugin | 41 | public class ScriptEnginePlugin : IApplicationPlugin |
36 | { | 42 | { |
37 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 43 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
38 | internal OpenSimBase m_OpenSim; | 44 | internal OpenSimBase m_OpenSim; |
39 | private ComponentLoader pluginLoader; | 45 | |
46 | // Component providers are registered here wit a name (string) | ||
47 | // When a script engine is created the components are instanciated | ||
48 | public static Dictionary<string, Type> providers = new Dictionary<string, Type>(); | ||
49 | public static Dictionary<string, Type> scriptEngines = new Dictionary<string, Type>(); | ||
50 | |||
51 | |||
52 | public ScriptEnginePlugin() | ||
53 | { | ||
54 | // Application startup | ||
55 | #if DEBUG | ||
56 | m_log.InfoFormat("[{0}] ##################################", Name); | ||
57 | m_log.InfoFormat("[{0}] # Script Engine Component System #", Name); | ||
58 | m_log.InfoFormat("[{0}] ##################################", Name); | ||
59 | #else | ||
60 | m_log.InfoFormat("[{0}] Script Engine Component System", Name); | ||
61 | #endif | ||
62 | |||
63 | // Load all modules from current directory | ||
64 | // We only want files named OpenSim.ScriptEngine.*.dll | ||
65 | Load(".", "OpenSim.ScriptEngine.*.dll"); | ||
66 | } | ||
40 | 67 | ||
41 | public void Initialise(OpenSimBase openSim) | 68 | public void Initialise(OpenSimBase openSim) |
42 | { | 69 | { |
70 | |||
43 | // Our objective: Load component .dll's | 71 | // Our objective: Load component .dll's |
44 | m_OpenSim = openSim; | 72 | m_OpenSim = openSim; |
45 | pluginLoader = new ComponentLoader(this); | 73 | //m_OpenSim.Shutdown(); |
74 | } | ||
75 | |||
76 | private readonly static string nameIScriptEngineComponent = typeof(IScriptEngineComponent).Name; // keep interface name in managed code | ||
77 | private readonly static string nameIScriptEngine = typeof(IScriptEngine).Name; // keep interface name in managed code | ||
78 | /// <summary> | ||
79 | /// Load components from directory | ||
80 | /// </summary> | ||
81 | /// <param name="directory"></param> | ||
82 | public void Load(string directory, string filter) | ||
83 | { | ||
84 | // We may want to change how this functions as currently it required unique class names for each component | ||
85 | |||
86 | foreach (string file in Directory.GetFiles(directory, filter)) | ||
87 | { | ||
88 | //m_log.DebugFormat("[ScriptEngine]: Loading: [{0}].", file); | ||
89 | Assembly componentAssembly = null; | ||
90 | try | ||
91 | { | ||
92 | componentAssembly = Assembly.LoadFrom(file); | ||
93 | } catch (Exception e) | ||
94 | { | ||
95 | m_log.ErrorFormat("[{0}] Error loading: \"{1}\".", Name, file); | ||
96 | } | ||
97 | if (componentAssembly != null) | ||
98 | { | ||
99 | try | ||
100 | { | ||
101 | // Go through all types in the assembly | ||
102 | foreach (Type componentType in componentAssembly.GetTypes()) | ||
103 | { | ||
104 | if (componentType.IsPublic | ||
105 | && !componentType.IsAbstract) | ||
106 | { | ||
107 | //if (componentType.IsSubclassOf(typeof(ComponentBase))) | ||
108 | if (componentType.GetInterface(nameIScriptEngineComponent) != null) | ||
109 | { | ||
110 | // We have found an type which is derived from ProdiverBase, add it to provider list | ||
111 | m_log.InfoFormat("[{0}] Adding component: {1}", Name, componentType.Name); | ||
112 | lock (providers) | ||
113 | { | ||
114 | providers.Add(componentType.Name, componentType); | ||
115 | } | ||
116 | } | ||
117 | //if (componentType.IsSubclassOf(typeof(ScriptEngineBase))) | ||
118 | if (componentType.GetInterface(nameIScriptEngine) != null) | ||
119 | { | ||
120 | // We have found an type which is derived from RegionScriptEngineBase, add it to engine list | ||
121 | m_log.InfoFormat("[{0}] Adding script engine: {1}", Name, componentType.Name); | ||
122 | lock (scriptEngines) | ||
123 | { | ||
124 | scriptEngines.Add(componentType.Name, componentType); | ||
125 | } | ||
126 | } | ||
127 | } | ||
128 | } | ||
129 | } | ||
130 | catch | ||
131 | (ReflectionTypeLoadException re) | ||
132 | { | ||
133 | m_log.ErrorFormat("[{0}] Could not load component \"{1}\": {2}", Name, componentAssembly.FullName, re.ToString()); | ||
134 | int c = 0; | ||
135 | foreach (Exception e in re.LoaderExceptions) | ||
136 | { | ||
137 | c++; | ||
138 | m_log.ErrorFormat("[{0}] LoaderException {1}: {2}", Name, c, e.ToString()); | ||
139 | } | ||
140 | } | ||
141 | } //if | ||
142 | } //foreach | ||
143 | } | ||
144 | |||
145 | public static IScriptEngineComponent GetComponentInstance(string name, params Object[] args) | ||
146 | { | ||
147 | if (!providers.ContainsKey(name)) | ||
148 | throw new Exception("ScriptEngine requested component named \"" + name + | ||
149 | "\" that does not exist."); | ||
46 | 150 | ||
47 | m_log.Info("[" + Name + "]: Script Engine Component System"); | 151 | return Activator.CreateInstance(providers[name], args) as IScriptEngineComponent; |
48 | m_log.Info("[" + Name + "]: Loading Script Engine Components"); | ||
49 | pluginLoader.Load("ScriptEngines"); | ||
50 | |||
51 | } | 152 | } |
153 | |||
154 | private readonly static string nameIScriptEngineRegionComponent = typeof(IScriptEngineRegionComponent).Name; // keep interface name in managed code | ||
155 | public static IScriptEngineComponent GetComponentInstance(RegionInfoStructure info, string name, params Object[] args) | ||
156 | { | ||
157 | IScriptEngineComponent c = GetComponentInstance(name, args); | ||
158 | |||
159 | // If module is IScriptEngineRegionComponent then it will have one instance per region and we will initialize it | ||
160 | if (c.GetType().GetInterface(nameIScriptEngineRegionComponent) != null) | ||
161 | ((IScriptEngineRegionComponent)c).Initialize(info); | ||
162 | |||
163 | return c; | ||
164 | } | ||
165 | |||
52 | #region IApplicationPlugin stuff | 166 | #region IApplicationPlugin stuff |
53 | /// <summary> | 167 | /// <summary> |
54 | /// Returns the plugin version | 168 | /// Returns the plugin version |
@@ -65,16 +179,13 @@ namespace OpenSim.ApplicationPlugins.ScriptEngine | |||
65 | /// <returns>Plugin name, eg MySQL User Provider</returns> | 179 | /// <returns>Plugin name, eg MySQL User Provider</returns> |
66 | public string Name | 180 | public string Name |
67 | { | 181 | { |
68 | get { return "ScriptEngine"; } | 182 | get { return "SECS"; } |
69 | } | 183 | } |
70 | 184 | ||
71 | /// <summary> | 185 | /// <summary> |
72 | /// Default-initialises the plugin | 186 | /// Default-initialises the plugin |
73 | /// </summary> | 187 | /// </summary> |
74 | public void Initialise() | 188 | public void Initialise() { } |
75 | { | ||
76 | //throw new NotImplementedException(); | ||
77 | } | ||
78 | 189 | ||
79 | ///<summary> | 190 | ///<summary> |
80 | ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. | 191 | ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. |
@@ -85,5 +196,6 @@ namespace OpenSim.ApplicationPlugins.ScriptEngine | |||
85 | //throw new NotImplementedException(); | 196 | //throw new NotImplementedException(); |
86 | } | 197 | } |
87 | #endregion | 198 | #endregion |
199 | |||
88 | } | 200 | } |
89 | } | 201 | } |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_YP.cs index 48c6bfe..c81ad76 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_YP.cs | |||
@@ -26,28 +26,30 @@ | |||
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Reflection; | ||
29 | using System.Text; | 30 | using System.Text; |
31 | using OpenSim.ScriptEngine.Components.DotNetEngine.Compilers.YP; | ||
32 | using OpenSim.ScriptEngine.Shared; | ||
30 | 33 | ||
31 | namespace OpenSim.ApplicationPlugins.ScriptEngine.Components | 34 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers |
32 | { | 35 | { |
33 | /// <summary> | 36 | public class Compiler_YP: IScriptCompiler |
34 | /// Generic baseclass for component providers | ||
35 | /// </summary> | ||
36 | public abstract class ComponentBase //: iProviderBase | ||
37 | { | 37 | { |
38 | //public abstract iProviderBase CreateInstance(); | 38 | |
39 | public abstract void Start(); | 39 | private readonly Compiler_CS m_Compiler_CS = new Compiler_CS(); |
40 | public abstract void Close(); | 40 | |
41 | public RegionScriptEngineBase scriptEngine; | 41 | public string Compile(ScriptMetaData scriptMetaData, ref string script) |
42 | public void Initialize(RegionScriptEngineBase ScriptEngine) | ||
43 | { | 42 | { |
44 | scriptEngine = ScriptEngine; | 43 | // Convert script to CS |
44 | string scriptCS = YP2CS.Convert(ref script); | ||
45 | // Use CS compiler to compile it | ||
46 | return m_Compiler_CS.Compile(scriptMetaData, ref scriptCS); | ||
45 | } | 47 | } |
46 | 48 | ||
47 | static ComponentBase() | 49 | public string PreProcessScript(ref string script) |
48 | { | 50 | { |
49 | // We got loaded -- should we register now? | 51 | // This is handled by our converter |
50 | //OpenSim.ApplicationPlugins.ScriptEngine.ComponentProviders.providers.Add(GetType()); | 52 | return script; |
51 | } | 53 | } |
52 | } | 54 | } |
53 | } \ No newline at end of file | 55 | } |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs b/OpenSim/ScriptEngine/Shared/IScriptCompiler.cs index 1c0fd52..3bc0c03 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs +++ b/OpenSim/ScriptEngine/Shared/IScriptCompiler.cs | |||
@@ -26,20 +26,15 @@ | |||
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Reflection; | ||
29 | using System.Text; | 30 | using System.Text; |
31 | using ScriptAssemblies; | ||
30 | 32 | ||
31 | namespace OpenSim.ApplicationPlugins.ScriptEngine.Components | 33 | namespace OpenSim.ScriptEngine.Shared |
32 | { | 34 | { |
33 | public abstract class EventBase : ComponentBase | 35 | public interface IScriptCompiler : IScriptEngineComponent |
34 | { | 36 | { |
35 | //public override iProviderBase CreateInstance() | 37 | string Compile(ScriptMetaData scriptMetaData, ref string script); |
36 | //{ | 38 | string PreProcessScript(ref string script); |
37 | // throw new NotImplementedException(); | ||
38 | //} | ||
39 | |||
40 | //public override void Start() | ||
41 | //{ | ||
42 | // throw new NotImplementedException(); | ||
43 | //} | ||
44 | } | 39 | } |
45 | } \ No newline at end of file | 40 | } \ No newline at end of file |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs b/OpenSim/ScriptEngine/Shared/IScriptEngineComponent.cs index 4708554..3c977a5 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs +++ b/OpenSim/ScriptEngine/Shared/IScriptEngineComponent.cs | |||
@@ -28,18 +28,9 @@ using System; | |||
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Text; | 29 | using System.Text; |
30 | 30 | ||
31 | namespace OpenSim.ApplicationPlugins.ScriptEngine.Components | 31 | namespace OpenSim.ScriptEngine.Shared |
32 | { | 32 | { |
33 | public abstract class CommandBase: ComponentBase | 33 | public interface IScriptEngineComponent |
34 | { | 34 | { |
35 | //public override iProviderBase CreateInstance() | ||
36 | //{ | ||
37 | // throw new NotImplementedException(); | ||
38 | //} | ||
39 | |||
40 | //public override void Start() | ||
41 | //{ | ||
42 | // throw new NotImplementedException(); | ||
43 | //} | ||
44 | } | 35 | } |
45 | } \ No newline at end of file | 36 | } \ No newline at end of file |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs b/OpenSim/ScriptEngine/Shared/IScriptExecutor.cs index e62d1f2..77bea13 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs +++ b/OpenSim/ScriptEngine/Shared/IScriptExecutor.cs | |||
@@ -27,19 +27,13 @@ | |||
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Text; | 29 | using System.Text; |
30 | using OpenSim.ScriptEngine.Shared; | ||
30 | 31 | ||
31 | namespace OpenSim.ApplicationPlugins.ScriptEngine.Components | 32 | namespace OpenSim.ScriptEngine.Shared |
32 | { | 33 | { |
33 | public abstract class CompilerBase: ComponentBase | 34 | public interface IScriptExecutor : IScriptEngineComponent, IScriptEngineRegionComponent |
34 | { | 35 | { |
35 | //public override iProviderBase CreateInstance() | 36 | void ExecuteCommand(ref ScriptStructure scriptContainer, EventParams p); |
36 | //{ | 37 | void ExecuteCommand(EventParams p); |
37 | // throw new NotImplementedException(); | ||
38 | //} | ||
39 | |||
40 | //public override void Start() | ||
41 | //{ | ||
42 | // throw new NotImplementedException(); | ||
43 | //} | ||
44 | } | 38 | } |
45 | } \ No newline at end of file | 39 | } \ No newline at end of file |
diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs b/OpenSim/ScriptEngine/Shared/IScriptScheduler.cs index 9d5aff0..3e56c12 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs +++ b/OpenSim/ScriptEngine/Shared/IScriptScheduler.cs | |||
@@ -27,19 +27,15 @@ | |||
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Text; | 29 | using System.Text; |
30 | using OpenMetaverse; | ||
31 | using OpenSim.ScriptEngine.Shared; | ||
30 | 32 | ||
31 | namespace OpenSim.ApplicationPlugins.ScriptEngine.Components | 33 | namespace OpenSim.ScriptEngine.Shared |
32 | { | 34 | { |
33 | public abstract class SchedulerBase: ComponentBase | 35 | public interface IScriptScheduler : IScriptEngineComponent |
34 | { | 36 | { |
35 | //public override iProviderBase CreateInstance() | 37 | void AddScript(ScriptStructure script); |
36 | //{ | 38 | void Removecript(uint id, UUID itemID); |
37 | // throw new NotImplementedException(); | 39 | void Close(); |
38 | //} | ||
39 | |||
40 | //public override void Start() | ||
41 | //{ | ||
42 | // throw new NotImplementedException(); | ||
43 | //} | ||
44 | } | 40 | } |
45 | } \ No newline at end of file | 41 | } \ No newline at end of file |