aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs1
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs101
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs68
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs (renamed from OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs)72
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs182
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml12
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml11
-rw-r--r--OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs134
-rw-r--r--OpenSim/Data/SQLite/SQLiteAssetData.cs4
-rw-r--r--OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs4
-rw-r--r--OpenSim/Framework/PluginLoader.cs12
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/Interfaces/IScript.cs2
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/Commands_LSL.cs11
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_BaseClass.cs29
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL/LSL_Constants.cs498
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL/Commands_OSSL.cs11
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/CILCompiler.cs186
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_CS.cs34
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_JS.cs20
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_LSL.cs21
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_VB.cs20
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/Compiler_YP.cs (renamed from OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs)32
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/LSL/LSL2CS.cs44
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Compilers/YP/YP2CS.cs54
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Events/LSLEventProvider.cs81
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/BaseClassFactory.cs213
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/LoadUnloadStructure.cs22
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/Scheduler.cs19
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptLoader.cs216
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager.cs176
-rw-r--r--OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler/ScriptManager_ScriptLoadUnload.cs259
-rw-r--r--OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs171
-rw-r--r--OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine_ScriptLoadUnload.cs68
-rw-r--r--OpenSim/ScriptEngine/Shared.Script/ICommandProvider.cs12
-rw-r--r--OpenSim/ScriptEngine/Shared.Script/IScript.cs11
-rw-r--r--OpenSim/ScriptEngine/Shared.Script/Properties/AssemblyInfo.cs36
-rw-r--r--OpenSim/ScriptEngine/Shared.Script/ScriptBase.cs45
-rw-r--r--OpenSim/ScriptEngine/Shared/EventParams.cs47
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptCommandProvider.cs10
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptCompiler.cs (renamed from OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs)17
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptEngine.cs49
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptEngineComponent.cs (renamed from OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs)13
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptEngineRegionComponent.cs7
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptEventProvider.cs11
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptExecutor.cs (renamed from OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs)16
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptLoader.cs9
-rw-r--r--OpenSim/ScriptEngine/Shared/IScriptScheduler.cs (renamed from OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs)18
-rw-r--r--OpenSim/ScriptEngine/Shared/Properties/AssemblyInfo.cs36
-rw-r--r--OpenSim/ScriptEngine/Shared/RegionInfoStructure.cs94
-rw-r--r--OpenSim/ScriptEngine/Shared/ScriptMetaData.cs95
-rw-r--r--OpenSim/ScriptEngine/Shared/ScriptStructure.cs109
-rw-r--r--prebuild.xml146
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 */
27using System;
28using System.Collections.Generic;
29using System.IO;
30using System.Reflection;
31using System.Text;
32using log4net;
33using OpenSim.ApplicationPlugins.ScriptEngine.Components;
34
35namespace OpenSim.ApplicationPlugins.ScriptEngine
36{
37 /// <summary>
38 /// Used to load ScriptEngine component .dll's
39 /// </summary>
40 internal class ComponentLoader
41 {
42 internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
43 //private ScriptEnginePlugin scriptEnginePlugin;
44 public ComponentLoader(ScriptEnginePlugin sep)
45 {
46 //scriptEnginePlugin = sep;
47 }
48
49 /// <summary>
50 /// Load components from directory
51 /// </summary>
52 /// <param name="directory"></param>
53 public void Load(string directory)
54 {
55 // We may want to change how this functions as currently it required unique class names for each component
56
57 foreach (string file in Directory.GetFiles(directory, "*.dll"))
58 {
59 //m_log.DebugFormat("[ScriptEngine]: Loading: [{0}].", file);
60 Assembly componentAssembly = Assembly.LoadFrom(file);
61 if (componentAssembly != null)
62 {
63 try
64 {
65 // Go through all types in the assembly
66 foreach (Type componentType in componentAssembly.GetTypes())
67 {
68 if (componentType.IsPublic
69 && !componentType.IsAbstract)
70 {
71 if (componentType.IsSubclassOf(typeof (ComponentBase)))
72 {
73 // We have found an type which is derived from ProdiverBase, add it to provider list
74 m_log.InfoFormat("[ScriptEngine]: Adding component: {0}", componentType.Name);
75 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 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine;
31using OpenSim.ApplicationPlugins.ScriptEngine.Components;
32
33namespace 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 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection;
29using System.Text; 30using System.Text;
31using log4net;
30using Nini.Config; 32using Nini.Config;
31using OpenSim.Region.Environment.Interfaces; 33using OpenSim.Region.Environment.Interfaces;
32using OpenSim.Region.Environment.Scenes; 34using OpenSim.Region.Environment.Scenes;
35using OpenSim.ScriptEngine.Shared;
33 36
34namespace OpenSim.ApplicationPlugins.ScriptEngine 37namespace 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 */
27using System;
28using System.Collections.Generic;
29using System.Reflection;
30using System.Text;
31using log4net;
32using Nini.Config;
33using OpenSim.ApplicationPlugins.ScriptEngine.Components;
34using OpenSim.Region.Environment.Scenes;
35
36namespace 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 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.IO;
29using System.Reflection; 30using System.Reflection;
30using System.Text; 31using System.Text;
32using System.Threading;
33using OpenSim.ScriptEngine.Shared;
31using log4net; 34using log4net;
32 35
33namespace OpenSim.ApplicationPlugins.ScriptEngine 36namespace 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
28using System; 28using System;
29using System.Collections;
30using System.Collections.Generic; 29using System.Collections.Generic;
31using OpenSim.Region.ScriptEngine.Interfaces; 30using OpenSim.Region.ScriptEngine.Interfaces;
32using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
33 31
34namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase 32namespace 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 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Text; 30using System.Text;
31using OpenSim.ApplicationPlugins.ScriptEngine.Components; 31using OpenSim.ScriptEngine.Shared;
32 32
33namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL 33namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4using System.Text;
5using log4net;
6using OpenSim.ScriptEngine.Shared;
7
8namespace 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
28using System;
29using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
30using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
31using LSLInteger = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
32
33namespace 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 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Text; 30using System.Text;
31using OpenSim.ApplicationPlugins.ScriptEngine.Components; 31using OpenSim.ScriptEngine.Shared;
32 32
33namespace OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL 33namespace 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 */
27using System;
28using System.CodeDom.Compiler;
29using System.Collections.Generic;
30using System.IO;
31using System.Reflection;
32using System.Text.RegularExpressions;
33using log4net;
34using OpenSim.ScriptEngine.Shared;
35using ScriptAssemblies;
36
37namespace 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 */
27using System; 27using System;
28using System.CodeDom.Compiler;
28using System.Collections.Generic; 29using System.Collections.Generic;
29using System.Text; 30using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine.Components; 31using Microsoft.CSharp;
32using OpenSim.ScriptEngine.Shared;
31 33
32namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers 34namespace 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 */
27using System; 27using System;
28using System.CodeDom.Compiler;
28using System.Collections.Generic; 29using System.Collections.Generic;
29using System.Text; 30using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine.Components; 31using Microsoft.JScript;
32using OpenSim.ScriptEngine.Shared;
31 33
32namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers 34namespace 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 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection;
29using System.Text; 30using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine.Components; 31using OpenSim.ScriptEngine.Components.DotNetEngine.Compilers.LSL;
32using OpenSim.ScriptEngine.Shared;
31 33
32namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers 34namespace 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 */
27using System; 27using System;
28using System.CodeDom.Compiler;
28using System.Collections.Generic; 29using System.Collections.Generic;
29using System.Text; 30using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine.Components; 31using Microsoft.VisualBasic;
32using OpenSim.ScriptEngine.Shared;
31 33
32namespace OpenSim.ScriptEngine.Components.DotNetEngine.Compilers 34namespace 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 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection;
29using System.Text; 30using System.Text;
31using OpenSim.ScriptEngine.Components.DotNetEngine.Compilers.YP;
32using OpenSim.ScriptEngine.Shared;
30 33
31namespace OpenSim.ApplicationPlugins.ScriptEngine.Components 34namespace 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 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using OpenSim.Region.ScriptEngine.Shared.CodeTools;
31
32namespace 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 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30
31namespace 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 @@
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Text; 29using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine.Components; 30using OpenMetaverse;
31using OpenSim.Framework;
32using OpenSim.Region.Environment.Scenes;
33using OpenSim.Region.ScriptEngine.Shared;
34using OpenSim.ScriptEngine.Shared;
35using EventParams=OpenSim.ScriptEngine.Shared.EventParams;
31 36
32namespace OpenSim.ScriptEngine.Components.DotNetEngine.Events 37namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Reflection;
5using System.Reflection.Emit;
6using System.Text;
7using OpenSim.ScriptEngine.Shared;
8
9namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenSim.ScriptEngine.Shared;
5
6namespace 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 @@
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Text; 29using System.Text;
30using OpenSim.ApplicationPlugins.ScriptEngine.Components; 30using OpenMetaverse;
31using OpenSim.ScriptEngine.Shared;
31 32
32namespace OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler 33namespace 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 */
27using System;
28using System.Collections;
29using System.Collections.Generic;
30using System.Reflection;
31using System.Text;
32using log4net;
33using OpenSim.ScriptEngine.Shared;
34using IScript=OpenSim.Region.ScriptEngine.Shared.ScriptBase.IScript;
35
36namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Diagnostics;
4using System.Reflection;
5using System.Text;
6using System.Threading;
7using log4net;
8using OpenMetaverse;
9using OpenSim.Region.ScriptEngine.Shared;
10using OpenSim.ScriptEngine.Shared;
11using EventParams=OpenSim.ScriptEngine.Shared.EventParams;
12
13namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Globalization;
4using System.Reflection;
5using System.Text;
6using System.Threading;
7using log4net;
8using OpenMetaverse;
9using OpenSim.Framework;
10using OpenSim.Region.Environment.Scenes;
11using OpenSim.Region.ScriptEngine.Interfaces;
12using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
13using OpenSim.ScriptEngine.Shared;
14
15namespace 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;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection; 29using System.Reflection;
30using System.Text; 30using System.Text;
31using System.Text.RegularExpressions;
31using log4net; 32using log4net;
32using Nini.Config; 33using Nini.Config;
34using OpenMetaverse;
33using OpenSim.ApplicationPlugins.ScriptEngine; 35using OpenSim.ApplicationPlugins.ScriptEngine;
34using OpenSim.Region.Environment.Interfaces; 36using OpenSim.Region.Environment.Interfaces;
35using OpenSim.Region.Environment.Scenes; 37using OpenSim.Region.Environment.Scenes;
36using ComponentProviders = OpenSim.ApplicationPlugins.ScriptEngine.ComponentRegistry; 38using OpenSim.ScriptEngine.Components.DotNetEngine.Events;
39using OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler;
40using OpenSim.ScriptEngine.Shared;
41using ComponentProviders = OpenSim.ApplicationPlugins.ScriptEngine;
37 42
38namespace OpenSim.ScriptEngine.Engines.DotNetEngine 43namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenMetaverse;
5using OpenSim.ScriptEngine.Components.DotNetEngine.Events;
6using OpenSim.ScriptEngine.Shared;
7
8namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 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 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3using 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 @@
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4using System.Runtime.Remoting.Lifetime;
5using System.Text;
6
7namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenMetaverse;
5using OpenSim.Region.ScriptEngine.Shared;
6
7namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 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 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection;
29using System.Text; 30using System.Text;
31using ScriptAssemblies;
30 32
31namespace OpenSim.ApplicationPlugins.ScriptEngine.Components 33namespace 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 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using Nini.Config;
31using OpenSim.Region.Environment.Interfaces;
32using OpenSim.Region.Environment.Scenes;
33
34namespace 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;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Text; 29using System.Text;
30 30
31namespace OpenSim.ApplicationPlugins.ScriptEngine.Components 31namespace 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 @@
1namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 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 @@
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Text; 29using System.Text;
30using OpenSim.ScriptEngine.Shared;
30 31
31namespace OpenSim.ApplicationPlugins.ScriptEngine.Components 32namespace 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 @@
1using OpenSim.ScriptEngine.Shared;
2
3namespace 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 @@
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Text; 29using System.Text;
30using OpenMetaverse;
31using OpenSim.ScriptEngine.Shared;
30 32
31namespace OpenSim.ApplicationPlugins.ScriptEngine.Components 33namespace 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 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3using 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 @@
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4using log4net;
5using Nini.Config;
6using OpenSim.Region.Environment.Scenes;
7using OpenSim.Region.ScriptEngine.Shared;
8using OpenSim.ScriptEngine.Shared;
9using EventParams=OpenSim.ScriptEngine.Shared.EventParams;
10
11namespace 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 */
27using System;
28using System.Collections.Generic;
29
30namespace 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 @@
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4using System.Text;
5using OpenMetaverse;
6using OpenSim.Region.ScriptEngine.Interfaces;
7using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
8using OpenSim.ScriptEngine.Shared;
9
10namespace 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" >