diff options
53 files changed, 2997 insertions, 573 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/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs index 17af2b0..30ba642 100644 --- a/OpenSim/Data/SQLite/SQLiteAssetData.cs +++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs | |||
@@ -125,10 +125,10 @@ namespace OpenSim.Data.SQLite | |||
125 | /// <param name="asset">Asset Base</param> | 125 | /// <param name="asset">Asset Base</param> |
126 | override public void CreateAsset(AssetBase asset) | 126 | override public void CreateAsset(AssetBase asset) |
127 | { | 127 | { |
128 | m_log.Info("[ASSET DB]: Creating Asset " + Util.ToRawUuidString(asset.FullID)); | 128 | //m_log.Info("[ASSET DB]: Creating Asset " + Util.ToRawUuidString(asset.FullID)); |
129 | if (ExistsAsset(asset.FullID)) | 129 | if (ExistsAsset(asset.FullID)) |
130 | { | 130 | { |
131 | m_log.Info("[ASSET DB]: Asset exists already, ignoring."); | 131 | //m_log.Info("[ASSET DB]: Asset exists already, ignoring."); |
132 | } | 132 | } |
133 | else | 133 | else |
134 | { | 134 | { |
diff --git a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs index cf601f1..6fe9fb4 100644 --- a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs +++ b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs | |||
@@ -52,7 +52,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem | |||
52 | 52 | ||
53 | if (!String.IsNullOrEmpty(path)) | 53 | if (!String.IsNullOrEmpty(path)) |
54 | { | 54 | { |
55 | m_log.InfoFormat("[ASSETS]: Loading: [{0}][{1}]", name, path); | 55 | //m_log.InfoFormat("[ASSETS]: Loading: [{0}][{1}]", name, path); |
56 | 56 | ||
57 | LoadAsset(asset, isImage, path); | 57 | LoadAsset(asset, isImage, path); |
58 | } | 58 | } |
@@ -131,7 +131,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem | |||
131 | /// <param name="assets"></param> | 131 | /// <param name="assets"></param> |
132 | protected static void LoadXmlAssetSet(string assetSetPath, List<AssetBase> assets) | 132 | protected static void LoadXmlAssetSet(string assetSetPath, List<AssetBase> assets) |
133 | { | 133 | { |
134 | m_log.InfoFormat("[ASSETS]: Loading asset set {0}", assetSetPath); | 134 | //m_log.InfoFormat("[ASSETS]: Loading asset set {0}", assetSetPath); |
135 | 135 | ||
136 | if (File.Exists(assetSetPath)) | 136 | if (File.Exists(assetSetPath)) |
137 | { | 137 | { |
diff --git a/OpenSim/Framework/PluginLoader.cs b/OpenSim/Framework/PluginLoader.cs index 497d9f5..440e0d5 100644 --- a/OpenSim/Framework/PluginLoader.cs +++ b/OpenSim/Framework/PluginLoader.cs | |||
@@ -171,6 +171,7 @@ namespace OpenSim.Framework | |||
171 | if (filters.ContainsKey (ext)) | 171 | if (filters.ContainsKey (ext)) |
172 | filter = filters [ext]; | 172 | filter = filters [ext]; |
173 | 173 | ||
174 | List<T> loadedPlugins = new List<T>(); | ||
174 | foreach (PluginExtensionNode node in AddinManager.GetExtensionNodes (ext)) | 175 | foreach (PluginExtensionNode node in AddinManager.GetExtensionNodes (ext)) |
175 | { | 176 | { |
176 | log.Info("[PLUGINS]: Trying plugin " + node.Path); | 177 | log.Info("[PLUGINS]: Trying plugin " + node.Path); |
@@ -179,8 +180,15 @@ namespace OpenSim.Framework | |||
179 | continue; | 180 | continue; |
180 | 181 | ||
181 | T plugin = (T) node.CreateInstance(); | 182 | T plugin = (T) node.CreateInstance(); |
182 | Initialiser.Initialise (plugin); | 183 | loadedPlugins.Add(plugin); |
183 | Plugins.Add (plugin); | 184 | } |
185 | // We do Initialise() in a second loop after CreateInstance | ||
186 | // So that modules who need init before others can do it | ||
187 | // Example: Script Engine Component System needs to load its components before RegionLoader starts | ||
188 | foreach (T plugin in loadedPlugins) | ||
189 | { | ||
190 | Initialiser.Initialise(plugin); | ||
191 | Plugins.Add(plugin); | ||
184 | } | 192 | } |
185 | } | 193 | } |
186 | } | 194 | } |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 69e8021..ebe4028 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -313,7 +313,6 @@ namespace OpenSim | |||
313 | /// Execute the region creation process. This includes setting up scene infrastructure. | 313 | /// Execute the region creation process. This includes setting up scene infrastructure. |
314 | /// </summary> | 314 | /// </summary> |
315 | /// <param name="regionInfo"></param> | 315 | /// <param name="regionInfo"></param> |
316 | /// <param name="portadd_flag"></param> | ||
317 | /// <returns></returns> | 316 | /// <returns></returns> |
318 | public IClientNetworkServer CreateRegion(RegionInfo regionInfo) | 317 | public IClientNetworkServer CreateRegion(RegionInfo regionInfo) |
319 | { | 318 | { |
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs index 3f49422..50be0e7 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs | |||
@@ -26,10 +26,8 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
31 | using OpenSim.Region.ScriptEngine.Interfaces; | 30 | using OpenSim.Region.ScriptEngine.Interfaces; |
32 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
33 | 31 | ||
34 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | 32 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase |
35 | { | 33 | { |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/Commands_LSL.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/Commands_LSL.cs index 703084c..0b7c894 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/Commands_LSL.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/Commands_LSL.cs | |||
@@ -28,18 +28,13 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Text; | 30 | using System.Text; |
31 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | 31 | using OpenSim.ScriptEngine.Shared; |
32 | 32 | ||
33 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL | 33 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL |
34 | { | 34 | { |
35 | public class Commands_LSL : CommandBase | 35 | public class Commands_LSL : IScriptEngineComponent |
36 | { | 36 | { |
37 | public override void Start() | ||
38 | { | ||
39 | } | ||
40 | 37 | ||
41 | public override void Close() | 38 | |
42 | { | ||
43 | } | ||
44 | } | 39 | } |
45 | } | 40 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_BaseClass.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_BaseClass.cs new file mode 100644 index 0000000..173b259 --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_BaseClass.cs | |||
@@ -0,0 +1,29 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Reflection; | ||
4 | using System.Text; | ||
5 | using log4net; | ||
6 | using OpenSim.ScriptEngine.Shared; | ||
7 | |||
8 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL | ||
9 | { | ||
10 | public class Script : IScriptCommandProvider | ||
11 | { | ||
12 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
13 | |||
14 | public void llSay(int channelID, string text) | ||
15 | { | ||
16 | m_log.InfoFormat("[{0}] llSay({1}, \"{2}\")", "(Commands_LSL)OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL.Script", channelID, text); | ||
17 | } | ||
18 | |||
19 | public void ExecuteCommand(string functionName, params object[] args) | ||
20 | { | ||
21 | |||
22 | } | ||
23 | |||
24 | public string Name | ||
25 | { | ||
26 | get { return "SECS.DotNetEngine.Commands_LSL.Script"; } | ||
27 | } | ||
28 | } | ||
29 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_Constants.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_Constants.cs new file mode 100644 index 0000000..9dd3c2f --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_Constants.cs | |||
@@ -0,0 +1,498 @@ | |||
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 | |||
28 | using System; | ||
29 | using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; | ||
30 | using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; | ||
31 | using LSLInteger = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; | ||
32 | |||
33 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL | ||
34 | { | ||
35 | public class LSL_Constants : MarshalByRefObject | ||
36 | { | ||
37 | // LSL CONSTANTS | ||
38 | public static readonly LSLInteger TRUE = new LSLInteger(1); | ||
39 | public static readonly LSLInteger FALSE = new LSLInteger(0); | ||
40 | |||
41 | public const int STATUS_PHYSICS = 1; | ||
42 | public const int STATUS_ROTATE_X = 2; | ||
43 | public const int STATUS_ROTATE_Y = 4; | ||
44 | public const int STATUS_ROTATE_Z = 8; | ||
45 | public const int STATUS_PHANTOM = 16; | ||
46 | public const int STATUS_SANDBOX = 32; | ||
47 | public const int STATUS_BLOCK_GRAB = 64; | ||
48 | public const int STATUS_DIE_AT_EDGE = 128; | ||
49 | public const int STATUS_RETURN_AT_EDGE = 256; | ||
50 | public const int STATUS_CAST_SHADOWS = 512; | ||
51 | |||
52 | public const int AGENT = 1; | ||
53 | public const int ACTIVE = 2; | ||
54 | public const int PASSIVE = 4; | ||
55 | public const int SCRIPTED = 8; | ||
56 | |||
57 | public const int CONTROL_FWD = 1; | ||
58 | public const int CONTROL_BACK = 2; | ||
59 | public const int CONTROL_LEFT = 4; | ||
60 | public const int CONTROL_RIGHT = 8; | ||
61 | public const int CONTROL_UP = 16; | ||
62 | public const int CONTROL_DOWN = 32; | ||
63 | public const int CONTROL_ROT_LEFT = 256; | ||
64 | public const int CONTROL_ROT_RIGHT = 512; | ||
65 | public const int CONTROL_LBUTTON = 268435456; | ||
66 | public const int CONTROL_ML_LBUTTON = 1073741824; | ||
67 | |||
68 | //Permissions | ||
69 | public const int PERMISSION_DEBIT = 2; | ||
70 | public const int PERMISSION_TAKE_CONTROLS = 4; | ||
71 | public const int PERMISSION_REMAP_CONTROLS = 8; | ||
72 | public const int PERMISSION_TRIGGER_ANIMATION = 16; | ||
73 | public const int PERMISSION_ATTACH = 32; | ||
74 | public const int PERMISSION_RELEASE_OWNERSHIP = 64; | ||
75 | public const int PERMISSION_CHANGE_LINKS = 128; | ||
76 | public const int PERMISSION_CHANGE_JOINTS = 256; | ||
77 | public const int PERMISSION_CHANGE_PERMISSIONS = 512; | ||
78 | public const int PERMISSION_TRACK_CAMERA = 1024; | ||
79 | public const int PERMISSION_CONTROL_CAMERA = 2048; | ||
80 | |||
81 | public const int AGENT_FLYING = 1; | ||
82 | public const int AGENT_ATTACHMENTS = 2; | ||
83 | public const int AGENT_SCRIPTED = 4; | ||
84 | public const int AGENT_MOUSELOOK = 8; | ||
85 | public const int AGENT_SITTING = 16; | ||
86 | public const int AGENT_ON_OBJECT = 32; | ||
87 | public const int AGENT_AWAY = 64; | ||
88 | public const int AGENT_WALKING = 128; | ||
89 | public const int AGENT_IN_AIR = 256; | ||
90 | public const int AGENT_TYPING = 512; | ||
91 | public const int AGENT_CROUCHING = 1024; | ||
92 | public const int AGENT_BUSY = 2048; | ||
93 | public const int AGENT_ALWAYS_RUN = 4096; | ||
94 | |||
95 | //Particle Systems | ||
96 | public const int PSYS_PART_INTERP_COLOR_MASK = 1; | ||
97 | public const int PSYS_PART_INTERP_SCALE_MASK = 2; | ||
98 | public const int PSYS_PART_BOUNCE_MASK = 4; | ||
99 | public const int PSYS_PART_WIND_MASK = 8; | ||
100 | public const int PSYS_PART_FOLLOW_SRC_MASK = 16; | ||
101 | public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32; | ||
102 | public const int PSYS_PART_TARGET_POS_MASK = 64; | ||
103 | public const int PSYS_PART_TARGET_LINEAR_MASK = 128; | ||
104 | public const int PSYS_PART_EMISSIVE_MASK = 256; | ||
105 | public const int PSYS_PART_FLAGS = 0; | ||
106 | public const int PSYS_PART_START_COLOR = 1; | ||
107 | public const int PSYS_PART_START_ALPHA = 2; | ||
108 | public const int PSYS_PART_END_COLOR = 3; | ||
109 | public const int PSYS_PART_END_ALPHA = 4; | ||
110 | public const int PSYS_PART_START_SCALE = 5; | ||
111 | public const int PSYS_PART_END_SCALE = 6; | ||
112 | public const int PSYS_PART_MAX_AGE = 7; | ||
113 | public const int PSYS_SRC_ACCEL = 8; | ||
114 | public const int PSYS_SRC_PATTERN = 9; | ||
115 | public const int PSYS_SRC_INNERANGLE = 10; | ||
116 | public const int PSYS_SRC_OUTERANGLE = 11; | ||
117 | public const int PSYS_SRC_TEXTURE = 12; | ||
118 | public const int PSYS_SRC_BURST_RATE = 13; | ||
119 | public const int PSYS_SRC_BURST_PART_COUNT = 15; | ||
120 | public const int PSYS_SRC_BURST_RADIUS = 16; | ||
121 | public const int PSYS_SRC_BURST_SPEED_MIN = 17; | ||
122 | public const int PSYS_SRC_BURST_SPEED_MAX = 18; | ||
123 | public const int PSYS_SRC_MAX_AGE = 19; | ||
124 | public const int PSYS_SRC_TARGET_KEY = 20; | ||
125 | public const int PSYS_SRC_OMEGA = 21; | ||
126 | public const int PSYS_SRC_ANGLE_BEGIN = 22; | ||
127 | public const int PSYS_SRC_ANGLE_END = 23; | ||
128 | public const int PSYS_SRC_PATTERN_DROP = 1; | ||
129 | public const int PSYS_SRC_PATTERN_EXPLODE = 2; | ||
130 | public const int PSYS_SRC_PATTERN_ANGLE = 4; | ||
131 | public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8; | ||
132 | public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16; | ||
133 | |||
134 | public const int VEHICLE_TYPE_NONE = 0; | ||
135 | public const int VEHICLE_TYPE_SLED = 1; | ||
136 | public const int VEHICLE_TYPE_CAR = 2; | ||
137 | public const int VEHICLE_TYPE_BOAT = 3; | ||
138 | public const int VEHICLE_TYPE_AIRPLANE = 4; | ||
139 | public const int VEHICLE_TYPE_BALLOON = 5; | ||
140 | public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16; | ||
141 | public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17; | ||
142 | public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18; | ||
143 | public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20; | ||
144 | public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19; | ||
145 | public const int VEHICLE_HOVER_HEIGHT = 24; | ||
146 | public const int VEHICLE_HOVER_EFFICIENCY = 25; | ||
147 | public const int VEHICLE_HOVER_TIMESCALE = 26; | ||
148 | public const int VEHICLE_BUOYANCY = 27; | ||
149 | public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28; | ||
150 | public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29; | ||
151 | public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30; | ||
152 | public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31; | ||
153 | public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32; | ||
154 | public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33; | ||
155 | public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34; | ||
156 | public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35; | ||
157 | public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36; | ||
158 | public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37; | ||
159 | public const int VEHICLE_BANKING_EFFICIENCY = 38; | ||
160 | public const int VEHICLE_BANKING_MIX = 39; | ||
161 | public const int VEHICLE_BANKING_TIMESCALE = 40; | ||
162 | public const int VEHICLE_REFERENCE_FRAME = 44; | ||
163 | public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1; | ||
164 | public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2; | ||
165 | public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4; | ||
166 | public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8; | ||
167 | public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16; | ||
168 | public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32; | ||
169 | public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64; | ||
170 | public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128; | ||
171 | public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256; | ||
172 | public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512; | ||
173 | |||
174 | public const int INVENTORY_ALL = -1; | ||
175 | public const int INVENTORY_NONE = -1; | ||
176 | public const int INVENTORY_TEXTURE = 0; | ||
177 | public const int INVENTORY_SOUND = 1; | ||
178 | public const int INVENTORY_LANDMARK = 3; | ||
179 | public const int INVENTORY_CLOTHING = 5; | ||
180 | public const int INVENTORY_OBJECT = 6; | ||
181 | public const int INVENTORY_NOTECARD = 7; | ||
182 | public const int INVENTORY_SCRIPT = 10; | ||
183 | public const int INVENTORY_BODYPART = 13; | ||
184 | public const int INVENTORY_ANIMATION = 20; | ||
185 | public const int INVENTORY_GESTURE = 21; | ||
186 | |||
187 | public const int ATTACH_CHEST = 1; | ||
188 | public const int ATTACH_HEAD = 2; | ||
189 | public const int ATTACH_LSHOULDER = 3; | ||
190 | public const int ATTACH_RSHOULDER = 4; | ||
191 | public const int ATTACH_LHAND = 5; | ||
192 | public const int ATTACH_RHAND = 6; | ||
193 | public const int ATTACH_LFOOT = 7; | ||
194 | public const int ATTACH_RFOOT = 8; | ||
195 | public const int ATTACH_BACK = 9; | ||
196 | public const int ATTACH_PELVIS = 10; | ||
197 | public const int ATTACH_MOUTH = 11; | ||
198 | public const int ATTACH_CHIN = 12; | ||
199 | public const int ATTACH_LEAR = 13; | ||
200 | public const int ATTACH_REAR = 14; | ||
201 | public const int ATTACH_LEYE = 15; | ||
202 | public const int ATTACH_REYE = 16; | ||
203 | public const int ATTACH_NOSE = 17; | ||
204 | public const int ATTACH_RUARM = 18; | ||
205 | public const int ATTACH_RLARM = 19; | ||
206 | public const int ATTACH_LUARM = 20; | ||
207 | public const int ATTACH_LLARM = 21; | ||
208 | public const int ATTACH_RHIP = 22; | ||
209 | public const int ATTACH_RULEG = 23; | ||
210 | public const int ATTACH_RLLEG = 24; | ||
211 | public const int ATTACH_LHIP = 25; | ||
212 | public const int ATTACH_LULEG = 26; | ||
213 | public const int ATTACH_LLLEG = 27; | ||
214 | public const int ATTACH_BELLY = 28; | ||
215 | public const int ATTACH_RPEC = 29; | ||
216 | public const int ATTACH_LPEC = 30; | ||
217 | |||
218 | public const int LAND_LEVEL = 0; | ||
219 | public const int LAND_RAISE = 1; | ||
220 | public const int LAND_LOWER = 2; | ||
221 | public const int LAND_SMOOTH = 3; | ||
222 | public const int LAND_NOISE = 4; | ||
223 | public const int LAND_REVERT = 5; | ||
224 | public const int LAND_SMALL_BRUSH = 1; | ||
225 | public const int LAND_MEDIUM_BRUSH = 2; | ||
226 | public const int LAND_LARGE_BRUSH = 3; | ||
227 | |||
228 | //Agent Dataserver | ||
229 | public const int DATA_ONLINE = 1; | ||
230 | public const int DATA_NAME = 2; | ||
231 | public const int DATA_BORN = 3; | ||
232 | public const int DATA_RATING = 4; | ||
233 | public const int DATA_SIM_POS = 5; | ||
234 | public const int DATA_SIM_STATUS = 6; | ||
235 | public const int DATA_SIM_RATING = 7; | ||
236 | public const int DATA_PAYINFO = 8; | ||
237 | public const int DATA_SIM_RELEASE = 128; | ||
238 | |||
239 | public const int ANIM_ON = 1; | ||
240 | public const int LOOP = 2; | ||
241 | public const int REVERSE = 4; | ||
242 | public const int PING_PONG = 8; | ||
243 | public const int SMOOTH = 16; | ||
244 | public const int ROTATE = 32; | ||
245 | public const int SCALE = 64; | ||
246 | public const int ALL_SIDES = -1; | ||
247 | public const int LINK_SET = -1; | ||
248 | public const int LINK_ROOT = 1; | ||
249 | public const int LINK_ALL_OTHERS = -2; | ||
250 | public const int LINK_ALL_CHILDREN = -3; | ||
251 | public const int LINK_THIS = -4; | ||
252 | public const int CHANGED_INVENTORY = 1; | ||
253 | public const int CHANGED_COLOR = 2; | ||
254 | public const int CHANGED_SHAPE = 4; | ||
255 | public const int CHANGED_SCALE = 8; | ||
256 | public const int CHANGED_TEXTURE = 16; | ||
257 | public const int CHANGED_LINK = 32; | ||
258 | public const int CHANGED_ALLOWED_DROP = 64; | ||
259 | public const int CHANGED_OWNER = 128; | ||
260 | public const int CHANGED_REGION_RESTART = 256; | ||
261 | public const int CHANGED_REGION = 512; | ||
262 | public const int CHANGED_TELEPORT = 1024; | ||
263 | public const int TYPE_INVALID = 0; | ||
264 | public const int TYPE_INTEGER = 1; | ||
265 | public const int TYPE_FLOAT = 2; | ||
266 | public const int TYPE_STRING = 3; | ||
267 | public const int TYPE_KEY = 4; | ||
268 | public const int TYPE_VECTOR = 5; | ||
269 | public const int TYPE_ROTATION = 6; | ||
270 | |||
271 | //XML RPC Remote Data Channel | ||
272 | public const int REMOTE_DATA_CHANNEL = 1; | ||
273 | public const int REMOTE_DATA_REQUEST = 2; | ||
274 | public const int REMOTE_DATA_REPLY = 3; | ||
275 | |||
276 | //llHTTPRequest | ||
277 | public const int HTTP_METHOD = 0; | ||
278 | public const int HTTP_MIMETYPE = 1; | ||
279 | public const int HTTP_BODY_MAXLENGTH = 2; | ||
280 | public const int HTTP_VERIFY_CERT = 3; | ||
281 | |||
282 | public const int PRIM_MATERIAL = 2; | ||
283 | public const int PRIM_PHYSICS = 3; | ||
284 | public const int PRIM_TEMP_ON_REZ = 4; | ||
285 | public const int PRIM_PHANTOM = 5; | ||
286 | public const int PRIM_POSITION = 6; | ||
287 | public const int PRIM_SIZE = 7; | ||
288 | public const int PRIM_ROTATION = 8; | ||
289 | public const int PRIM_TYPE = 9; | ||
290 | public const int PRIM_TEXTURE = 17; | ||
291 | public const int PRIM_COLOR = 18; | ||
292 | public const int PRIM_BUMP_SHINY = 19; | ||
293 | public const int PRIM_FULLBRIGHT = 20; | ||
294 | public const int PRIM_FLEXIBLE = 21; | ||
295 | public const int PRIM_TEXGEN = 22; | ||
296 | public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake | ||
297 | public const int PRIM_POINT_LIGHT = 23; // Huh? | ||
298 | public const int PRIM_GLOW = 25; | ||
299 | public const int PRIM_TEXGEN_DEFAULT = 0; | ||
300 | public const int PRIM_TEXGEN_PLANAR = 1; | ||
301 | |||
302 | public const int PRIM_TYPE_BOX = 0; | ||
303 | public const int PRIM_TYPE_CYLINDER = 1; | ||
304 | public const int PRIM_TYPE_PRISM = 2; | ||
305 | public const int PRIM_TYPE_SPHERE = 3; | ||
306 | public const int PRIM_TYPE_TORUS = 4; | ||
307 | public const int PRIM_TYPE_TUBE = 5; | ||
308 | public const int PRIM_TYPE_RING = 6; | ||
309 | public const int PRIM_TYPE_SCULPT = 7; | ||
310 | |||
311 | public const int PRIM_HOLE_DEFAULT = 0; | ||
312 | public const int PRIM_HOLE_CIRCLE = 16; | ||
313 | public const int PRIM_HOLE_SQUARE = 32; | ||
314 | public const int PRIM_HOLE_TRIANGLE = 48; | ||
315 | |||
316 | public const int PRIM_MATERIAL_STONE = 0; | ||
317 | public const int PRIM_MATERIAL_METAL = 1; | ||
318 | public const int PRIM_MATERIAL_GLASS = 2; | ||
319 | public const int PRIM_MATERIAL_WOOD = 3; | ||
320 | public const int PRIM_MATERIAL_FLESH = 4; | ||
321 | public const int PRIM_MATERIAL_PLASTIC = 5; | ||
322 | public const int PRIM_MATERIAL_RUBBER = 6; | ||
323 | public const int PRIM_MATERIAL_LIGHT = 7; | ||
324 | |||
325 | public const int PRIM_SHINY_NONE = 0; | ||
326 | public const int PRIM_SHINY_LOW = 1; | ||
327 | public const int PRIM_SHINY_MEDIUM = 2; | ||
328 | public const int PRIM_SHINY_HIGH = 3; | ||
329 | public const int PRIM_BUMP_NONE = 0; | ||
330 | public const int PRIM_BUMP_BRIGHT = 1; | ||
331 | public const int PRIM_BUMP_DARK = 2; | ||
332 | public const int PRIM_BUMP_WOOD = 3; | ||
333 | public const int PRIM_BUMP_BARK = 4; | ||
334 | public const int PRIM_BUMP_BRICKS = 5; | ||
335 | public const int PRIM_BUMP_CHECKER = 6; | ||
336 | public const int PRIM_BUMP_CONCRETE = 7; | ||
337 | public const int PRIM_BUMP_TILE = 8; | ||
338 | public const int PRIM_BUMP_STONE = 9; | ||
339 | public const int PRIM_BUMP_DISKS = 10; | ||
340 | public const int PRIM_BUMP_GRAVEL = 11; | ||
341 | public const int PRIM_BUMP_BLOBS = 12; | ||
342 | public const int PRIM_BUMP_SIDING = 13; | ||
343 | public const int PRIM_BUMP_LARGETILE = 14; | ||
344 | public const int PRIM_BUMP_STUCCO = 15; | ||
345 | public const int PRIM_BUMP_SUCTION = 16; | ||
346 | public const int PRIM_BUMP_WEAVE = 17; | ||
347 | |||
348 | public const int PRIM_SCULPT_TYPE_SPHERE = 1; | ||
349 | public const int PRIM_SCULPT_TYPE_TORUS = 2; | ||
350 | public const int PRIM_SCULPT_TYPE_PLANE = 3; | ||
351 | public const int PRIM_SCULPT_TYPE_CYLINDER = 4; | ||
352 | |||
353 | public const int MASK_BASE = 0; | ||
354 | public const int MASK_OWNER = 1; | ||
355 | public const int MASK_GROUP = 2; | ||
356 | public const int MASK_EVERYONE = 3; | ||
357 | public const int MASK_NEXT = 4; | ||
358 | |||
359 | public const int PERM_TRANSFER = 8192; | ||
360 | public const int PERM_MODIFY = 16384; | ||
361 | public const int PERM_COPY = 32768; | ||
362 | public const int PERM_MOVE = 524288; | ||
363 | public const int PERM_ALL = 2147483647; | ||
364 | |||
365 | public const int PARCEL_MEDIA_COMMAND_STOP = 0; | ||
366 | public const int PARCEL_MEDIA_COMMAND_PAUSE = 1; | ||
367 | public const int PARCEL_MEDIA_COMMAND_PLAY = 2; | ||
368 | public const int PARCEL_MEDIA_COMMAND_LOOP = 3; | ||
369 | public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4; | ||
370 | public const int PARCEL_MEDIA_COMMAND_URL = 5; | ||
371 | public const int PARCEL_MEDIA_COMMAND_TIME = 6; | ||
372 | public const int PARCEL_MEDIA_COMMAND_AGENT = 7; | ||
373 | public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8; | ||
374 | public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9; | ||
375 | public const int PARCEL_MEDIA_COMMAND_TYPE = 10; | ||
376 | public const int PARCEL_MEDIA_COMMAND_SIZE = 11; | ||
377 | public const int PARCEL_MEDIA_COMMAND_DESC = 12; | ||
378 | |||
379 | public const int PARCEL_FLAG_ALLOW_FLY = 0x1; // parcel allows flying | ||
380 | public const int PARCEL_FLAG_ALLOW_SCRIPTS = 0x2; // parcel allows outside scripts | ||
381 | public const int PARCEL_FLAG_ALLOW_LANDMARK = 0x8; // parcel allows landmarks to be created | ||
382 | public const int PARCEL_FLAG_ALLOW_TERRAFORM = 0x10; // parcel allows anyone to terraform the land | ||
383 | public const int PARCEL_FLAG_ALLOW_DAMAGE = 0x20; // parcel allows damage | ||
384 | public const int PARCEL_FLAG_ALLOW_CREATE_OBJECTS = 0x40; // parcel allows anyone to create objects | ||
385 | public const int PARCEL_FLAG_USE_ACCESS_GROUP = 0x100; // parcel limits access to a group | ||
386 | public const int PARCEL_FLAG_USE_ACCESS_LIST = 0x200; // parcel limits access to a list of residents | ||
387 | public const int PARCEL_FLAG_USE_BAN_LIST = 0x400; // parcel uses a ban list, including restricting access based on payment info | ||
388 | public const int PARCEL_FLAG_USE_LAND_PASS_LIST = 0x800; // parcel allows passes to be purchased | ||
389 | public const int PARCEL_FLAG_LOCAL_SOUND_ONLY = 0x8000; // parcel restricts spatialized sound to the parcel | ||
390 | public const int PARCEL_FLAG_RESTRICT_PUSHOBJECT = 0x200000; // parcel restricts llPushObject | ||
391 | public const int PARCEL_FLAG_ALLOW_GROUP_SCRIPTS = 0x2000000; // parcel allows scripts owned by group | ||
392 | public const int PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS = 0x4000000; // parcel allows group object creation | ||
393 | public const int PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY = 0x8000000; // parcel allows objects owned by any user to enter | ||
394 | public const int PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY = 0x10000000; // parcel allows with the same group to enter | ||
395 | |||
396 | public const int REGION_FLAG_ALLOW_DAMAGE = 0x1; // region is entirely damage enabled | ||
397 | public const int REGION_FLAG_FIXED_SUN = 0x10; // region has a fixed sun position | ||
398 | public const int REGION_FLAG_BLOCK_TERRAFORM = 0x40; // region terraforming disabled | ||
399 | public const int REGION_FLAG_SANDBOX = 0x100; // region is a sandbox | ||
400 | public const int REGION_FLAG_DISABLE_COLLISIONS = 0x1000; // region has disabled collisions | ||
401 | public const int REGION_FLAG_DISABLE_PHYSICS = 0x4000; // region has disabled physics | ||
402 | public const int REGION_FLAG_BLOCK_FLY = 0x80000; // region blocks flying | ||
403 | public const int REGION_FLAG_ALLOW_DIRECT_TELEPORT = 0x100000; // region allows direct teleports | ||
404 | public const int REGION_FLAG_RESTRICT_PUSHOBJECT = 0x400000; // region restricts llPushObject | ||
405 | |||
406 | public const int PAY_HIDE = -1; | ||
407 | public const int PAY_DEFAULT = -2; | ||
408 | |||
409 | public const string NULL_KEY = "00000000-0000-0000-0000-000000000000"; | ||
410 | public const string EOF = "\n\n\n"; | ||
411 | public const double PI = 3.14159274f; | ||
412 | public const double TWO_PI = 6.28318548f; | ||
413 | public const double PI_BY_TWO = 1.57079637f; | ||
414 | public const double DEG_TO_RAD = 0.01745329238f; | ||
415 | public const double RAD_TO_DEG = 57.29578f; | ||
416 | public const double SQRT2 = 1.414213538f; | ||
417 | public const int STRING_TRIM_HEAD = 1; | ||
418 | public const int STRING_TRIM_TAIL = 2; | ||
419 | public const int STRING_TRIM = 3; | ||
420 | public const int LIST_STAT_RANGE = 0; | ||
421 | public const int LIST_STAT_MIN = 1; | ||
422 | public const int LIST_STAT_MAX = 2; | ||
423 | public const int LIST_STAT_MEAN = 3; | ||
424 | public const int LIST_STAT_MEDIAN = 4; | ||
425 | public const int LIST_STAT_STD_DEV = 5; | ||
426 | public const int LIST_STAT_SUM = 6; | ||
427 | public const int LIST_STAT_SUM_SQUARES = 7; | ||
428 | public const int LIST_STAT_NUM_COUNT = 8; | ||
429 | public const int LIST_STAT_GEOMETRIC_MEAN = 9; | ||
430 | public const int LIST_STAT_HARMONIC_MEAN = 100; | ||
431 | |||
432 | //ParcelPrim Categories | ||
433 | public const int PARCEL_COUNT_TOTAL = 0; | ||
434 | public const int PARCEL_COUNT_OWNER = 1; | ||
435 | public const int PARCEL_COUNT_GROUP = 2; | ||
436 | public const int PARCEL_COUNT_OTHER = 3; | ||
437 | public const int PARCEL_COUNT_SELECTED = 4; | ||
438 | public const int PARCEL_COUNT_TEMP = 5; | ||
439 | |||
440 | public const int DEBUG_CHANNEL = 0x7FFFFFFF; | ||
441 | public const int PUBLIC_CHANNEL = 0x00000000; | ||
442 | |||
443 | public const int OBJECT_NAME = 1; | ||
444 | public const int OBJECT_DESC = 2; | ||
445 | public const int OBJECT_POS = 3; | ||
446 | public const int OBJECT_ROT = 4; | ||
447 | public const int OBJECT_VELOCITY = 5; | ||
448 | public const int OBJECT_OWNER = 6; | ||
449 | public const int OBJECT_GROUP = 7; | ||
450 | public const int OBJECT_CREATOR = 8; | ||
451 | |||
452 | // Can not be public const? | ||
453 | public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0); | ||
454 | public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0); | ||
455 | |||
456 | // constants for llSetCameraParams | ||
457 | public const int CAMERA_PITCH = 0; | ||
458 | public const int CAMERA_FOCUS_OFFSET = 1; | ||
459 | public const int CAMERA_FOCUS_OFFSET_X = 2; | ||
460 | public const int CAMERA_FOCUS_OFFSET_Y = 3; | ||
461 | public const int CAMERA_FOCUS_OFFSET_Z = 4; | ||
462 | public const int CAMERA_POSITION_LAG = 5; | ||
463 | public const int CAMERA_FOCUS_LAG = 6; | ||
464 | public const int CAMERA_DISTANCE = 7; | ||
465 | public const int CAMERA_BEHINDNESS_ANGLE = 8; | ||
466 | public const int CAMERA_BEHINDNESS_LAG = 9; | ||
467 | public const int CAMERA_POSITION_THRESHOLD = 10; | ||
468 | public const int CAMERA_FOCUS_THRESHOLD = 11; | ||
469 | public const int CAMERA_ACTIVE = 12; | ||
470 | public const int CAMERA_POSITION = 13; | ||
471 | public const int CAMERA_POSITION_X = 14; | ||
472 | public const int CAMERA_POSITION_Y = 15; | ||
473 | public const int CAMERA_POSITION_Z = 16; | ||
474 | public const int CAMERA_FOCUS = 17; | ||
475 | public const int CAMERA_FOCUS_X = 18; | ||
476 | public const int CAMERA_FOCUS_Y = 19; | ||
477 | public const int CAMERA_FOCUS_Z = 20; | ||
478 | public const int CAMERA_POSITION_LOCKED = 21; | ||
479 | public const int CAMERA_FOCUS_LOCKED = 22; | ||
480 | |||
481 | // constants for llGetParcelDetails | ||
482 | public const int PARCEL_DETAILS_NAME = 0; | ||
483 | public const int PARCEL_DETAILS_DESC = 1; | ||
484 | public const int PARCEL_DETAILS_OWNER = 2; | ||
485 | public const int PARCEL_DETAILS_GROUP = 3; | ||
486 | public const int PARCEL_DETAILS_AREA = 4; | ||
487 | |||
488 | // constants for llSetClickAction | ||
489 | public const int CLICK_ACTION_NONE = 0; | ||
490 | public const int CLICK_ACTION_TOUCH = 0; | ||
491 | public const int CLICK_ACTION_SIT = 1; | ||
492 | public const int CLICK_ACTION_BUY = 2; | ||
493 | public const int CLICK_ACTION_PAY = 3; | ||
494 | public const int CLICK_ACTION_OPEN = 4; | ||
495 | public const int CLICK_ACTION_PLAY = 5; | ||
496 | public const int CLICK_ACTION_OPEN_MEDIA = 6; | ||
497 | } | ||
498 | } | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL/Commands_OSSL.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL/Commands_OSSL.cs index 6ba0c63..6b5dc14 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL/Commands_OSSL.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL/Commands_OSSL.cs | |||
@@ -28,18 +28,17 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Text; | 30 | using System.Text; |
31 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | 31 | using OpenSim.ScriptEngine.Shared; |
32 | 32 | ||
33 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL | 33 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL |
34 | { | 34 | { |
35 | public class Commands_OSSL: CommandBase | 35 | public class Commands_OSSL : IScriptEngineComponent |
36 | { | 36 | { |
37 | public override void Start() | 37 | private RegionInfoStructure CurrentRegion; |
38 | public void Initialize(RegionInfoStructure currentRegion) | ||
38 | { | 39 | { |
40 | CurrentRegion = currentRegion; | ||
39 | } | 41 | } |
40 | 42 | ||
41 | public override void Close() | ||
42 | { | ||
43 | } | ||
44 | } | 43 | } |
45 | } | 44 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/CILCompiler.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/CILCompiler.cs new file mode 100644 index 0000000..e221e1b --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/CILCompiler.cs | |||
@@ -0,0 +1,186 @@ | |||
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.CodeDom.Compiler; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Reflection; | ||
32 | using System.Text.RegularExpressions; | ||
33 | using log4net; | ||
34 | using OpenSim.ScriptEngine.Shared; | ||
35 | using ScriptAssemblies; | ||
36 | |||
37 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers | ||
38 | { | ||
39 | public abstract class CILCompiler | ||
40 | { | ||
41 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
42 | private string ScriptEnginesPath = "ScriptEngines"; | ||
43 | private string Name { get { return "SECS.DotNetEngine.CILCompiler"; } } | ||
44 | internal string ScriptAssemblyName { get; set; } | ||
45 | |||
46 | // Default inherit | ||
47 | protected string ScriptInheritFrom = typeof(ScriptAssemblies.ScriptBase).Name; | ||
48 | private readonly System.Security.Cryptography.MD5CryptoServiceProvider MD5Sum = new System.Security.Cryptography.MD5CryptoServiceProvider(); | ||
49 | protected CodeDomProvider CompileProvider; | ||
50 | |||
51 | //private string[] AppDomainAssemblies = new string[] { "OpenSim.Region.ScriptEngine.Shared.dll", "OpenSim.Region.ScriptEngine.Shared.Script.dll", "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll" }; | ||
52 | private readonly string[] AppDomainAssemblies = new string[] { | ||
53 | Assembly.GetAssembly(typeof(Int32)).Location, | ||
54 | "OpenSim.ScriptEngine.Shared.dll", | ||
55 | "OpenSim.ScriptEngine.Shared.Script.dll", | ||
56 | Path.Combine("ScriptEngines", "OpenSim.Region.ScriptEngine.Shared.dll") | ||
57 | }; | ||
58 | |||
59 | public abstract string PreProcessScript(ref string script); | ||
60 | |||
61 | public CILCompiler() | ||
62 | { | ||
63 | } | ||
64 | |||
65 | private static readonly Regex FileNameFixer = new Regex(@"[^a-zA-Z0-9\.\-]", RegexOptions.Compiled | RegexOptions.Singleline); | ||
66 | public string Compile(ScriptMetaData data, ref string _script) | ||
67 | { | ||
68 | // Add "using", "inherit", default constructor, etc around script. | ||
69 | string script = PreProcessScript(ref _script); | ||
70 | |||
71 | // Get filename based on content | ||
72 | string md5Sum = System.Convert.ToBase64String( | ||
73 | MD5Sum.ComputeHash( | ||
74 | System.Text.Encoding.ASCII.GetBytes(script) | ||
75 | )); | ||
76 | // Unique name for this assembly | ||
77 | ScriptAssemblyName = "SECS_Script_" + FileNameFixer.Replace(md5Sum, "_"); | ||
78 | |||
79 | string OutFile = Path.Combine(ScriptEnginesPath, ScriptAssemblyName + ".dll"); | ||
80 | |||
81 | // Make sure target dir exist | ||
82 | if (!Directory.Exists(ScriptEnginesPath)) | ||
83 | try { Directory.CreateDirectory(ScriptEnginesPath); } | ||
84 | catch { } | ||
85 | |||
86 | // Already exist? No point in recompiling | ||
87 | if (File.Exists(OutFile)) | ||
88 | return OutFile; | ||
89 | |||
90 | // | ||
91 | // Dump source code | ||
92 | // | ||
93 | string dumpFile = OutFile + ".txt"; | ||
94 | try | ||
95 | { | ||
96 | if (File.Exists(dumpFile)) | ||
97 | File.Delete(dumpFile); | ||
98 | File.WriteAllText(dumpFile, script); | ||
99 | } | ||
100 | catch (Exception e) | ||
101 | { | ||
102 | m_log.DebugFormat("[{0}] Exception trying to dump script source code to file \"{1}\": {2}", Name, dumpFile, e.ToString()); | ||
103 | } | ||
104 | |||
105 | // | ||
106 | // COMPILE | ||
107 | // | ||
108 | |||
109 | CompilerParameters parameters = new CompilerParameters(); | ||
110 | parameters.IncludeDebugInformation = true; | ||
111 | string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); | ||
112 | |||
113 | foreach (string file in AppDomainAssemblies) | ||
114 | { | ||
115 | parameters.ReferencedAssemblies.Add(file); | ||
116 | m_log.DebugFormat("[{0}] Adding reference for compile: \"{1}\".", Name, file); | ||
117 | } | ||
118 | //lock (commandProvider) | ||
119 | //{ | ||
120 | // foreach (string key in commandProvider.Keys) | ||
121 | // { | ||
122 | // IScriptCommandProvider cp = commandProvider[key]; | ||
123 | // string | ||
124 | // file = cp.GetType().Assembly.Location; | ||
125 | // parameters.ReferencedAssemblies.Add(file); | ||
126 | // m_log.DebugFormat("[{0}] Loading command provider assembly \"{1}\" into AppDomain: \"{2}\".", Name, | ||
127 | // key, file); | ||
128 | // } | ||
129 | //} | ||
130 | |||
131 | parameters.GenerateExecutable = false; | ||
132 | parameters.OutputAssembly = OutFile; | ||
133 | parameters.IncludeDebugInformation = true; | ||
134 | //parameters.WarningLevel = 1; // Should be 4? | ||
135 | parameters.TreatWarningsAsErrors = false; | ||
136 | |||
137 | // Do compile | ||
138 | CompilerResults results = CompileProvider.CompileAssemblyFromSource(parameters, script); | ||
139 | |||
140 | |||
141 | // | ||
142 | // WARNINGS AND ERRORS | ||
143 | // | ||
144 | //TODO | ||
145 | int display = 5; | ||
146 | if (results.Errors.Count > 0) | ||
147 | { | ||
148 | string errtext = String.Empty; | ||
149 | foreach (CompilerError CompErr in results.Errors) | ||
150 | { | ||
151 | // Show 5 errors max | ||
152 | // | ||
153 | if (display <= 0) | ||
154 | break; | ||
155 | display--; | ||
156 | |||
157 | string severity = "Error"; | ||
158 | if (CompErr.IsWarning) | ||
159 | severity = "Warning"; | ||
160 | |||
161 | //TODO: Implement | ||
162 | KeyValuePair<int, int> lslPos = new KeyValuePair<int, int>(); | ||
163 | |||
164 | //lslPos = "NOT IMPLEMENTED";// FindErrorPosition(CompErr.Line, CompErr.Column); | ||
165 | |||
166 | string text = CompErr.ErrorText; | ||
167 | |||
168 | // The Second Life viewer's script editor begins | ||
169 | // countingn lines and columns at 0, so we subtract 1. | ||
170 | errtext += String.Format("Line ({0},{1}): {4} {2}: {3}\n", | ||
171 | lslPos.Key - 1, lslPos.Value - 1, | ||
172 | CompErr.ErrorNumber, text, severity); | ||
173 | } | ||
174 | |||
175 | if (!File.Exists(OutFile)) | ||
176 | { | ||
177 | throw new Exception(errtext); | ||
178 | } | ||
179 | } | ||
180 | |||
181 | // TODO: Process errors | ||
182 | return OutFile; | ||
183 | } | ||
184 | |||
185 | } | ||
186 | } | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_CS.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_CS.cs index 9c72359..1286dc5 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_CS.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_CS.cs | |||
@@ -25,20 +25,46 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.CodeDom.Compiler; | ||
28 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
29 | using System.Text; | 30 | using System.Text; |
30 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | 31 | using Microsoft.CSharp; |
32 | using OpenSim.ScriptEngine.Shared; | ||
31 | 33 | ||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers | 34 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers |
33 | { | 35 | { |
34 | public class Compiler_CS: CompilerBase | 36 | public class Compiler_CS : CILCompiler, IScriptCompiler |
35 | { | 37 | { |
36 | public override void Start() | 38 | private string[] ScriptUsing = new string[] |
39 | { | ||
40 | "System", | ||
41 | "OpenSim.ScriptEngine.Shared", | ||
42 | "OpenSim.Region.ScriptEngine.Shared", | ||
43 | "System.Collections.Generic" | ||
44 | }; | ||
45 | |||
46 | public Compiler_CS() | ||
37 | { | 47 | { |
48 | CompileProvider = new CSharpCodeProvider(); | ||
38 | } | 49 | } |
39 | 50 | ||
40 | public override void Close() | 51 | public override string PreProcessScript(ref string script) |
41 | { | 52 | { |
53 | string s = ""; | ||
54 | foreach (string u in ScriptUsing) | ||
55 | { | ||
56 | s += "using " + u + ";"; | ||
57 | } | ||
58 | |||
59 | s += "\r\n" | ||
60 | + String.Empty + "namespace ScriptAssemblies { " | ||
61 | + String.Empty + "public class UserScript" + " : " + ScriptInheritFrom + " { \r\n" + | ||
62 | @"public Script() { } " + | ||
63 | script + | ||
64 | "} }\r\n"; | ||
65 | |||
66 | return s; | ||
42 | } | 67 | } |
68 | |||
43 | } | 69 | } |
44 | } | 70 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_JS.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_JS.cs index 3dc8d86..5e9bfba 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_JS.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_JS.cs | |||
@@ -25,20 +25,32 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.CodeDom.Compiler; | ||
28 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
29 | using System.Text; | 30 | using System.Text; |
30 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | 31 | using Microsoft.JScript; |
32 | using OpenSim.ScriptEngine.Shared; | ||
31 | 33 | ||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers | 34 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers |
33 | { | 35 | { |
34 | public class Compiler_JS : CompilerBase | 36 | public class Compiler_JS : CILCompiler, IScriptCompiler |
35 | { | 37 | { |
36 | public override void Start() | 38 | |
39 | public Compiler_JS() | ||
37 | { | 40 | { |
41 | CompileProvider = new JScriptCodeProvider() as CodeDomProvider; | ||
38 | } | 42 | } |
39 | 43 | ||
40 | public override void Close() | 44 | public override string PreProcessScript(ref string script) |
41 | { | 45 | { |
46 | return | ||
47 | "import OpenSim.Region.ScriptEngine.Shared; import System.Collections.Generic;\r\n" + | ||
48 | "package SecondLife {\r\n" + | ||
49 | "class Script extends OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + | ||
50 | script + | ||
51 | "} }\r\n"; | ||
52 | |||
42 | } | 53 | } |
54 | |||
43 | } | 55 | } |
44 | } | 56 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_LSL.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_LSL.cs index 3354ce9..d631c99 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_LSL.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_LSL.cs | |||
@@ -26,19 +26,32 @@ | |||
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; |
30 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | 31 | using OpenSim.ScriptEngine.Components.DotNetEngine.Compilers.LSL; |
32 | using OpenSim.ScriptEngine.Shared; | ||
31 | 33 | ||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers | 34 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers |
33 | { | 35 | { |
34 | public class Compiler_LSL : CompilerBase | 36 | public class Compiler_LSL : IScriptCompiler |
35 | { | 37 | { |
36 | public override void Start() | 38 | |
39 | |||
40 | private readonly Compiler_CS m_Compiler_CS = new Compiler_CS(); | ||
41 | private readonly LSL2CS m_LSL2CS = new LSL2CS(); | ||
42 | |||
43 | public string Compile(ScriptMetaData scriptMetaData, ref string script) | ||
37 | { | 44 | { |
45 | // Convert script to CS | ||
46 | string scriptCS = m_LSL2CS.Convert(ref script); | ||
47 | // Use CS compiler to compile it | ||
48 | return m_Compiler_CS.Compile(scriptMetaData, ref scriptCS); | ||
38 | } | 49 | } |
39 | 50 | ||
40 | public override void Close() | 51 | public string PreProcessScript(ref string script) |
41 | { | 52 | { |
53 | // This is handled by our converter | ||
54 | return script; | ||
42 | } | 55 | } |
43 | } | 56 | } |
44 | } | 57 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_VB.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_VB.cs index c7078cf..3975fa3 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_VB.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_VB.cs | |||
@@ -25,20 +25,32 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.CodeDom.Compiler; | ||
28 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
29 | using System.Text; | 30 | using System.Text; |
30 | using OpenSim.ApplicationPlugins.ScriptEngine.Components; | 31 | using Microsoft.VisualBasic; |
32 | using OpenSim.ScriptEngine.Shared; | ||
31 | 33 | ||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers | 34 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers |
33 | { | 35 | { |
34 | public class Compiler_VB : CompilerBase | 36 | public class Compiler_VB : CILCompiler, IScriptCompiler |
35 | { | 37 | { |
36 | public override void Start() | 38 | |
39 | public Compiler_VB() | ||
37 | { | 40 | { |
41 | CompileProvider = new VBCodeProvider() as CodeDomProvider; | ||
38 | } | 42 | } |
39 | 43 | ||
40 | public override void Close() | 44 | public override string PreProcessScript(ref string script) |
41 | { | 45 | { |
46 | return | ||
47 | "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " + | ||
48 | String.Empty + "NameSpace SecondLife:" + | ||
49 | String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass: " + | ||
50 | "\r\nPublic Sub New()\r\nEnd Sub: " + | ||
51 | script + | ||
52 | ":End Class :End Namespace\r\n"; | ||
42 | } | 53 | } |
43 | } | 54 | } |
44 | } | 55 | } |
56 | |||
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/ScriptEngine/Components/DotNetEngine/Compilers/LSL/LSL2CS.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/LSL/LSL2CS.cs new file mode 100644 index 0000000..0e8052d --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/LSL/LSL2CS.cs | |||
@@ -0,0 +1,44 @@ | |||
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.Region.ScriptEngine.Shared.CodeTools; | ||
31 | |||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers.LSL | ||
33 | { | ||
34 | public class LSL2CS | ||
35 | { | ||
36 | private ICodeConverter Converter = new CSCodeGenerator(); | ||
37 | |||
38 | public string Convert(ref string script) | ||
39 | { | ||
40 | //m_positionMap = ((CSCodeGenerator) LSL_Converter).PositionMap; | ||
41 | return Converter.Convert(script); | ||
42 | } | ||
43 | } | ||
44 | } | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/YP/YP2CS.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/YP/YP2CS.cs new file mode 100644 index 0000000..e25a800 --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/YP/YP2CS.cs | |||
@@ -0,0 +1,54 @@ | |||
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 | |||
31 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers.YP | ||
32 | { | ||
33 | public class YP2CS | ||
34 | { | ||
35 | public static string Convert(ref string script) | ||
36 | { | ||
37 | return script; | ||
38 | } | ||
39 | |||
40 | public string PreProcessScript(ref string script) | ||
41 | { | ||
42 | return | ||
43 | "using OpenSim.Region.ScriptEngine.Shared.YieldProlog; " + | ||
44 | "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" + | ||
45 | String.Empty + "namespace SecondLife { " + | ||
46 | String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + | ||
47 | //@"public Script() { } " + | ||
48 | @"static OpenSim.Region.ScriptEngine.Shared.YieldProlog.YP YP=null; " + | ||
49 | @"public Script() { YP= new OpenSim.Region.ScriptEngine.Shared.YieldProlog.YP(); } " + | ||
50 | script + | ||
51 | "} }\r\n"; | ||
52 | } | ||
53 | } | ||
54 | } | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Events/LSLEventProvider.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Events/LSLEventProvider.cs index b42ceec..794b132 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Events/LSLEventProvider.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Events/LSLEventProvider.cs | |||
@@ -27,19 +27,92 @@ | |||
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.ApplicationPlugins.ScriptEngine.Components; | 30 | using OpenMetaverse; |
31 | using OpenSim.Framework; | ||
32 | using OpenSim.Region.Environment.Scenes; | ||
33 | using OpenSim.Region.ScriptEngine.Shared; | ||
34 | using OpenSim.ScriptEngine.Shared; | ||
35 | using EventParams=OpenSim.ScriptEngine.Shared.EventParams; | ||
31 | 36 | ||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Events | 37 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Events |
33 | { | 38 | { |
34 | public class LSLEventProvider: EventBase | 39 | public class LSLEventProvider : IScriptEventProvider |
35 | { | 40 | { |
41 | public delegate void RezScriptDelegate(uint localID, UUID itemID, string script, int startParam, bool postOnRez, | ||
42 | string engine); | ||
43 | public event RezScriptDelegate RezScript; | ||
44 | public delegate void RemoveScriptDelegate(uint localID, UUID itemID); | ||
45 | public event RemoveScriptDelegate RemoveScript; | ||
46 | public delegate void ScriptChangedDelegate(uint localID, uint change); | ||
47 | public event ScriptChangedDelegate ScriptChanged; | ||
36 | 48 | ||
37 | public override void Start() | 49 | private RegionInfoStructure CurrentRegion; |
50 | public void Initialize(RegionInfoStructure currentRegion) | ||
38 | { | 51 | { |
52 | CurrentRegion = currentRegion; | ||
53 | HookupEvents(); | ||
39 | } | 54 | } |
40 | 55 | ||
41 | public override void Close() | 56 | private void HookupEvents() |
42 | { | 57 | { |
58 | CurrentRegion.Scene.EventManager.OnObjectGrab += OnObjectGrab; | ||
59 | CurrentRegion.Scene.EventManager.OnRezScript += OnRezScript; | ||
60 | CurrentRegion.Scene.EventManager.OnRemoveScript += OnRemoveScript; | ||
61 | CurrentRegion.Scene.EventManager.OnScriptChangedEvent += OnScriptChangedEvent; | ||
62 | |||
63 | |||
64 | } | ||
65 | |||
66 | private void OnScriptChangedEvent(uint localID, uint change) | ||
67 | { | ||
68 | // Script is being changed, fire event | ||
69 | if (ScriptChanged != null) | ||
70 | ScriptChanged(localID, change); | ||
71 | } | ||
72 | |||
73 | private void OnRemoveScript(uint localID, UUID itemID) | ||
74 | { | ||
75 | // Script is being removed, fire event | ||
76 | if (RemoveScript != null) | ||
77 | RemoveScript(localID, itemID); | ||
78 | } | ||
79 | |||
80 | private void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine) | ||
81 | { | ||
82 | // New script being created, fire event | ||
83 | if (RezScript != null) | ||
84 | RezScript(localID, itemID, script, startParam, postOnRez, engine); | ||
85 | } | ||
86 | |||
87 | private void OnObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient) | ||
88 | { | ||
89 | // Add to queue for all scripts in ObjectID object | ||
90 | DetectParams[] det = new DetectParams[1]; | ||
91 | det[0] = new DetectParams(); | ||
92 | det[0].Key = remoteClient.AgentId; | ||
93 | //det[0].Populate(World); | ||
94 | |||
95 | if (originalID == 0) | ||
96 | { | ||
97 | SceneObjectPart part = | ||
98 | CurrentRegion.Scene.GetSceneObjectPart(localID); | ||
99 | |||
100 | if (part == null) | ||
101 | return; | ||
102 | |||
103 | det[0].LinkNum = part.LinkNum; | ||
104 | } | ||
105 | else | ||
106 | { | ||
107 | SceneObjectPart originalPart = | ||
108 | CurrentRegion.Scene.GetSceneObjectPart(originalID); | ||
109 | det[0].LinkNum = originalPart.LinkNum; | ||
110 | } | ||
111 | |||
112 | Shared.EventParams ep = | ||
113 | new Shared.EventParams(localID, "touch_start", new Object[] {new LSL_Types.LSLInteger(1)}, det); | ||
114 | CurrentRegion.Executors_Execute(ep); | ||
115 | |||
43 | } | 116 | } |
44 | } | 117 | } |
45 | } | 118 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/BaseClassFactory.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/BaseClassFactory.cs new file mode 100644 index 0000000..2f19cae --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/BaseClassFactory.cs | |||
@@ -0,0 +1,213 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.IO; | ||
4 | using System.Reflection; | ||
5 | using System.Reflection.Emit; | ||
6 | using System.Text; | ||
7 | using OpenSim.ScriptEngine.Shared; | ||
8 | |||
9 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler | ||
10 | { | ||
11 | public class BaseClassFactory | ||
12 | { | ||
13 | |||
14 | |||
15 | public static void MakeBaseClass(ScriptStructure script) | ||
16 | { | ||
17 | string asmName = "ScriptAssemblies"; | ||
18 | string ModuleID = asmName; | ||
19 | string ClassID = "Script"; | ||
20 | string moveToDir = "ScriptEngines"; | ||
21 | string asmFileName = ModuleID + "_" + ClassID + ".dll"; | ||
22 | if (!Directory.Exists(moveToDir)) | ||
23 | Directory.CreateDirectory(moveToDir); | ||
24 | |||
25 | ILGenerator ilgen; | ||
26 | AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( | ||
27 | new AssemblyName(asmName), AssemblyBuilderAccess.RunAndSave); | ||
28 | |||
29 | // The module builder | ||
30 | ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule(ModuleID, asmFileName); | ||
31 | |||
32 | // The class builder | ||
33 | TypeBuilder classBuilder = modBuilder.DefineType(ClassID, TypeAttributes.Class | TypeAttributes.Public); | ||
34 | |||
35 | // The default constructor | ||
36 | ConstructorBuilder ctorBuilder = classBuilder.DefineDefaultConstructor(MethodAttributes.Public); | ||
37 | |||
38 | |||
39 | Type[] paramsTypeArray = new Type[] {typeof (System.ParamArrayAttribute)}; | ||
40 | Type[] executeFunctionTypeArray = new Type[] {typeof (string), typeof (System.ParamArrayAttribute)}; | ||
41 | foreach (IScriptCommandProvider cp in script.RegionInfo.CommandProviders.Values) | ||
42 | { | ||
43 | Type t = cp.GetType(); | ||
44 | foreach (MethodInfo mi in t.GetMethods()) | ||
45 | { | ||
46 | MethodBuilder methodBuilder = classBuilder.DefineMethod(mi.Name, mi.Attributes, mi.GetType(), Type.EmptyTypes); | ||
47 | methodBuilder.SetParameters(paramsTypeArray); | ||
48 | //ParameterBuilder paramBuilder = methodBuilder.DefineParameter(1, ParameterAttributes.None, "args"); | ||
49 | |||
50 | ilgen = methodBuilder.GetILGenerator(); | ||
51 | //ilgen.Emit(OpCodes.Nop); | ||
52 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
53 | //ilgen.Emit(OpCodes.Ldc_I4_0); | ||
54 | //ilgen.Emit(OpCodes.Ldelem_Ref); | ||
55 | //ilgen.MarkSequencePoint(doc, 6, 1, 6, 100); | ||
56 | |||
57 | MethodInfo ExecuteFunction = typeof(ScriptAssemblies.IScript).GetMethod( | ||
58 | "ExecuteFunction", | ||
59 | executeFunctionTypeArray); | ||
60 | |||
61 | ilgen.DeclareLocal(typeof(string)); | ||
62 | ilgen.Emit(OpCodes.Nop); | ||
63 | ilgen.Emit(OpCodes.Ldstr, mi.Name); | ||
64 | ilgen.Emit(OpCodes.Stloc_0); | ||
65 | ilgen.Emit(OpCodes.Ldarg_0); | ||
66 | ilgen.Emit(OpCodes.Ldloc_0); | ||
67 | ilgen.Emit(OpCodes.Ldarg_1); | ||
68 | |||
69 | // FieldInfo testInfo = classBuilder. | ||
70 | //BindingFlags.NonPublic | BindingFlags.Instance); | ||
71 | |||
72 | //ilgen.Emit(OpCodes.Ldfld, testInfo); | ||
73 | |||
74 | //ilgen.EmitCall(OpCodes.Call, ExecuteFunction, executeFunctionTypeArray); | ||
75 | ilgen.EmitCall(OpCodes.Call, typeof(System.Console).GetMethod("WriteLine"), executeFunctionTypeArray); | ||
76 | |||
77 | // // string.Format("Hello, {0} World!", toWhom) | ||
78 | // // | ||
79 | // ilgen.Emit(OpCodes.Ldstr, "Hello, {0} World!"); | ||
80 | // ilgen.Emit(OpCodes.Ldarg_1); | ||
81 | // ilgen.Emit(OpCodes.Call, typeof(string).GetMethod | ||
82 | //("Format", new Type[] { typeof(string), typeof(object) })); | ||
83 | |||
84 | // // Console.WriteLine("Hello, World!"); | ||
85 | // // | ||
86 | // ilgen.Emit(OpCodes.Call, typeof(Console).GetMethod | ||
87 | // ("WriteLine", new Type[] { typeof(string) })); | ||
88 | ilgen.Emit(OpCodes.Ret); | ||
89 | |||
90 | |||
91 | |||
92 | //Label eom = ilgen.DefineLabel(); | ||
93 | //ilgen.Emit(OpCodes.Br_S, eom); | ||
94 | //ilgen.MarkLabel(eom); | ||
95 | //ilgen.Emit(OpCodes.Ret); | ||
96 | //Type test = methodBuilder.SetParameters(); | ||
97 | |||
98 | |||
99 | //methodBuilder.SetParameters(typeof (object[])); | ||
100 | |||
101 | |||
102 | } | ||
103 | } | ||
104 | |||
105 | |||
106 | //// Two fields: m_firstname, m_lastname | ||
107 | //FieldBuilder fBuilderFirstName = classBuilder.DefineField("m_firstname", typeof(string), FieldAttributes.Private); | ||
108 | //FieldBuilder fBuilderLastName = classBuilder.DefineField("m_lastname", typeof(string), FieldAttributes.Private); | ||
109 | |||
110 | //// Two properties for this object: FirstName, LastName | ||
111 | //PropertyBuilder pBuilderFirstName = classBuilder.DefineProperty("FirstName", System.Reflection.PropertyAttributes.HasDefault, typeof(string), null); | ||
112 | //PropertyBuilder pBuilderLastName = classBuilder.DefineProperty("LastName", System.Reflection.PropertyAttributes.HasDefault, typeof(string), null); | ||
113 | |||
114 | //// Custom attributes for get, set accessors | ||
115 | //MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName; | ||
116 | |||
117 | //// get,set accessors for FirstName | ||
118 | //MethodBuilder mGetFirstNameBuilder = classBuilder.DefineMethod("get_FirstName", getSetAttr, typeof(string), Type.EmptyTypes); | ||
119 | |||
120 | //// Code generation | ||
121 | //ilgen = mGetFirstNameBuilder.GetILGenerator(); | ||
122 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
123 | //ilgen.Emit(OpCodes.Ldfld, fBuilderFirstName); // returning the firstname field | ||
124 | //ilgen.Emit(OpCodes.Ret); | ||
125 | |||
126 | //MethodBuilder mSetFirstNameBuilder = classBuilder.DefineMethod("set_FirstName", getSetAttr, null, new Type[] { typeof(string) }); | ||
127 | |||
128 | //// Code generation | ||
129 | //ilgen = mSetFirstNameBuilder.GetILGenerator(); | ||
130 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
131 | //ilgen.Emit(OpCodes.Ldarg_1); | ||
132 | //ilgen.Emit(OpCodes.Stfld, fBuilderFirstName); // setting the firstname field from the first argument (1) | ||
133 | //ilgen.Emit(OpCodes.Ret); | ||
134 | |||
135 | //// get,set accessors for LastName | ||
136 | //MethodBuilder mGetLastNameBuilder = classBuilder.DefineMethod("get_LastName", getSetAttr, typeof(string), Type.EmptyTypes); | ||
137 | |||
138 | //// Code generation | ||
139 | //ilgen = mGetLastNameBuilder.GetILGenerator(); | ||
140 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
141 | //ilgen.Emit(OpCodes.Ldfld, fBuilderLastName); // returning the firstname field | ||
142 | //ilgen.Emit(OpCodes.Ret); | ||
143 | |||
144 | //MethodBuilder mSetLastNameBuilder = classBuilder.DefineMethod("set_LastName", getSetAttr, null, new Type[] { typeof(string) }); | ||
145 | |||
146 | //// Code generation | ||
147 | //ilgen = mSetLastNameBuilder.GetILGenerator(); | ||
148 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
149 | //ilgen.Emit(OpCodes.Ldarg_1); | ||
150 | //ilgen.Emit(OpCodes.Stfld, fBuilderLastName); // setting the firstname field from the first argument (1) | ||
151 | //ilgen.Emit(OpCodes.Ret); | ||
152 | |||
153 | //// Assigning get/set accessors | ||
154 | //pBuilderFirstName.SetGetMethod(mGetFirstNameBuilder); | ||
155 | //pBuilderFirstName.SetSetMethod(mSetFirstNameBuilder); | ||
156 | |||
157 | //pBuilderLastName.SetGetMethod(mGetLastNameBuilder); | ||
158 | //pBuilderLastName.SetSetMethod(mSetLastNameBuilder); | ||
159 | |||
160 | //// Now, a custom method named GetFullName that concatenates FirstName and LastName properties | ||
161 | //MethodBuilder mGetFullNameBuilder = classBuilder.DefineMethod("GetFullName", MethodAttributes.Public, typeof(string), Type.EmptyTypes); | ||
162 | |||
163 | //// Code generation | ||
164 | //ilgen = mGetFullNameBuilder.GetILGenerator(); | ||
165 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
166 | //ilgen.Emit(OpCodes.Call, mGetFirstNameBuilder); // getting the firstname | ||
167 | //ilgen.Emit(OpCodes.Ldstr, " "); // an space | ||
168 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
169 | //ilgen.Emit(OpCodes.Call, mGetLastNameBuilder); // getting the lastname | ||
170 | |||
171 | //// We need the 'Concat' method from string type | ||
172 | //MethodInfo concatMethod = typeof(String).GetMethod("Concat", new Type[] { typeof(string), typeof(string), typeof(string) }); | ||
173 | |||
174 | //ilgen.Emit(OpCodes.Call, concatMethod); // calling concat and returning the result | ||
175 | //ilgen.Emit(OpCodes.Ret); | ||
176 | |||
177 | //// Another constructor that initializes firstname and lastname | ||
178 | //ConstructorBuilder ctorBuilder2 = classBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new Type[] { typeof(string), typeof(string) }); | ||
179 | //ctorBuilder2.DefineParameter(1, ParameterAttributes.In, "firstname"); | ||
180 | //ctorBuilder2.DefineParameter(2, ParameterAttributes.In, "lastname"); | ||
181 | |||
182 | //// Code generation | ||
183 | //ilgen = ctorBuilder2.GetILGenerator(); | ||
184 | |||
185 | //// First of all, we need to call the base constructor, | ||
186 | //// the Object's constructor in this sample | ||
187 | //Type objType = Type.GetType("System.Object"); | ||
188 | //ConstructorInfo objCtor = objType.GetConstructor(Type.EmptyTypes); | ||
189 | |||
190 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
191 | //ilgen.Emit(OpCodes.Call, objCtor); // calling the Object's constructor | ||
192 | |||
193 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
194 | //ilgen.Emit(OpCodes.Ldarg_1); | ||
195 | //ilgen.Emit(OpCodes.Call, mSetFirstNameBuilder); // setting the firstname field from the first argument (1) | ||
196 | //ilgen.Emit(OpCodes.Ldarg_0); | ||
197 | //ilgen.Emit(OpCodes.Ldarg_2); | ||
198 | //ilgen.Emit(OpCodes.Call, mSetLastNameBuilder); // setting the lastname field from the second argument (2) | ||
199 | //ilgen.Emit(OpCodes.Ret); | ||
200 | |||
201 | // Finally, create the type and save the assembly | ||
202 | classBuilder.CreateType(); | ||
203 | |||
204 | asmBuilder.Save(asmFileName); | ||
205 | string toFile = Path.Combine(moveToDir, asmFileName); | ||
206 | if (File.Exists(toFile)) | ||
207 | File.Delete(toFile); | ||
208 | File.Move(asmFileName, toFile); | ||
209 | |||
210 | string a = ""; | ||
211 | } | ||
212 | } | ||
213 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/LoadUnloadStructure.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/LoadUnloadStructure.cs new file mode 100644 index 0000000..d3d0509 --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/LoadUnloadStructure.cs | |||
@@ -0,0 +1,22 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.ScriptEngine.Shared; | ||
5 | |||
6 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler | ||
7 | { | ||
8 | public struct LoadUnloadStructure | ||
9 | { | ||
10 | public ScriptStructure Script; | ||
11 | public LUType Action; | ||
12 | public bool PostOnRez; | ||
13 | public int StartParam; | ||
14 | |||
15 | public enum LUType | ||
16 | { | ||
17 | Unknown = 0, | ||
18 | Load = 1, | ||
19 | Unload = 2 | ||
20 | } | ||
21 | } | ||
22 | } | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/Scheduler.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/Scheduler.cs index 52c59eb..1143b03 100644 --- a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/Scheduler.cs +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/Scheduler.cs | |||
@@ -27,18 +27,29 @@ | |||
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.ApplicationPlugins.ScriptEngine.Components; | 30 | using OpenMetaverse; |
31 | using OpenSim.ScriptEngine.Shared; | ||
31 | 32 | ||
32 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler | 33 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler |
33 | { | 34 | { |
34 | public class Scheduler: SchedulerBase | 35 | public class Scheduler : IScriptScheduler |
35 | { | 36 | { |
36 | public override void Start() | 37 | |
38 | private ScriptManager m_ScriptManager = new ScriptManager(); | ||
39 | public void AddScript(ScriptStructure scriptStructure) | ||
37 | { | 40 | { |
41 | m_ScriptManager.AddScript(scriptStructure); | ||
38 | } | 42 | } |
39 | 43 | ||
40 | public override void Close() | 44 | public void Removecript(uint id, UUID itemID) |
41 | { | 45 | { |
46 | m_ScriptManager.RemoveScript(id, itemID); | ||
42 | } | 47 | } |
48 | |||
49 | public void Close() | ||
50 | { | ||
51 | m_ScriptManager.Close(); | ||
52 | } | ||
53 | |||
43 | } | 54 | } |
44 | } | 55 | } |
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptLoader.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptLoader.cs new file mode 100644 index 0000000..cb4a870 --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptLoader.cs | |||
@@ -0,0 +1,216 @@ | |||
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; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Reflection; | ||
31 | using System.Text; | ||
32 | using log4net; | ||
33 | using OpenSim.ScriptEngine.Shared; | ||
34 | using IScript=OpenSim.Region.ScriptEngine.Shared.ScriptBase.IScript; | ||
35 | |||
36 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler | ||
37 | { | ||
38 | public class ScriptLoader : IScriptLoader | ||
39 | { | ||
40 | // | ||
41 | // This class does AppDomain handling and loading/unloading of | ||
42 | // scripts in it. It is instanced in "ScriptEngine" and controlled | ||
43 | // from "ScriptManager" | ||
44 | // | ||
45 | // 1. Create a new AppDomain if old one is full (or doesn't exist) | ||
46 | // 2. Load scripts into AppDomain | ||
47 | // 3. Unload scripts from AppDomain (stopping them and marking | ||
48 | // them as inactive) | ||
49 | // 4. Unload AppDomain completely when all scripts in it has stopped | ||
50 | // | ||
51 | |||
52 | public string Name { get { return "SECS.DotNetEngine.Scheduler.ScriptLoader"; } } | ||
53 | private int maxScriptsPerAppDomain = 10; | ||
54 | |||
55 | // Internal list of all AppDomains | ||
56 | private List<AppDomainStructure> appDomains = | ||
57 | new List<AppDomainStructure>(); | ||
58 | private Dictionary<string, AppDomainStructure> AppDomainFiles = new Dictionary<string, AppDomainStructure>(); | ||
59 | public readonly string[] AssembliesInAppDomain = new string[] { "OpenSim.ScriptEngine.Shared.Script.dll", "OpenSim.Region.ScriptEngine.Shared.dll" }; | ||
60 | |||
61 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
62 | |||
63 | // Structure to keep track of data around AppDomain | ||
64 | private class AppDomainStructure | ||
65 | { | ||
66 | public AppDomain CurrentAppDomain; // The AppDomain itself | ||
67 | public int ScriptsLoaded; // Number of scripts loaded into AppDomain | ||
68 | public int ScriptsWaitingUnload; // Number of dead scripts | ||
69 | } | ||
70 | |||
71 | // Current AppDomain | ||
72 | private AppDomainStructure currentAD; | ||
73 | |||
74 | private object getLock = new object(); // Mutex | ||
75 | private object freeLock = new object(); // Mutex | ||
76 | |||
77 | // Find a free AppDomain, creating one if necessary | ||
78 | private AppDomainStructure GetFreeAppDomain() | ||
79 | { | ||
80 | lock (getLock) | ||
81 | { | ||
82 | // Current full? | ||
83 | if (currentAD != null && | ||
84 | currentAD.ScriptsLoaded >= maxScriptsPerAppDomain) | ||
85 | { | ||
86 | // Add it to AppDomains list and empty current | ||
87 | appDomains.Add(currentAD); | ||
88 | currentAD = null; | ||
89 | } | ||
90 | // No current | ||
91 | if (currentAD == null) | ||
92 | { | ||
93 | // Create a new current AppDomain | ||
94 | currentAD = new AppDomainStructure(); | ||
95 | currentAD.CurrentAppDomain = PrepareNewAppDomain(); | ||
96 | } | ||
97 | |||
98 | return currentAD; | ||
99 | } | ||
100 | } | ||
101 | |||
102 | private int AppDomainNameCount; | ||
103 | public ScriptAssemblies.IScript LoadScript(ScriptStructure script) | ||
104 | { | ||
105 | // Find next available AppDomain to put it in | ||
106 | AppDomainStructure FreeAppDomain; | ||
107 | |||
108 | // If we already have loaded file, then reuse that AppDomains | ||
109 | if (AppDomainFiles.ContainsKey(script.AssemblyFileName)) | ||
110 | FreeAppDomain = AppDomainFiles[script.AssemblyFileName]; | ||
111 | else | ||
112 | FreeAppDomain = GetFreeAppDomain(); | ||
113 | |||
114 | // Set script object AppDomain | ||
115 | script.AppDomain = FreeAppDomain.CurrentAppDomain; | ||
116 | |||
117 | // Create instance of script | ||
118 | ScriptAssemblies.IScript mbrt = (ScriptAssemblies.IScript) | ||
119 | FreeAppDomain.CurrentAppDomain.CreateInstanceFromAndUnwrap( | ||
120 | script.AssemblyFileName, "ScriptAssemblies.Script"); | ||
121 | //, true, BindingFlags.CreateInstance, null); | ||
122 | FreeAppDomain.ScriptsLoaded++; | ||
123 | |||
124 | return mbrt; | ||
125 | } | ||
126 | |||
127 | // Create and prepare a new AppDomain for scripts | ||
128 | private AppDomain PrepareNewAppDomain() | ||
129 | { | ||
130 | // Create and prepare a new AppDomain | ||
131 | AppDomainNameCount++; | ||
132 | |||
133 | // TODO: Currently security match current appdomain | ||
134 | |||
135 | // Construct and initialize settings for a second AppDomain. | ||
136 | AppDomainSetup ads = new AppDomainSetup(); | ||
137 | ads.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; | ||
138 | ads.DisallowBindingRedirects = true; | ||
139 | ads.DisallowCodeDownload = true; | ||
140 | ads.LoaderOptimization = LoaderOptimization.MultiDomainHost; | ||
141 | ads.ShadowCopyFiles = "false"; // Disable shadowing | ||
142 | ads.ConfigurationFile = | ||
143 | AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; | ||
144 | |||
145 | AppDomain AD = AppDomain.CreateDomain("ScriptAppDomain_" + | ||
146 | AppDomainNameCount, null, ads); | ||
147 | |||
148 | foreach (string file in AssembliesInAppDomain) | ||
149 | { | ||
150 | m_log.InfoFormat("[{0}] AppDomain Loading: \"{1}\"->\"{2}\".", Name, file, | ||
151 | AssemblyName.GetAssemblyName(file).ToString()); | ||
152 | AD.Load(AssemblyName.GetAssemblyName(file)); | ||
153 | } | ||
154 | |||
155 | // Return the new AppDomain | ||
156 | return AD; | ||
157 | } | ||
158 | |||
159 | // Unload appdomains that are full and have only dead scripts | ||
160 | private void UnloadAppDomains() | ||
161 | { | ||
162 | lock (freeLock) | ||
163 | { | ||
164 | // Go through all | ||
165 | foreach (AppDomainStructure ads in new ArrayList(appDomains)) | ||
166 | { | ||
167 | // Don't process current AppDomain | ||
168 | if (ads.CurrentAppDomain != currentAD.CurrentAppDomain) | ||
169 | { | ||
170 | // Not current AppDomain | ||
171 | // Is number of unloaded bigger or equal to number of loaded? | ||
172 | if (ads.ScriptsLoaded <= ads.ScriptsWaitingUnload) | ||
173 | { | ||
174 | // Remove from internal list | ||
175 | appDomains.Remove(ads); | ||
176 | |||
177 | // Unload | ||
178 | AppDomain.Unload(ads.CurrentAppDomain); | ||
179 | } | ||
180 | } | ||
181 | } | ||
182 | } | ||
183 | } | ||
184 | |||
185 | // Increase "dead script" counter for an AppDomain | ||
186 | public void StopScript(AppDomain ad) | ||
187 | { | ||
188 | lock (freeLock) | ||
189 | { | ||
190 | // Check if it is current AppDomain | ||
191 | if (currentAD.CurrentAppDomain == ad) | ||
192 | { | ||
193 | // Yes - increase | ||
194 | currentAD.ScriptsWaitingUnload++; | ||
195 | return; | ||
196 | } | ||
197 | |||
198 | // Lopp through all AppDomains | ||
199 | foreach (AppDomainStructure ads in new ArrayList(appDomains)) | ||
200 | { | ||
201 | if (ads.CurrentAppDomain == ad) | ||
202 | { | ||
203 | // Found it | ||
204 | ads.ScriptsWaitingUnload++; | ||
205 | break; | ||
206 | } | ||
207 | } | ||
208 | } | ||
209 | |||
210 | UnloadAppDomains(); // Outsite lock, has its own GetLock | ||
211 | } | ||
212 | |||
213 | |||
214 | |||
215 | } | ||
216 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager.cs new file mode 100644 index 0000000..3452b03 --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager.cs | |||
@@ -0,0 +1,176 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Diagnostics; | ||
4 | using System.Reflection; | ||
5 | using System.Text; | ||
6 | using System.Threading; | ||
7 | using log4net; | ||
8 | using OpenMetaverse; | ||
9 | using OpenSim.Region.ScriptEngine.Shared; | ||
10 | using OpenSim.ScriptEngine.Shared; | ||
11 | using EventParams=OpenSim.ScriptEngine.Shared.EventParams; | ||
12 | |||
13 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler | ||
14 | { | ||
15 | public partial class ScriptManager: IScriptExecutor | ||
16 | { | ||
17 | private const int NoWorkSleepMs = 50; | ||
18 | private const int NoWorkSleepMsInc = 1; // How much time to increase wait with on every iteration | ||
19 | private const int NoWorkSleepMsIncMax = 300; // Max time to wait | ||
20 | |||
21 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
22 | public string Name { get { return "SECS.DotNetEngine.ScriptManager"; } } | ||
23 | private static Thread ScriptLoadUnloadThread; | ||
24 | public Dictionary<uint, Dictionary<UUID, ScriptStructure>> Scripts = new Dictionary<uint, Dictionary<UUID, ScriptStructure>>(); | ||
25 | |||
26 | private RegionInfoStructure CurrentRegion; | ||
27 | public void Initialize(RegionInfoStructure currentRegion) | ||
28 | { | ||
29 | CurrentRegion = currentRegion; | ||
30 | } | ||
31 | |||
32 | public ScriptManager() | ||
33 | { | ||
34 | ScriptLoadUnloadThread = new Thread(LoadUnloadLoop); | ||
35 | ScriptLoadUnloadThread.Name = "ScriptLoadUnloadThread"; | ||
36 | ScriptLoadUnloadThread.IsBackground = true; | ||
37 | ScriptLoadUnloadThread.Start(); | ||
38 | } | ||
39 | public void Close() { } | ||
40 | |||
41 | private void LoadUnloadLoop () | ||
42 | { | ||
43 | int _NoWorkSleepMsInc = 0; | ||
44 | while (true) | ||
45 | { | ||
46 | if (DoScriptLoadUnload()) | ||
47 | { | ||
48 | // We found work, reset counter | ||
49 | _NoWorkSleepMsInc = NoWorkSleepMs; | ||
50 | } else | ||
51 | { | ||
52 | // We didn't find work | ||
53 | // Sleep | ||
54 | Thread.Sleep(NoWorkSleepMs + NoWorkSleepMsInc); | ||
55 | // Increase sleep delay | ||
56 | _NoWorkSleepMsInc += NoWorkSleepMsInc; | ||
57 | // Make sure we don't exceed max | ||
58 | if (_NoWorkSleepMsInc > NoWorkSleepMsIncMax) | ||
59 | _NoWorkSleepMsInc = NoWorkSleepMsIncMax; | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 | |||
64 | #region Add/Remove/Find script functions for our Script memory structure | ||
65 | private void MemAddScript(ScriptStructure script) | ||
66 | { | ||
67 | lock (scriptLock) | ||
68 | { | ||
69 | // Create object if it doesn't exist | ||
70 | if (!Scripts.ContainsKey(script.LocalID)) | ||
71 | Scripts.Add(script.LocalID, new Dictionary<UUID, ScriptStructure>()); | ||
72 | |||
73 | // Delete script if it exists | ||
74 | Dictionary<UUID, ScriptStructure> Obj; | ||
75 | if (Scripts.TryGetValue(script.LocalID, out Obj)) | ||
76 | if (Obj.ContainsKey(script.ItemID) == true) | ||
77 | Obj.Remove(script.ItemID); | ||
78 | |||
79 | // Add to object | ||
80 | Obj.Add(script.ItemID, script); | ||
81 | } | ||
82 | } | ||
83 | private void MemRemoveScript(uint LocalID, UUID ItemID) | ||
84 | { | ||
85 | // TODO: Also clean up command queue and async commands for object | ||
86 | lock (scriptLock) | ||
87 | { | ||
88 | // Create object if it doesn't exist | ||
89 | if (!Scripts.ContainsKey(LocalID)) | ||
90 | return; | ||
91 | |||
92 | // Delete script if it exists | ||
93 | Dictionary<UUID, ScriptStructure> Obj; | ||
94 | if (Scripts.TryGetValue(LocalID, out Obj)) | ||
95 | if (Obj.ContainsKey(ItemID) == true) | ||
96 | Obj.Remove(ItemID); | ||
97 | |||
98 | // Empty? | ||
99 | if (Obj.Count == 0) | ||
100 | Scripts.Remove(LocalID); | ||
101 | |||
102 | } | ||
103 | } | ||
104 | public bool TryGetScript(uint localID, UUID itemID, ref ScriptStructure script) | ||
105 | { | ||
106 | lock (scriptLock) | ||
107 | { | ||
108 | |||
109 | if (Scripts.ContainsKey(localID) == false) | ||
110 | return false; | ||
111 | |||
112 | Dictionary<UUID, ScriptStructure> Obj; | ||
113 | if (Scripts.TryGetValue(localID, out Obj)) | ||
114 | if (Obj.ContainsKey(itemID) == false) | ||
115 | return false; | ||
116 | |||
117 | // Get script | ||
118 | return Obj.TryGetValue(itemID, out script); | ||
119 | } | ||
120 | } | ||
121 | public ScriptStructure GetScript(uint localID, UUID itemID) | ||
122 | { | ||
123 | lock (scriptLock) | ||
124 | { | ||
125 | |||
126 | if (Scripts.ContainsKey(localID) == false) | ||
127 | throw new Exception("No script with LocalID " + localID + " was found."); | ||
128 | |||
129 | Dictionary<UUID, ScriptStructure> Obj; | ||
130 | if (Scripts.TryGetValue(localID, out Obj)) | ||
131 | if (Obj.ContainsKey(itemID) == false) | ||
132 | throw new Exception("No script with ItemID " + itemID + " was found."); | ||
133 | |||
134 | // Get script | ||
135 | return Obj[itemID]; | ||
136 | } | ||
137 | } | ||
138 | public bool TryGetScripts(uint localID, ref Dictionary<UUID, ScriptStructure> returnList) | ||
139 | { | ||
140 | Dictionary<UUID, ScriptStructure> getList = GetScripts(localID); | ||
141 | if (getList != null) | ||
142 | { | ||
143 | returnList = getList; | ||
144 | return true; | ||
145 | } | ||
146 | return false; | ||
147 | } | ||
148 | public Dictionary<UUID, ScriptStructure> GetScripts(uint localID) | ||
149 | { | ||
150 | lock (scriptLock) | ||
151 | { | ||
152 | |||
153 | if (Scripts.ContainsKey(localID) == false) | ||
154 | return null; | ||
155 | return Scripts[localID]; | ||
156 | } | ||
157 | } | ||
158 | #endregion | ||
159 | |||
160 | public void ExecuteCommand(EventParams p) | ||
161 | { | ||
162 | ScriptStructure ss = new ScriptStructure(); | ||
163 | if (TryGetScript(p.LocalID, p.ItemID, ref ss)) | ||
164 | ExecuteCommand(ref ss, p); | ||
165 | } | ||
166 | |||
167 | public void ExecuteCommand(ref ScriptStructure scriptContainer, EventParams p) | ||
168 | { | ||
169 | m_log.DebugFormat("[{0}] ######################################################", Name); | ||
170 | m_log.DebugFormat("[{0}] Command execution ItemID {1}: \"{2}\".", Name, scriptContainer.ItemID, p.EventName); | ||
171 | scriptContainer.ExecuteEvent(p); | ||
172 | m_log.DebugFormat("[{0}] ######################################################", Name); | ||
173 | } | ||
174 | |||
175 | } | ||
176 | } | ||
diff --git a/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager_ScriptLoadUnload.cs b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager_ScriptLoadUnload.cs new file mode 100644 index 0000000..7d362f9 --- /dev/null +++ b/OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager_ScriptLoadUnload.cs | |||
@@ -0,0 +1,259 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Globalization; | ||
4 | using System.Reflection; | ||
5 | using System.Text; | ||
6 | using System.Threading; | ||
7 | using log4net; | ||
8 | using OpenMetaverse; | ||
9 | using OpenSim.Framework; | ||
10 | using OpenSim.Region.Environment.Scenes; | ||
11 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
12 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
13 | using OpenSim.ScriptEngine.Shared; | ||
14 | |||
15 | namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler | ||
16 | { | ||
17 | public partial class ScriptManager | ||
18 | { | ||
19 | private Queue<LoadUnloadStructure> LUQueue = new Queue<LoadUnloadStructure>(); | ||
20 | private int LoadUnloadMaxQueueSize = 500; | ||
21 | private Object scriptLock = new Object(); | ||
22 | //private Dictionary<InstanceData, DetectParams[]> detparms = new Dictionary<InstanceData, DetectParams[]>(); | ||
23 | |||
24 | // Load/Unload structure | ||
25 | |||
26 | |||
27 | public void AddScript(ScriptStructure script) | ||
28 | { | ||
29 | lock (LUQueue) | ||
30 | { | ||
31 | if ((LUQueue.Count >= LoadUnloadMaxQueueSize)) | ||
32 | { | ||
33 | m_log.ErrorFormat("[{0}] ERROR: Load queue count is at {1} of max {2}. Ignoring load request for script LocalID: {3}, ItemID: {4}.", | ||
34 | Name, LUQueue.Count, LoadUnloadMaxQueueSize, script.LocalID, script.ItemID); | ||
35 | return; | ||
36 | } | ||
37 | |||
38 | LoadUnloadStructure ls = new LoadUnloadStructure(); | ||
39 | ls.Script = script; | ||
40 | ls.Action = LoadUnloadStructure.LUType.Load; | ||
41 | LUQueue.Enqueue(ls); | ||
42 | } | ||
43 | |||
44 | } | ||
45 | public void RemoveScript(uint localID, UUID itemID) | ||
46 | { | ||
47 | LoadUnloadStructure ls = new LoadUnloadStructure(); | ||
48 | |||
49 | // See if we can find script | ||
50 | if (!TryGetScript(localID, itemID, ref ls.Script)) | ||
51 | { | ||
52 | // Set manually | ||
53 | ls.Script.LocalID = localID; | ||
54 | ls.Script.ItemID = itemID; | ||
55 | } | ||
56 | ls.Script.StartParam = 0; | ||
57 | |||
58 | ls.Action = LoadUnloadStructure.LUType.Unload; | ||
59 | ls.PostOnRez = false; | ||
60 | |||
61 | lock (LUQueue) | ||
62 | { | ||
63 | LUQueue.Enqueue(ls); | ||
64 | } | ||
65 | } | ||
66 | |||
67 | internal bool DoScriptLoadUnload() | ||
68 | { | ||
69 | bool ret = false; | ||
70 | // if (!m_started) | ||
71 | // return; | ||
72 | |||
73 | lock (LUQueue) | ||
74 | { | ||
75 | if (LUQueue.Count > 0) | ||
76 | { | ||
77 | LoadUnloadStructure item = LUQueue.Dequeue(); | ||
78 | ret = true; | ||
79 | |||
80 | if (item.Action == LoadUnloadStructure.LUType.Unload) | ||
81 | { | ||
82 | m_log.DebugFormat("[{0}] Unloading script", Name); | ||
83 | _StopScript(item.Script.LocalID, item.Script.ItemID); | ||
84 | RemoveScript(item.Script.LocalID, item.Script.ItemID); | ||
85 | } | ||
86 | else if (item.Action == LoadUnloadStructure.LUType.Load) | ||
87 | { | ||
88 | m_log.DebugFormat("[{0}] Loading script", Name); | ||
89 | _StartScript(item); | ||
90 | } | ||
91 | } | ||
92 | } | ||
93 | return ret; | ||
94 | } | ||
95 | |||
96 | //public void _StartScript(uint localID, UUID itemID, string Script, int startParam, bool postOnRez) | ||
97 | private void _StartScript(LoadUnloadStructure ScriptObject) | ||
98 | { | ||
99 | m_log.DebugFormat( | ||
100 | "[{0}]: ScriptManager StartScript: localID: {1}, itemID: {2}", | ||
101 | Name, ScriptObject.Script.LocalID, ScriptObject.Script.ItemID); | ||
102 | |||
103 | // We will initialize and start the script. | ||
104 | // It will be up to the script itself to hook up the correct events. | ||
105 | |||
106 | SceneObjectPart m_host = ScriptObject.Script.RegionInfo.Scene.GetSceneObjectPart(ScriptObject.Script.LocalID); | ||
107 | |||
108 | if (null == m_host) | ||
109 | { | ||
110 | m_log.ErrorFormat( | ||
111 | "[{0}]: Could not find scene object part corresponding " + | ||
112 | "to localID {1} to start script", | ||
113 | Name, ScriptObject.Script.LocalID); | ||
114 | |||
115 | return; | ||
116 | } | ||
117 | |||
118 | UUID assetID = UUID.Zero; | ||
119 | TaskInventoryItem taskInventoryItem = new TaskInventoryItem(); | ||
120 | if (m_host.TaskInventory.TryGetValue(ScriptObject.Script.ItemID, out taskInventoryItem)) | ||
121 | assetID = taskInventoryItem.AssetID; | ||
122 | |||
123 | ScenePresence presence = | ||
124 | ScriptObject.Script.RegionInfo.Scene.GetScenePresence(taskInventoryItem.OwnerID); | ||
125 | |||
126 | CultureInfo USCulture = new CultureInfo("en-US"); | ||
127 | Thread.CurrentThread.CurrentCulture = USCulture; | ||
128 | |||
129 | try | ||
130 | { | ||
131 | // | ||
132 | // Compile script to an assembly | ||
133 | // | ||
134 | //TODO: DEBUG | ||
135 | BaseClassFactory.MakeBaseClass(ScriptObject.Script); | ||
136 | |||
137 | m_log.DebugFormat("[{0}] Compiling script {1}", Name, ScriptObject.Script.Name); | ||
138 | |||
139 | string fileName = ""; | ||
140 | try | ||
141 | { | ||
142 | IScriptCompiler compiler = | ||
143 | ScriptObject.Script.RegionInfo.FindCompiler(ScriptObject.Script.ScriptMetaData); | ||
144 | RegionInfoStructure currentRegionInfo = ScriptObject.Script.RegionInfo; | ||
145 | fileName = compiler.Compile(ScriptObject.Script.ScriptMetaData, | ||
146 | ref ScriptObject.Script.Source); | ||
147 | ScriptObject.Script.AssemblyFileName = fileName; | ||
148 | } | ||
149 | catch (Exception e) | ||
150 | { | ||
151 | m_log.ErrorFormat("[{0}] Internal error while compiling \"{1}\": {2}", Name, ScriptObject.Script.Name, e.ToString()); | ||
152 | } | ||
153 | m_log.DebugFormat("[{0}] Compiled \"{1}\" to assembly: \"{2}\".", Name, ScriptObject.Script.Name, fileName); | ||
154 | |||
155 | // Add it to our script memstruct | ||
156 | MemAddScript(ScriptObject.Script); | ||
157 | |||
158 | ScriptAssemblies.IScript CompiledScript; | ||
159 | CompiledScript = CurrentRegion.ScriptLoader.LoadScript(ScriptObject.Script); | ||
160 | ScriptObject.Script.State = "default"; | ||
161 | ScriptObject.Script.ScriptObject = CompiledScript; | ||
162 | ScriptObject.Script.Disabled = false; | ||
163 | ScriptObject.Script.Running = true; | ||
164 | //id.LineMap = LSLCompiler.LineMap(); | ||
165 | //id.Script = CompiledScript; | ||
166 | //id.Source = item.Script.Script; | ||
167 | //item.StartParam = startParam; | ||
168 | |||
169 | |||
170 | |||
171 | // TODO: Fire the first start-event | ||
172 | //int eventFlags = | ||
173 | // m_scriptEngine.m_ScriptManager.GetStateEventFlags( | ||
174 | // localID, itemID); | ||
175 | |||
176 | //m_host.SetScriptEvents(itemID, eventFlags); | ||
177 | ScriptObject.Script.RegionInfo.Executors_Execute(ScriptObject.Script, | ||
178 | new EventParams(ScriptObject.Script.LocalID, ScriptObject.Script.ItemID, "state_entry", new object[] { }, new Region.ScriptEngine.Shared.DetectParams[0]) | ||
179 | ); | ||
180 | |||
181 | if (ScriptObject.PostOnRez) | ||
182 | { | ||
183 | ScriptObject.Script.RegionInfo.Executors_Execute(ScriptObject.Script, | ||
184 | new EventParams(ScriptObject.Script.LocalID, "on_rez", new object[] | ||
185 | {new Region.ScriptEngine.Shared.LSL_Types.LSLInteger(ScriptObject.StartParam) | ||
186 | }, new Region.ScriptEngine.Shared.DetectParams[0])); | ||
187 | } | ||
188 | } | ||
189 | catch (Exception e) // LEGIT: User Scripting | ||
190 | { | ||
191 | if (presence != null && (!ScriptObject.PostOnRez)) | ||
192 | presence.ControllingClient.SendAgentAlertMessage( | ||
193 | "Script saved with errors, check debug window!", | ||
194 | false); | ||
195 | try | ||
196 | { | ||
197 | // DISPLAY ERROR INWORLD | ||
198 | string text = "Error compiling script:\n" + | ||
199 | e.Message.ToString(); | ||
200 | if (text.Length > 1100) | ||
201 | text = text.Substring(0, 1099); | ||
202 | |||
203 | ScriptObject.Script.RegionInfo.Scene.SimChat(Utils.StringToBytes(text), | ||
204 | ChatTypeEnum.DebugChannel, 2147483647, | ||
205 | m_host.AbsolutePosition, m_host.Name, m_host.UUID, | ||
206 | false); | ||
207 | } | ||
208 | catch (Exception e2) // LEGIT: User Scripting | ||
209 | { | ||
210 | m_log.Error("[" + | ||
211 | Name + | ||
212 | "]: Error displaying error in-world: " + | ||
213 | e2.ToString()); | ||
214 | m_log.Error("[" + | ||
215 | Name + "]: " + | ||
216 | "Errormessage: Error compiling script:\r\n" + | ||
217 | e2.Message.ToString()); | ||
218 | } | ||
219 | } | ||
220 | } | ||
221 | |||
222 | |||
223 | |||
224 | public void _StopScript(uint localID, UUID itemID) | ||
225 | { | ||
226 | ScriptStructure ss = new ScriptStructure(); | ||
227 | if (!TryGetScript(localID, itemID, ref ss)) | ||
228 | return; | ||
229 | |||
230 | // Stop long command on script | ||
231 | //AsyncCommandManager.RemoveScript(ss); | ||
232 | |||
233 | try | ||
234 | { | ||
235 | // Get AppDomain | ||
236 | // Tell script not to accept new requests | ||
237 | ss.Running = false; | ||
238 | ss.Disabled = true; | ||
239 | AppDomain ad = ss.AppDomain; | ||
240 | |||
241 | // Remove from internal structure | ||
242 | MemRemoveScript(localID, itemID); | ||
243 | |||
244 | // TODO: Tell AppDomain that we have stopped script | ||
245 | |||
246 | } | ||
247 | catch (Exception e) // LEGIT: User Scripting | ||
248 | { | ||
249 | m_log.Error("[" + | ||
250 | Name + | ||
251 | "]: Exception stopping script localID: " + | ||
252 | localID + " LLUID: " + itemID.ToString() + | ||
253 | ": " + e.ToString()); | ||
254 | } | ||
255 | } | ||
256 | |||
257 | |||
258 | } | ||
259 | } | ||
diff --git a/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs b/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs index 3f24763..0f9b964 100644 --- a/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs +++ b/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs | |||
@@ -28,47 +28,170 @@ using System; | |||
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Reflection; | 29 | using System.Reflection; |
30 | using System.Text; | 30 | using System.Text; |
31 | using System.Text.RegularExpressions; | ||
31 | using log4net; | 32 | using log4net; |
32 | using Nini.Config; | 33 | using Nini.Config; |
34 | using OpenMetaverse; | ||
33 | using OpenSim.ApplicationPlugins.ScriptEngine; | 35 | using OpenSim.ApplicationPlugins.ScriptEngine; |
34 | using OpenSim.Region.Environment.Interfaces; | 36 | using OpenSim.Region.Environment.Interfaces; |
35 | using OpenSim.Region.Environment.Scenes; | 37 | using OpenSim.Region.Environment.Scenes; |
36 | using ComponentProviders = OpenSim.ApplicationPlugins.ScriptEngine.ComponentRegistry; | 38 | using OpenSim.ScriptEngine.Components.DotNetEngine.Events; |
39 | using OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler; | ||
40 | using OpenSim.ScriptEngine.Shared; | ||
41 | using ComponentProviders = OpenSim.ApplicationPlugins.ScriptEngine; | ||
37 | 42 | ||
38 | namespace OpenSim.ScriptEngine.Engines.DotNetEngine | 43 | namespace OpenSim.ScriptEngine.Engines.DotNetEngine |
39 | { | 44 | { |
40 | // This is a sample engine | 45 | // This is a sample engine |
41 | public class DotNetEngine : RegionScriptEngineBase | 46 | public partial class DotNetEngine : IScriptEngine |
42 | { | 47 | { |
43 | 48 | ||
44 | 49 | //private string[] _ComponentNames = new string[] { | |
45 | // This will be the makeup of this script engine | 50 | // "Commands_LSL", |
46 | public string[] ComponentNames = new string[] { | 51 | // "Commands_OSSL", |
47 | "Commands_LSL", | 52 | // "Compiler_CS", |
48 | "Commands_OSSL", | 53 | // "Compiler_JS", |
49 | "Compiler_CS", | 54 | // "Compiler_LSL", |
50 | "Compiler_JS", | 55 | // "Compiler_VB", |
51 | "Compiler_LSL", | 56 | // "LSLEventProvider", |
52 | "Compiler_VB", | 57 | // "Scheduler" |
53 | "LSLEventProvider", | 58 | // }; |
54 | "Scheduler" | 59 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | }; | 60 | |
56 | 61 | public string Name { get { return "SECS.DotNetEngine"; } } | |
57 | public override string Name | 62 | //public bool IsSharedModule { get { return true; } } |
63 | internal RegionInfoStructure RegionInfo; | ||
64 | |||
65 | private string[] commandNames = new string[] | ||
66 | { | ||
67 | "Commands_LSL" | ||
68 | }; | ||
69 | |||
70 | private string[] compilerNames = new string[] | ||
71 | { | ||
72 | "Compiler_CS", | ||
73 | "Compiler_JS", | ||
74 | "Compiler_LSL", | ||
75 | "Compiler_YP", | ||
76 | "Compiler_VB" | ||
77 | }; | ||
78 | private string[] schedulerNames = new string[] | ||
79 | { | ||
80 | "Scheduler" | ||
81 | }; | ||
82 | |||
83 | //internal IScriptLoader m_ScriptLoader; | ||
84 | internal LSLEventProvider m_LSLEventProvider; | ||
85 | //internal IScriptExecutor m_Executor; | ||
86 | //internal Dictionary<string, IScriptCompiler> Compilers = new Dictionary<string, IScriptCompiler>(); | ||
87 | internal Dictionary<string, IScriptScheduler> Schedulers = new Dictionary<string, IScriptScheduler>(); | ||
88 | public static Dictionary<string, IScriptCompiler> Compilers = new Dictionary<string, IScriptCompiler>(); | ||
89 | // private static bool haveInitialized = false; | ||
90 | |||
91 | public DotNetEngine() | ||
58 | { | 92 | { |
59 | get { return "DotNetEngine"; } | 93 | RegionInfo = new RegionInfoStructure(); |
94 | RegionInfo.Compilers = Compilers; | ||
95 | RegionInfo.Schedulers = Schedulers; | ||
96 | RegionInfo.Executors = new Dictionary<string, IScriptExecutor>(); | ||
97 | RegionInfo.CommandProviders = new Dictionary<string, IScriptCommandProvider>(); | ||
98 | RegionInfo.EventProviders = new Dictionary<string, IScriptEventProvider>(); | ||
99 | RegionInfo.Logger = LogManager.GetLogger("SECS.DotNetEngine.RegionInfo"); | ||
60 | } | 100 | } |
61 | 101 | ||
62 | public override void Initialize() | 102 | public void Initialise(Scene scene, IConfigSource source) |
63 | { | 103 | { |
64 | // We need to initialize the components we will be using. Our baseclass already has builtin functions for this. | 104 | RegionInfo.Scene = scene; |
65 | m_log.Info("[" + Name + "]: Initializing SECs (Script Engine Components)"); | 105 | RegionInfo.ConfigSource = source; |
66 | InitializeComponents(ComponentNames); | 106 | |
107 | m_log.DebugFormat("[{0}] Initializing components", Name); | ||
108 | InitializeComponents(); | ||
67 | } | 109 | } |
68 | 110 | ||
69 | public override void PreClose() | 111 | public void PostInitialise() { } |
112 | |||
113 | /// <summary> | ||
114 | /// Called on region close | ||
115 | /// </summary> | ||
116 | public void Close() | ||
70 | { | 117 | { |
71 | // Before | 118 | ComponentClose(); |
72 | } | 119 | } |
120 | #region Initialize the Script Engine Components we need | ||
121 | public void InitializeComponents() | ||
122 | { | ||
123 | string cname = ""; | ||
124 | m_log.DebugFormat("[{0}] Component initialization", Name); | ||
125 | // Initialize an instance of all module we want | ||
126 | try | ||
127 | { | ||
128 | cname = "ScriptManager"; | ||
129 | m_log.DebugFormat("[{0}] Executor: {1}", Name, cname); | ||
130 | RegionInfo.Executors.Add(cname, | ||
131 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as IScriptExecutor); | ||
132 | |||
133 | cname = "ScriptLoader"; | ||
134 | m_log.DebugFormat("[{0}] ScriptLoader: {1}", Name, cname); | ||
135 | RegionInfo.ScriptLoader = | ||
136 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as IScriptExecutor as ScriptLoader; | ||
137 | |||
138 | // CommandProviders | ||
139 | foreach (string cn in commandNames) | ||
140 | { | ||
141 | cname = cn; | ||
142 | m_log.DebugFormat("[{0}] CommandProvider: {1}", Name, cname); | ||
143 | RegionInfo.CommandProviders.Add(cname, | ||
144 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as | ||
145 | IScriptCommandProvider); | ||
146 | } | ||
147 | |||
148 | // Compilers | ||
149 | foreach (string cn in compilerNames) | ||
150 | { | ||
151 | cname = cn; | ||
152 | m_log.DebugFormat("[{0}] Compiler: {1}", Name, cname); | ||
153 | RegionInfo.Compilers.Add(cname, | ||
154 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as | ||
155 | IScriptCompiler); | ||
156 | } | ||
157 | |||
158 | // Schedulers | ||
159 | foreach (string cn in schedulerNames) | ||
160 | { | ||
161 | cname = cn; | ||
162 | m_log.DebugFormat("[{0}] Scheduler: {1}", Name, cname); | ||
163 | RegionInfo.Schedulers.Add(cname, | ||
164 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as | ||
165 | IScriptScheduler); | ||
166 | } | ||
167 | |||
168 | // Event provider | ||
169 | cname = "LSLEventProvider"; | ||
170 | m_log.DebugFormat("[{0}] EventProvider: {1}", Name, cname); | ||
171 | IScriptEventProvider sep = ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as IScriptEventProvider; | ||
172 | RegionInfo.EventProviders.Add(cname, sep); | ||
173 | m_LSLEventProvider = sep as LSLEventProvider; | ||
174 | |||
175 | // Hook up events | ||
176 | m_LSLEventProvider.RezScript += Events_RezScript; | ||
177 | m_LSLEventProvider.RemoveScript += Events_RemoveScript; | ||
178 | } | ||
179 | catch (Exception e) | ||
180 | { | ||
181 | m_log.ErrorFormat("[{0}] Exception while loading \"{1}\": {2}", Name, cname, e.ToString()); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | private void ComponentClose() | ||
186 | { | ||
187 | // Close schedulers | ||
188 | foreach (IScriptScheduler scheduler in RegionInfo.Schedulers.Values) | ||
189 | { | ||
190 | scheduler.Close(); | ||
191 | } | ||
192 | } | ||
193 | |||
194 | #endregion | ||
195 | |||
73 | } | 196 | } |
74 | } | 197 | } |
diff --git a/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine_ScriptLoadUnload.cs b/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine_ScriptLoadUnload.cs new file mode 100644 index 0000000..bf429f6 --- /dev/null +++ b/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine_ScriptLoadUnload.cs | |||
@@ -0,0 +1,68 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenMetaverse; | ||
5 | using OpenSim.ScriptEngine.Components.DotNetEngine.Events; | ||
6 | using OpenSim.ScriptEngine.Shared; | ||
7 | |||
8 | namespace OpenSim.ScriptEngine.Engines.DotNetEngine | ||
9 | { | ||
10 | public partial class DotNetEngine | ||
11 | { | ||
12 | |||
13 | //internal Dictionary<int, IScriptScheduler> ScriptMapping = new Dictionary<int, IScriptScheduler>(); | ||
14 | |||
15 | |||
16 | // | ||
17 | // HANDLE EVENTS FROM SCRIPTS | ||
18 | // We will handle script add, change and remove events outside of command pipeline | ||
19 | // | ||
20 | #region Script Add/Change/Remove | ||
21 | void Events_RezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine) | ||
22 | { | ||
23 | // ### | ||
24 | // # New script created | ||
25 | // ### | ||
26 | m_log.DebugFormat( | ||
27 | "[{0}] NEW SCRIPT: localID: {1}, itemID: {2}, startParam: {3}, postOnRez: {4}, engine: {5}", | ||
28 | Name, localID, itemID, startParam, postOnRez, engine); | ||
29 | |||
30 | // Make a script object | ||
31 | ScriptStructure scriptObject = new ScriptStructure(); | ||
32 | scriptObject.RegionInfo = RegionInfo; | ||
33 | scriptObject.LocalID = localID; | ||
34 | scriptObject.ItemID = itemID; | ||
35 | scriptObject.Source = script; | ||
36 | |||
37 | // | ||
38 | // Get MetaData from script header | ||
39 | // | ||
40 | ScriptMetaData scriptMetaData = ScriptMetaData.Extract(ref script); | ||
41 | scriptObject.ScriptMetaData = scriptMetaData; | ||
42 | foreach (string key in scriptObject.ScriptMetaData.Keys) | ||
43 | { | ||
44 | m_log.DebugFormat("[{0}] Script metadata: Key: \"{1}\", Value: \"{2}\".", Name, key, scriptObject.ScriptMetaData[key]); | ||
45 | } | ||
46 | |||
47 | // | ||
48 | // Load this assembly | ||
49 | // | ||
50 | // TODO: Use Executor to send a command instead? | ||
51 | m_log.DebugFormat("[{0}] Adding script to scheduler", Name); | ||
52 | RegionInfo.FindScheduler(scriptObject.ScriptMetaData).AddScript(scriptObject); | ||
53 | // Add to our internal mapping | ||
54 | //ScriptMapping.Add(itemID, Schedulers[scheduler]); | ||
55 | } | ||
56 | |||
57 | private void Events_RemoveScript(uint localID, UUID itemID) | ||
58 | { | ||
59 | // Tell all schedulers to remove this item | ||
60 | foreach (IScriptScheduler scheduler in RegionInfo.Schedulers.Values) | ||
61 | { | ||
62 | scheduler.Removecript(localID, itemID); | ||
63 | } | ||
64 | } | ||
65 | #endregion | ||
66 | |||
67 | } | ||
68 | } | ||
diff --git a/OpenSim/ScriptEngine/Shared.Script/ICommandProvider.cs b/OpenSim/ScriptEngine/Shared.Script/ICommandProvider.cs new file mode 100644 index 0000000..fefb5f9 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared.Script/ICommandProvider.cs | |||
@@ -0,0 +1,12 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace ScriptAssemblies | ||
6 | { | ||
7 | public interface ICommandProvider | ||
8 | { | ||
9 | void ExecuteCommand(string functionName, params object[] args); | ||
10 | string Name { get; } | ||
11 | } | ||
12 | } | ||
diff --git a/OpenSim/ScriptEngine/Shared.Script/IScript.cs b/OpenSim/ScriptEngine/Shared.Script/IScript.cs new file mode 100644 index 0000000..5a3d3f3 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared.Script/IScript.cs | |||
@@ -0,0 +1,11 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace ScriptAssemblies | ||
6 | { | ||
7 | public interface IScript | ||
8 | { | ||
9 | void ExecuteFunction(string functionName, params object[] args); | ||
10 | } | ||
11 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Shared.Script/Properties/AssemblyInfo.cs b/OpenSim/ScriptEngine/Shared.Script/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..96b6c0c --- /dev/null +++ b/OpenSim/ScriptEngine/Shared.Script/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,36 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.ScriptEngine.Shared.Script")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("Microsoft")] | ||
12 | [assembly: AssemblyProduct("OpenSim.ScriptEngine.Shared.Script")] | ||
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2008")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("ea77002b-c967-4368-ace9-6533f8147d4b")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Build and Revision Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | // [assembly: AssemblyVersion("1.0.*")] | ||
35 | [assembly: AssemblyVersion("1.0.0.0")] | ||
36 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/ScriptEngine/Shared.Script/ScriptBase.cs b/OpenSim/ScriptEngine/Shared.Script/ScriptBase.cs new file mode 100644 index 0000000..587314f --- /dev/null +++ b/OpenSim/ScriptEngine/Shared.Script/ScriptBase.cs | |||
@@ -0,0 +1,45 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Reflection; | ||
4 | using System.Runtime.Remoting.Lifetime; | ||
5 | using System.Text; | ||
6 | |||
7 | namespace ScriptAssemblies | ||
8 | { | ||
9 | public class ScriptBase : MarshalByRefObject, IScript | ||
10 | { | ||
11 | |||
12 | #region AppDomain Serialization Keep-Alive | ||
13 | // | ||
14 | // Never expire this object | ||
15 | // | ||
16 | public override Object InitializeLifetimeService() | ||
17 | { | ||
18 | ILease lease = (ILease)base.InitializeLifetimeService(); | ||
19 | |||
20 | if (lease.CurrentState == LeaseState.Initial) | ||
21 | { | ||
22 | lease.InitialLeaseTime = TimeSpan.Zero; | ||
23 | } | ||
24 | return lease; | ||
25 | } | ||
26 | #endregion | ||
27 | |||
28 | public delegate void ExecuteFunctionEventDelegate(string functionName, params object[] args); | ||
29 | public event ExecuteFunctionEventDelegate OnExecuteFunction; | ||
30 | |||
31 | private List<ICommandProvider> CommandProviders = new List<ICommandProvider>(); | ||
32 | |||
33 | public ScriptBase() | ||
34 | { | ||
35 | } | ||
36 | |||
37 | public void ExecuteFunction(string functionName, params object[] args) | ||
38 | { | ||
39 | // We got a new command, fire event | ||
40 | if (OnExecuteFunction != null) | ||
41 | OnExecuteFunction(functionName, args); | ||
42 | |||
43 | } | ||
44 | } | ||
45 | } | ||
diff --git a/OpenSim/ScriptEngine/Shared/EventParams.cs b/OpenSim/ScriptEngine/Shared/EventParams.cs new file mode 100644 index 0000000..661086e --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/EventParams.cs | |||
@@ -0,0 +1,47 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenMetaverse; | ||
5 | using OpenSim.Region.ScriptEngine.Shared; | ||
6 | |||
7 | namespace OpenSim.ScriptEngine.Shared | ||
8 | { | ||
9 | /// <summary> | ||
10 | /// Holds all the data required to execute a scripting event. | ||
11 | /// </summary> | ||
12 | public class EventParams | ||
13 | { | ||
14 | public string EventName; | ||
15 | public Object[] Params; | ||
16 | public Region.ScriptEngine.Shared.DetectParams[] DetectParams; | ||
17 | public uint LocalID; | ||
18 | public UUID ItemID; | ||
19 | |||
20 | public EventParams(uint localID, UUID itemID, string eventName, Object[] eventParams, DetectParams[] detectParams) | ||
21 | { | ||
22 | LocalID = localID; | ||
23 | ItemID = itemID; | ||
24 | EventName = eventName; | ||
25 | Params = eventParams; | ||
26 | DetectParams = detectParams; | ||
27 | } | ||
28 | public EventParams(uint localID, string eventName, Object[] eventParams, DetectParams[] detectParams) | ||
29 | { | ||
30 | LocalID = localID; | ||
31 | EventName = eventName; | ||
32 | Params = eventParams; | ||
33 | DetectParams = detectParams; | ||
34 | } | ||
35 | public void test(params object[] args) | ||
36 | { | ||
37 | string functionName = "test"; | ||
38 | test2(functionName, args); | ||
39 | } | ||
40 | public void test2(string functionName, params object[] args) | ||
41 | { | ||
42 | System.Console.WriteLine(functionName, args); | ||
43 | } | ||
44 | |||
45 | |||
46 | } | ||
47 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Shared/IScriptCommandProvider.cs b/OpenSim/ScriptEngine/Shared/IScriptCommandProvider.cs new file mode 100644 index 0000000..f37fcaf --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/IScriptCommandProvider.cs | |||
@@ -0,0 +1,10 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.ScriptEngine.Shared | ||
6 | { | ||
7 | public interface IScriptCommandProvider : ScriptAssemblies.ICommandProvider | ||
8 | { | ||
9 | } | ||
10 | } | ||
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/ScriptEngine/Shared/IScriptEngine.cs b/OpenSim/ScriptEngine/Shared/IScriptEngine.cs new file mode 100644 index 0000000..6148d8d --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/IScriptEngine.cs | |||
@@ -0,0 +1,49 @@ | |||
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 Nini.Config; | ||
31 | using OpenSim.Region.Environment.Interfaces; | ||
32 | using OpenSim.Region.Environment.Scenes; | ||
33 | |||
34 | namespace OpenSim.ScriptEngine.Shared | ||
35 | { | ||
36 | public interface IScriptEngine | ||
37 | { | ||
38 | //string[] ComponentNames { get; } | ||
39 | //Dictionary<string, IScriptEngineComponent> Components { get; } | ||
40 | //void InitializeComponents(); | ||
41 | void Initialise(Scene scene, IConfigSource source); | ||
42 | void PostInitialise(); | ||
43 | void Close(); | ||
44 | string Name { get; } | ||
45 | // string Name { get; } | ||
46 | //void Initialize(); | ||
47 | //void Close(); | ||
48 | } | ||
49 | } \ 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/ScriptEngine/Shared/IScriptEngineRegionComponent.cs b/OpenSim/ScriptEngine/Shared/IScriptEngineRegionComponent.cs new file mode 100644 index 0000000..a8d779d --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/IScriptEngineRegionComponent.cs | |||
@@ -0,0 +1,7 @@ | |||
1 | namespace OpenSim.ScriptEngine.Shared | ||
2 | { | ||
3 | public interface IScriptEngineRegionComponent | ||
4 | { | ||
5 | void Initialize(RegionInfoStructure currentRegion); | ||
6 | } | ||
7 | } | ||
diff --git a/OpenSim/ScriptEngine/Shared/IScriptEventProvider.cs b/OpenSim/ScriptEngine/Shared/IScriptEventProvider.cs new file mode 100644 index 0000000..a290ba4 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/IScriptEventProvider.cs | |||
@@ -0,0 +1,11 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.ScriptEngine.Shared | ||
6 | { | ||
7 | public interface IScriptEventProvider : IScriptEngineComponent, IScriptEngineRegionComponent | ||
8 | { | ||
9 | |||
10 | } | ||
11 | } \ 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/ScriptEngine/Shared/IScriptLoader.cs b/OpenSim/ScriptEngine/Shared/IScriptLoader.cs new file mode 100644 index 0000000..15f7443 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/IScriptLoader.cs | |||
@@ -0,0 +1,9 @@ | |||
1 | using OpenSim.ScriptEngine.Shared; | ||
2 | |||
3 | namespace OpenSim.ScriptEngine.Shared | ||
4 | { | ||
5 | public interface IScriptLoader: IScriptEngineComponent | ||
6 | { | ||
7 | ScriptAssemblies.IScript LoadScript(ScriptStructure script); | ||
8 | } | ||
9 | } \ 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 |
diff --git a/OpenSim/ScriptEngine/Shared/Properties/AssemblyInfo.cs b/OpenSim/ScriptEngine/Shared/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..06a3461 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,36 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.ScriptEngine.Shared")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("Microsoft")] | ||
12 | [assembly: AssemblyProduct("OpenSim.ScriptEngine.Shared")] | ||
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2008")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("ea77002b-c967-4368-ace9-6533f8147d4b")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Build and Revision Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | // [assembly: AssemblyVersion("1.0.*")] | ||
35 | [assembly: AssemblyVersion("1.0.0.0")] | ||
36 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/ScriptEngine/Shared/RegionInfoStructure.cs b/OpenSim/ScriptEngine/Shared/RegionInfoStructure.cs new file mode 100644 index 0000000..834fac3 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/RegionInfoStructure.cs | |||
@@ -0,0 +1,94 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Reflection; | ||
4 | using log4net; | ||
5 | using Nini.Config; | ||
6 | using OpenSim.Region.Environment.Scenes; | ||
7 | using OpenSim.Region.ScriptEngine.Shared; | ||
8 | using OpenSim.ScriptEngine.Shared; | ||
9 | using EventParams=OpenSim.ScriptEngine.Shared.EventParams; | ||
10 | |||
11 | namespace OpenSim.ScriptEngine.Shared | ||
12 | { | ||
13 | public struct RegionInfoStructure | ||
14 | { | ||
15 | public Scene Scene; | ||
16 | public IConfigSource ConfigSource; | ||
17 | |||
18 | public IScriptLoader ScriptLoader; | ||
19 | public Dictionary<string, IScriptEventProvider> EventProviders; | ||
20 | public Dictionary<string, IScriptExecutor> Executors; | ||
21 | public Dictionary<string, IScriptCompiler> Compilers; | ||
22 | public Dictionary<string, IScriptScheduler> Schedulers; | ||
23 | public Dictionary<string, IScriptCommandProvider> CommandProviders; | ||
24 | public ILog Logger; | ||
25 | |||
26 | public void Executors_Execute(EventParams p) | ||
27 | { | ||
28 | // Execute a command on all executors | ||
29 | lock (Executors) | ||
30 | { | ||
31 | foreach (IScriptExecutor exec in Executors.Values) | ||
32 | { | ||
33 | exec.ExecuteCommand(p); | ||
34 | } | ||
35 | } | ||
36 | } | ||
37 | public void Executors_Execute(ScriptStructure scriptContainer, EventParams p) | ||
38 | { | ||
39 | // Execute a command on all executors | ||
40 | lock (Executors) | ||
41 | { | ||
42 | foreach (IScriptExecutor exec in Executors.Values) | ||
43 | { | ||
44 | exec.ExecuteCommand(ref scriptContainer, p); | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | |||
49 | public IScriptCompiler FindCompiler(ScriptMetaData scriptMetaData) | ||
50 | { | ||
51 | string compiler = "Compiler_LSL"; | ||
52 | if (scriptMetaData.ContainsKey("Compiler")) | ||
53 | compiler = scriptMetaData["Compiler"]; | ||
54 | |||
55 | lock (Compilers) | ||
56 | { | ||
57 | if (!Compilers.ContainsKey(compiler)) | ||
58 | throw new Exception("Requested script compiler \"" + compiler + "\" does not exist."); | ||
59 | |||
60 | return Compilers[compiler]; | ||
61 | } | ||
62 | } | ||
63 | |||
64 | public IScriptScheduler FindScheduler(ScriptMetaData scriptMetaData) | ||
65 | { | ||
66 | string scheduler = "Scheduler"; | ||
67 | if (scriptMetaData.ContainsKey("Scheduler")) | ||
68 | scheduler = scriptMetaData["Scheduler"]; | ||
69 | |||
70 | lock (Schedulers) | ||
71 | { | ||
72 | if (!Schedulers.ContainsKey(scheduler)) | ||
73 | throw new Exception("Requested script scheduler \"" + scheduler + "\" does not exist."); | ||
74 | |||
75 | return Schedulers[scheduler]; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | //public Assembly[] GetCommandProviderAssemblies() | ||
80 | //{ | ||
81 | // lock (CommandProviders) | ||
82 | // { | ||
83 | // Assembly[] ass = new Assembly[CommandProviders.Count]; | ||
84 | // int i = 0; | ||
85 | // foreach (string key in CommandProviders.Keys) | ||
86 | // { | ||
87 | // ass[i] = CommandProviders[key].GetType().Assembly; | ||
88 | // i++; | ||
89 | // } | ||
90 | // return ass; | ||
91 | // } | ||
92 | //} | ||
93 | } | ||
94 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Shared/ScriptMetaData.cs b/OpenSim/ScriptEngine/Shared/ScriptMetaData.cs new file mode 100644 index 0000000..462f2d4 --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/ScriptMetaData.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 | */ | ||
27 | using System; | ||
28 | using System.Collections.Generic; | ||
29 | |||
30 | namespace OpenSim.ScriptEngine.Shared | ||
31 | { | ||
32 | public class ScriptMetaData: Dictionary<string, string> | ||
33 | { | ||
34 | private static readonly char[] LineSeparator = "\r\n".ToCharArray(); | ||
35 | private static readonly char[] Separator = { ':' }; | ||
36 | public static ScriptMetaData Extract(ref string Script) | ||
37 | { | ||
38 | ScriptMetaData ret = new ScriptMetaData(); | ||
39 | if (string.IsNullOrEmpty(Script)) | ||
40 | return ret; | ||
41 | |||
42 | // Process it line by line | ||
43 | string Line = ""; | ||
44 | for (int i = 0; i < Script.Length + 1; i++) | ||
45 | { | ||
46 | // Found a line separator? | ||
47 | if (i < Script.Length | ||
48 | && Script[i] != LineSeparator[0] | ||
49 | && Script[i] != LineSeparator[1]) | ||
50 | { | ||
51 | // No, not end of line. Add to current line | ||
52 | Line += Script[i]; | ||
53 | } | ||
54 | else | ||
55 | { | ||
56 | // Extract MetaData from this line. Returns False if not found. | ||
57 | if (!_GetMetaFromLine(ret, Line)) | ||
58 | continue; | ||
59 | // Empty for next round | ||
60 | Line = ""; | ||
61 | } | ||
62 | } | ||
63 | return ret; | ||
64 | } | ||
65 | |||
66 | private static bool _GetMetaFromLine(ScriptMetaData ret, string line) | ||
67 | { | ||
68 | line = line.Trim(); | ||
69 | |||
70 | // Empty line? We may find more later | ||
71 | if (line == "") | ||
72 | return true; | ||
73 | |||
74 | // Is this a comment? If not, then return false | ||
75 | if (!line.StartsWith("//")) | ||
76 | return false; | ||
77 | |||
78 | // It is a comment | ||
79 | string[] keyval = line.Split(Separator, 2, StringSplitOptions.None); | ||
80 | keyval[0] = keyval[0].Substring(2, keyval[0].Length - 2).Trim(); | ||
81 | keyval[1] = keyval[1].Trim(); | ||
82 | |||
83 | // Add it | ||
84 | if (keyval[0] != "") | ||
85 | if (!ret.ContainsKey(keyval[0])) | ||
86 | { | ||
87 | //m_log.DebugFormat("[DotNetEngine] Script metadata: Key: \"{0}\", Value: \"{1}\".", keyval[0], keyval[1]); | ||
88 | ret.Add(keyval[0], keyval[1]); | ||
89 | } | ||
90 | |||
91 | return true; | ||
92 | } | ||
93 | |||
94 | } | ||
95 | } \ No newline at end of file | ||
diff --git a/OpenSim/ScriptEngine/Shared/ScriptStructure.cs b/OpenSim/ScriptEngine/Shared/ScriptStructure.cs new file mode 100644 index 0000000..cbf333b --- /dev/null +++ b/OpenSim/ScriptEngine/Shared/ScriptStructure.cs | |||
@@ -0,0 +1,109 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Reflection; | ||
4 | using System.Text; | ||
5 | using OpenMetaverse; | ||
6 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
7 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
8 | using OpenSim.ScriptEngine.Shared; | ||
9 | |||
10 | namespace OpenSim.ScriptEngine.Shared | ||
11 | { | ||
12 | public struct ScriptStructure | ||
13 | { | ||
14 | public RegionInfoStructure RegionInfo; | ||
15 | public ScriptMetaData ScriptMetaData; | ||
16 | |||
17 | public ScriptAssemblies.IScript ScriptObject; | ||
18 | public string State; | ||
19 | public bool Running; | ||
20 | public bool Disabled; | ||
21 | public string Source; | ||
22 | public int StartParam; | ||
23 | public AppDomain AppDomain; | ||
24 | public Dictionary<string, IScriptApi> Apis; | ||
25 | public Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> LineMap; | ||
26 | public uint LocalID; | ||
27 | public UUID ItemID; | ||
28 | public string AssemblyFileName; | ||
29 | |||
30 | public string ScriptID { get { return LocalID.ToString() + "." + ItemID.ToString(); } } | ||
31 | public string Name { get { return "Script:" + ScriptID; } } | ||
32 | private bool Initialized; | ||
33 | private Dictionary<string, Delegate> InternalFunctions; | ||
34 | public string AssemblyName; | ||
35 | |||
36 | public void ExecuteEvent(EventParams p) | ||
37 | { | ||
38 | ExecuteMethod(p, true); | ||
39 | } | ||
40 | |||
41 | public void ExecuteMethod(EventParams p) | ||
42 | { | ||
43 | ExecuteMethod(p, false); | ||
44 | } | ||
45 | private void ExecuteMethod(EventParams p, bool isEvent) | ||
46 | { | ||
47 | // First time initialization? | ||
48 | if (!Initialized) | ||
49 | { | ||
50 | Initialized = true; | ||
51 | CacheInternalFunctions(); | ||
52 | } | ||
53 | |||
54 | lock (InternalFunctions) | ||
55 | { | ||
56 | // Make function name | ||
57 | string FunctionName; | ||
58 | if (isEvent) | ||
59 | FunctionName = State + "_event_" + p.EventName; | ||
60 | else | ||
61 | FunctionName = p.EventName; | ||
62 | |||
63 | // Check if this function exist | ||
64 | if (!InternalFunctions.ContainsKey(FunctionName)) | ||
65 | { | ||
66 | // TODO: Send message in-world | ||
67 | //RegionInfo.Scene. | ||
68 | RegionInfo.Logger.ErrorFormat("[{0}] Script function \"{1}\" was not found.", Name, FunctionName); | ||
69 | return; | ||
70 | } | ||
71 | |||
72 | // Execute script function | ||
73 | try | ||
74 | { | ||
75 | InternalFunctions[FunctionName].DynamicInvoke(p.Params); | ||
76 | } | ||
77 | catch (Exception e) | ||
78 | { | ||
79 | RegionInfo.Logger.ErrorFormat("[{0}] Execute \"{1}\" failed: {2}", Name, FunctionName, e.ToString()); | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | |||
84 | /// <summary> | ||
85 | /// Cache functions into a dictionary with delegates. Should be faster than reflection. | ||
86 | /// </summary> | ||
87 | private void CacheInternalFunctions() | ||
88 | { | ||
89 | Type scriptObjectType = ScriptObject.GetType(); | ||
90 | InternalFunctions = new Dictionary<string, Delegate>(); | ||
91 | |||
92 | MethodInfo[] methods = scriptObjectType.GetMethods(); | ||
93 | lock (InternalFunctions) | ||
94 | { | ||
95 | // Read all methods into a dictionary | ||
96 | foreach (MethodInfo mi in methods) | ||
97 | { | ||
98 | // TODO: We don't support overloading | ||
99 | if (!InternalFunctions.ContainsKey(mi.Name)) | ||
100 | InternalFunctions.Add(mi.Name, Delegate.CreateDelegate(scriptObjectType, ScriptObject, mi)); | ||
101 | else | ||
102 | RegionInfo.Logger.ErrorFormat("[{0}] Error: Script function \"{1}\" is already added. We do not support overloading.", | ||
103 | Name, mi.Name); | ||
104 | } | ||
105 | } | ||
106 | } | ||
107 | |||
108 | } | ||
109 | } \ No newline at end of file | ||
diff --git a/prebuild.xml b/prebuild.xml index 7ca00d6..f3af10b 100644 --- a/prebuild.xml +++ b/prebuild.xml | |||
@@ -2205,7 +2205,29 @@ | |||
2205 | </Files> | 2205 | </Files> |
2206 | </Project> | 2206 | </Project> |
2207 | 2207 | ||
2208 | <Project name="OpenSim.ApplicationPlugins.ScriptEngine" path="OpenSim/ApplicationPlugins/ScriptEngine" type="Library"> | 2208 | <Project name="OpenSim.ScriptEngine.Shared.Script" path="OpenSim/ScriptEngine/Shared.Script" type="Library"> |
2209 | <Configuration name="Debug"> | ||
2210 | <Options> | ||
2211 | <OutputPath>../../../bin/</OutputPath> | ||
2212 | </Options> | ||
2213 | </Configuration> | ||
2214 | <Configuration name="Release"> | ||
2215 | <Options> | ||
2216 | <OutputPath>../../../bin/</OutputPath> | ||
2217 | </Options> | ||
2218 | </Configuration> | ||
2219 | |||
2220 | <ReferencePath>../../../bin/</ReferencePath> | ||
2221 | <Reference name="System" localCopy="false"/> | ||
2222 | |||
2223 | <Files> | ||
2224 | <Match pattern="*.cs" recurse="true" > | ||
2225 | <Exclude name="Tests" pattern="Tests" /> | ||
2226 | </Match> | ||
2227 | </Files> | ||
2228 | </Project> | ||
2229 | |||
2230 | <Project name="OpenSim.ScriptEngine.Shared" path="OpenSim/ScriptEngine/Shared" type="Library"> | ||
2209 | <Configuration name="Debug"> | 2231 | <Configuration name="Debug"> |
2210 | <Options> | 2232 | <Options> |
2211 | <OutputPath>../../../bin/</OutputPath> | 2233 | <OutputPath>../../../bin/</OutputPath> |
@@ -2218,7 +2240,6 @@ | |||
2218 | </Configuration> | 2240 | </Configuration> |
2219 | 2241 | ||
2220 | <ReferencePath>../../../bin/</ReferencePath> | 2242 | <ReferencePath>../../../bin/</ReferencePath> |
2221 | <ReferencePath>../../../bin/ScriptEngines/</ReferencePath> | ||
2222 | <Reference name="System" localCopy="false"/> | 2243 | <Reference name="System" localCopy="false"/> |
2223 | <Reference name="System.Data" localCopy="false"/> | 2244 | <Reference name="System.Data" localCopy="false"/> |
2224 | <Reference name="System.Web" localCopy="false"/> | 2245 | <Reference name="System.Web" localCopy="false"/> |
@@ -2227,20 +2248,58 @@ | |||
2227 | <Reference name="OpenMetaverse.dll"/> | 2248 | <Reference name="OpenMetaverse.dll"/> |
2228 | <Reference name="OpenSim" /> | 2249 | <Reference name="OpenSim" /> |
2229 | <Reference name="OpenSim.Framework"/> | 2250 | <Reference name="OpenSim.Framework"/> |
2230 | <Reference name="OpenSim.Framework.Servers"/> | ||
2231 | <Reference name="OpenSim.Framework.Communications"/> | 2251 | <Reference name="OpenSim.Framework.Communications"/> |
2232 | <Reference name="OpenSim.Region.ClientStack"/> | ||
2233 | <Reference name="OpenSim.Region.Environment" /> | 2252 | <Reference name="OpenSim.Region.Environment" /> |
2234 | <Reference name="OpenSim.Region.Interfaces" /> | 2253 | <Reference name="OpenSim.Region.Interfaces" /> |
2235 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2254 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2236 | <Reference name="OpenSim.Framework.Console"/> | 2255 | <Reference name="OpenSim.Framework.Console"/> |
2237 | <Reference name="Nini.dll" /> | 2256 | <Reference name="Nini.dll" /> |
2238 | <Reference name="RAIL.dll"/> | 2257 | <Reference name="log4net.dll"/> |
2258 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2259 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2260 | |||
2261 | <Files> | ||
2262 | <Match pattern="*.cs" recurse="true" > | ||
2263 | <Exclude name="Tests" pattern="Tests" /> | ||
2264 | </Match> | ||
2265 | </Files> | ||
2266 | </Project> | ||
2267 | |||
2268 | <Project name="OpenSim.ApplicationPlugins.ScriptEngine" path="OpenSim/ApplicationPlugins/ScriptEngine" type="Library"> | ||
2269 | <Configuration name="Debug"> | ||
2270 | <Options> | ||
2271 | <OutputPath>../../../bin/</OutputPath> | ||
2272 | </Options> | ||
2273 | </Configuration> | ||
2274 | <Configuration name="Release"> | ||
2275 | <Options> | ||
2276 | <OutputPath>../../../bin/</OutputPath> | ||
2277 | </Options> | ||
2278 | </Configuration> | ||
2279 | |||
2280 | <ReferencePath>../../../bin/</ReferencePath> | ||
2281 | <Reference name="System" localCopy="false"/> | ||
2282 | <Reference name="System.Data" localCopy="false"/> | ||
2283 | <Reference name="System.Web" localCopy="false"/> | ||
2284 | <Reference name="System.Xml" localCopy="false"/> | ||
2285 | <Reference name="OpenMetaverseTypes.dll"/> | ||
2286 | <Reference name="OpenMetaverse.dll"/> | ||
2287 | <Reference name="OpenSim" /> | ||
2288 | <Reference name="OpenSim.Framework"/> | ||
2289 | <Reference name="OpenSim.Framework.Communications"/> | ||
2290 | <Reference name="OpenSim.Region.Environment" /> | ||
2291 | <Reference name="OpenSim.Region.Interfaces" /> | ||
2292 | <Reference name="OpenSim.Region.Physics.Manager" /> | ||
2239 | <Reference name="OpenSim.Framework.Console"/> | 2293 | <Reference name="OpenSim.Framework.Console"/> |
2240 | <Reference name="Nini.dll" /> | 2294 | <Reference name="Nini.dll" /> |
2241 | <Reference name="log4net.dll"/> | 2295 | <Reference name="log4net.dll"/> |
2296 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2297 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2298 | <Reference name="OpenSim.Region.ClientStack"/> | ||
2299 | <Reference name="OpenSim.Framework.Servers"/> | ||
2242 | 2300 | ||
2243 | <Files> | 2301 | <Files> |
2302 | <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> | ||
2244 | <Match pattern="*.cs" recurse="true" > | 2303 | <Match pattern="*.cs" recurse="true" > |
2245 | <Exclude name="Tests" pattern="Tests" /> | 2304 | <Exclude name="Tests" pattern="Tests" /> |
2246 | </Match> | 2305 | </Match> |
@@ -2250,17 +2309,16 @@ | |||
2250 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL" type="Library"> | 2309 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL" type="Library"> |
2251 | <Configuration name="Debug"> | 2310 | <Configuration name="Debug"> |
2252 | <Options> | 2311 | <Options> |
2253 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2312 | <OutputPath>../../../../../bin/</OutputPath> |
2254 | </Options> | 2313 | </Options> |
2255 | </Configuration> | 2314 | </Configuration> |
2256 | <Configuration name="Release"> | 2315 | <Configuration name="Release"> |
2257 | <Options> | 2316 | <Options> |
2258 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2317 | <OutputPath>../../../../../bin/</OutputPath> |
2259 | </Options> | 2318 | </Options> |
2260 | </Configuration> | 2319 | </Configuration> |
2261 | 2320 | ||
2262 | <ReferencePath>../../../../../bin/</ReferencePath> | 2321 | <ReferencePath>../../../../../bin/</ReferencePath> |
2263 | <ReferencePath>../../../../../bin/ScriptEngines/</ReferencePath> | ||
2264 | <Reference name="System" localCopy="false"/> | 2322 | <Reference name="System" localCopy="false"/> |
2265 | <Reference name="System.Data" localCopy="false"/> | 2323 | <Reference name="System.Data" localCopy="false"/> |
2266 | <Reference name="System.Web" localCopy="false"/> | 2324 | <Reference name="System.Web" localCopy="false"/> |
@@ -2274,12 +2332,11 @@ | |||
2274 | <Reference name="OpenSim.Region.Interfaces" /> | 2332 | <Reference name="OpenSim.Region.Interfaces" /> |
2275 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2333 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2276 | <Reference name="OpenSim.Framework.Console"/> | 2334 | <Reference name="OpenSim.Framework.Console"/> |
2277 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2278 | <Reference name="Nini.dll" /> | ||
2279 | <Reference name="RAIL.dll"/> | ||
2280 | <Reference name="OpenSim.Framework.Console"/> | ||
2281 | <Reference name="Nini.dll" /> | 2335 | <Reference name="Nini.dll" /> |
2282 | <Reference name="log4net.dll"/> | 2336 | <Reference name="log4net.dll"/> |
2337 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2338 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2339 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2283 | 2340 | ||
2284 | <Files> | 2341 | <Files> |
2285 | <Match pattern="*.cs" recurse="true" > | 2342 | <Match pattern="*.cs" recurse="true" > |
@@ -2291,17 +2348,16 @@ | |||
2291 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL" type="Library"> | 2348 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL" type="Library"> |
2292 | <Configuration name="Debug"> | 2349 | <Configuration name="Debug"> |
2293 | <Options> | 2350 | <Options> |
2294 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2351 | <OutputPath>../../../../../bin/</OutputPath> |
2295 | </Options> | 2352 | </Options> |
2296 | </Configuration> | 2353 | </Configuration> |
2297 | <Configuration name="Release"> | 2354 | <Configuration name="Release"> |
2298 | <Options> | 2355 | <Options> |
2299 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2356 | <OutputPath>../../../../../bin/</OutputPath> |
2300 | </Options> | 2357 | </Options> |
2301 | </Configuration> | 2358 | </Configuration> |
2302 | 2359 | ||
2303 | <ReferencePath>../../../../../bin/</ReferencePath> | 2360 | <ReferencePath>../../../../../bin/</ReferencePath> |
2304 | <ReferencePath>../../../../../bin/ScriptEngines/</ReferencePath> | ||
2305 | <Reference name="System" localCopy="false"/> | 2361 | <Reference name="System" localCopy="false"/> |
2306 | <Reference name="System.Data" localCopy="false"/> | 2362 | <Reference name="System.Data" localCopy="false"/> |
2307 | <Reference name="System.Web" localCopy="false"/> | 2363 | <Reference name="System.Web" localCopy="false"/> |
@@ -2315,12 +2371,11 @@ | |||
2315 | <Reference name="OpenSim.Region.Interfaces" /> | 2371 | <Reference name="OpenSim.Region.Interfaces" /> |
2316 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2372 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2317 | <Reference name="OpenSim.Framework.Console"/> | 2373 | <Reference name="OpenSim.Framework.Console"/> |
2318 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2319 | <Reference name="Nini.dll" /> | ||
2320 | <Reference name="RAIL.dll"/> | ||
2321 | <Reference name="OpenSim.Framework.Console"/> | ||
2322 | <Reference name="Nini.dll" /> | 2374 | <Reference name="Nini.dll" /> |
2323 | <Reference name="log4net.dll"/> | 2375 | <Reference name="log4net.dll"/> |
2376 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2377 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2378 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2324 | 2379 | ||
2325 | <Files> | 2380 | <Files> |
2326 | <Match pattern="*.cs" recurse="true" > | 2381 | <Match pattern="*.cs" recurse="true" > |
@@ -2332,12 +2387,12 @@ | |||
2332 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Compilers" path="OpenSim/ScriptEngine/Components/DotNetEngine/Compilers" type="Library"> | 2387 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Compilers" path="OpenSim/ScriptEngine/Components/DotNetEngine/Compilers" type="Library"> |
2333 | <Configuration name="Debug"> | 2388 | <Configuration name="Debug"> |
2334 | <Options> | 2389 | <Options> |
2335 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2390 | <OutputPath>../../../../../bin/</OutputPath> |
2336 | </Options> | 2391 | </Options> |
2337 | </Configuration> | 2392 | </Configuration> |
2338 | <Configuration name="Release"> | 2393 | <Configuration name="Release"> |
2339 | <Options> | 2394 | <Options> |
2340 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2395 | <OutputPath>../../../../../bin/</OutputPath> |
2341 | </Options> | 2396 | </Options> |
2342 | </Configuration> | 2397 | </Configuration> |
2343 | 2398 | ||
@@ -2356,12 +2411,13 @@ | |||
2356 | <Reference name="OpenSim.Region.Interfaces" /> | 2411 | <Reference name="OpenSim.Region.Interfaces" /> |
2357 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2412 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2358 | <Reference name="OpenSim.Framework.Console"/> | 2413 | <Reference name="OpenSim.Framework.Console"/> |
2359 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2360 | <Reference name="Nini.dll" /> | ||
2361 | <Reference name="RAIL.dll"/> | ||
2362 | <Reference name="OpenSim.Framework.Console"/> | ||
2363 | <Reference name="Nini.dll" /> | 2414 | <Reference name="Nini.dll" /> |
2364 | <Reference name="log4net.dll"/> | 2415 | <Reference name="log4net.dll"/> |
2416 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2417 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2418 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2419 | <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/> | ||
2420 | <Reference name="Microsoft.JScript"/> | ||
2365 | 2421 | ||
2366 | <Files> | 2422 | <Files> |
2367 | <Match pattern="*.cs" recurse="true" > | 2423 | <Match pattern="*.cs" recurse="true" > |
@@ -2373,17 +2429,16 @@ | |||
2373 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Events" path="OpenSim/ScriptEngine/Components/DotNetEngine/Events" type="Library"> | 2429 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Events" path="OpenSim/ScriptEngine/Components/DotNetEngine/Events" type="Library"> |
2374 | <Configuration name="Debug"> | 2430 | <Configuration name="Debug"> |
2375 | <Options> | 2431 | <Options> |
2376 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2432 | <OutputPath>../../../../../bin/</OutputPath> |
2377 | </Options> | 2433 | </Options> |
2378 | </Configuration> | 2434 | </Configuration> |
2379 | <Configuration name="Release"> | 2435 | <Configuration name="Release"> |
2380 | <Options> | 2436 | <Options> |
2381 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2437 | <OutputPath>../../../../../bin/</OutputPath> |
2382 | </Options> | 2438 | </Options> |
2383 | </Configuration> | 2439 | </Configuration> |
2384 | 2440 | ||
2385 | <ReferencePath>../../../../../bin/</ReferencePath> | 2441 | <ReferencePath>../../../../../bin/</ReferencePath> |
2386 | <ReferencePath>../../../../../bin/ScriptEngines/</ReferencePath> | ||
2387 | <Reference name="System" localCopy="false"/> | 2442 | <Reference name="System" localCopy="false"/> |
2388 | <Reference name="System.Data" localCopy="false"/> | 2443 | <Reference name="System.Data" localCopy="false"/> |
2389 | <Reference name="System.Web" localCopy="false"/> | 2444 | <Reference name="System.Web" localCopy="false"/> |
@@ -2397,12 +2452,12 @@ | |||
2397 | <Reference name="OpenSim.Region.Interfaces" /> | 2452 | <Reference name="OpenSim.Region.Interfaces" /> |
2398 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2453 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2399 | <Reference name="OpenSim.Framework.Console"/> | 2454 | <Reference name="OpenSim.Framework.Console"/> |
2400 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2401 | <Reference name="Nini.dll" /> | ||
2402 | <Reference name="RAIL.dll"/> | ||
2403 | <Reference name="OpenSim.Framework.Console"/> | ||
2404 | <Reference name="Nini.dll" /> | 2455 | <Reference name="Nini.dll" /> |
2405 | <Reference name="log4net.dll"/> | 2456 | <Reference name="log4net.dll"/> |
2457 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2458 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2459 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2460 | <Reference name="Microsoft.JScript"/> | ||
2406 | 2461 | ||
2407 | <Files> | 2462 | <Files> |
2408 | <Match pattern="*.cs" recurse="true" > | 2463 | <Match pattern="*.cs" recurse="true" > |
@@ -2414,12 +2469,12 @@ | |||
2414 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler" path="OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler" type="Library"> | 2469 | <Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler" path="OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler" type="Library"> |
2415 | <Configuration name="Debug"> | 2470 | <Configuration name="Debug"> |
2416 | <Options> | 2471 | <Options> |
2417 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2472 | <OutputPath>../../../../../bin/</OutputPath> |
2418 | </Options> | 2473 | </Options> |
2419 | </Configuration> | 2474 | </Configuration> |
2420 | <Configuration name="Release"> | 2475 | <Configuration name="Release"> |
2421 | <Options> | 2476 | <Options> |
2422 | <OutputPath>../../../../../bin/ScriptEngines/</OutputPath> | 2477 | <OutputPath>../../../../../bin/</OutputPath> |
2423 | </Options> | 2478 | </Options> |
2424 | </Configuration> | 2479 | </Configuration> |
2425 | 2480 | ||
@@ -2438,12 +2493,11 @@ | |||
2438 | <Reference name="OpenSim.Region.Interfaces" /> | 2493 | <Reference name="OpenSim.Region.Interfaces" /> |
2439 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2494 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2440 | <Reference name="OpenSim.Framework.Console"/> | 2495 | <Reference name="OpenSim.Framework.Console"/> |
2441 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2442 | <Reference name="Nini.dll" /> | ||
2443 | <Reference name="RAIL.dll"/> | ||
2444 | <Reference name="OpenSim.Framework.Console"/> | ||
2445 | <Reference name="Nini.dll" /> | 2496 | <Reference name="Nini.dll" /> |
2446 | <Reference name="log4net.dll"/> | 2497 | <Reference name="log4net.dll"/> |
2498 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2499 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2500 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2447 | 2501 | ||
2448 | <Files> | 2502 | <Files> |
2449 | <Match pattern="*.cs" recurse="true" > | 2503 | <Match pattern="*.cs" recurse="true" > |
@@ -2455,12 +2509,12 @@ | |||
2455 | <Project name="OpenSim.ScriptEngine.Engines.DotNetEngine" path="OpenSim/ScriptEngine/Engines/DotNetEngine" type="Library"> | 2509 | <Project name="OpenSim.ScriptEngine.Engines.DotNetEngine" path="OpenSim/ScriptEngine/Engines/DotNetEngine" type="Library"> |
2456 | <Configuration name="Debug"> | 2510 | <Configuration name="Debug"> |
2457 | <Options> | 2511 | <Options> |
2458 | <OutputPath>../../../../bin/ScriptEngines/</OutputPath> | 2512 | <OutputPath>../../../../bin/</OutputPath> |
2459 | </Options> | 2513 | </Options> |
2460 | </Configuration> | 2514 | </Configuration> |
2461 | <Configuration name="Release"> | 2515 | <Configuration name="Release"> |
2462 | <Options> | 2516 | <Options> |
2463 | <OutputPath>../../../../bin/ScriptEngines/</OutputPath> | 2517 | <OutputPath>../../../../bin/</OutputPath> |
2464 | </Options> | 2518 | </Options> |
2465 | </Configuration> | 2519 | </Configuration> |
2466 | 2520 | ||
@@ -2479,12 +2533,16 @@ | |||
2479 | <Reference name="OpenSim.Region.Interfaces" /> | 2533 | <Reference name="OpenSim.Region.Interfaces" /> |
2480 | <Reference name="OpenSim.Region.Physics.Manager" /> | 2534 | <Reference name="OpenSim.Region.Physics.Manager" /> |
2481 | <Reference name="OpenSim.Framework.Console"/> | 2535 | <Reference name="OpenSim.Framework.Console"/> |
2482 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2483 | <Reference name="Nini.dll" /> | ||
2484 | <Reference name="RAIL.dll"/> | ||
2485 | <Reference name="OpenSim.Framework.Console"/> | ||
2486 | <Reference name="Nini.dll" /> | 2536 | <Reference name="Nini.dll" /> |
2487 | <Reference name="log4net.dll"/> | 2537 | <Reference name="log4net.dll"/> |
2538 | <Reference name="OpenSim.ApplicationPlugins.ScriptEngine"/> | ||
2539 | <Reference name="OpenSim.Region.ScriptEngine.Shared"/> | ||
2540 | <Reference name="OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler"/> | ||
2541 | <Reference name="OpenSim.ScriptEngine.Components.DotNetEngine.Events"/> | ||
2542 | <Reference name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL"/> | ||
2543 | <Reference name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL"/> | ||
2544 | <Reference name="OpenSim.ScriptEngine.Shared"/> | ||
2545 | <Reference name="OpenSim.ScriptEngine.Shared.Script"/> | ||
2488 | 2546 | ||
2489 | <Files> | 2547 | <Files> |
2490 | <Match pattern="*.cs" recurse="true" > | 2548 | <Match pattern="*.cs" recurse="true" > |