aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
diff options
context:
space:
mode:
authorMW2007-08-28 18:30:28 +0000
committerMW2007-08-28 18:30:28 +0000
commitc16aafee09bfcce12c3d667cd6ec382e29695490 (patch)
treec36c20a4c0efa3fbe5351b79d278d57a66e363ff /OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
parentstartup event on script added to object, not all inside object. (diff)
downloadopensim-SC_OLD-c16aafee09bfcce12c3d667cd6ec382e29695490.zip
opensim-SC_OLD-c16aafee09bfcce12c3d667cd6ec382e29695490.tar.gz
opensim-SC_OLD-c16aafee09bfcce12c3d667cd6ec382e29695490.tar.bz2
opensim-SC_OLD-c16aafee09bfcce12c3d667cd6ec382e29695490.tar.xz
Taken the old scripting engine out of Region.Environment and moved it into a separate module: OpenSim.Region.ExtensionsScriptModule (named as such because the purpose of it is to script server extensions, rather than "user scripting" like Tedd's engine.)
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs (renamed from OpenSim/Region/Environment/Scenes/Scripting/ScriptManager.cs)245
1 files changed, 138 insertions, 107 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scripting/ScriptManager.cs b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
index 3bd395e..a97979f 100644
--- a/OpenSim/Region/Environment/Scenes/Scripting/ScriptManager.cs
+++ b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
@@ -1,107 +1,138 @@
1/* 1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/ 2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 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 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 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 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. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28using System.Collections.Generic; 28using System.Collections.Generic;
29using OpenSim.Framework.Console; 29using OpenSim.Framework.Console;
30using OpenSim.Region.Environment.Scenes; 30using OpenSim.Region.Environment;
31 31using OpenSim.Region.Environment.Scenes;
32namespace OpenSim.Region.Scripting 32using OpenSim.Region.Environment.Interfaces;
33{ 33using OpenSim.Region.ExtensionsScriptModule.CSharp;
34 public class ScriptManager 34using OpenSim.Region.ExtensionsScriptModule.JScript;
35 { 35using OpenSim.Region.ExtensionsScriptModule.JVMEngine;
36 List<IScript> scripts = new List<IScript>(); 36
37 Scene scene; 37namespace OpenSim.Region.ExtensionsScriptModule
38 Dictionary<string, IScriptCompiler> compilers = new Dictionary<string, IScriptCompiler>(); 38{
39 39 public class ScriptManager : IRegionModule
40 private void LoadFromCompiler(Dictionary<string, IScript> compiledscripts) 40 {
41 { 41 List<IScript> scripts = new List<IScript>();
42 foreach (KeyValuePair<string, IScript> script in compiledscripts) 42 Scene m_scene;
43 { 43 Dictionary<string, IScriptCompiler> compilers = new Dictionary<string, IScriptCompiler>();
44 ScriptInfo scriptInfo = new ScriptInfo(scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script. 44
45 MainLog.Instance.Verbose("Loading " + script.Key); 45 private void LoadFromCompiler(Dictionary<string, IScript> compiledscripts)
46 script.Value.Initialise(scriptInfo); 46 {
47 scripts.Add(script.Value); 47 foreach (KeyValuePair<string, IScript> script in compiledscripts)
48 } 48 {
49 MainLog.Instance.Verbose("Finished loading " + compiledscripts.Count.ToString() + " script(s)"); 49 ScriptInfo scriptInfo = new ScriptInfo(m_scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
50 } 50 MainLog.Instance.Verbose("Loading " + script.Key);
51 51 script.Value.Initialise(scriptInfo);
52 public ScriptManager(Scene world) 52 scripts.Add(script.Value);
53 { 53 }
54 scene = world; 54 MainLog.Instance.Verbose("Finished loading " + compiledscripts.Count.ToString() + " script(s)");
55 55 }
56 // Default Engines 56
57 CSharpScriptEngine csharpCompiler = new CSharpScriptEngine(); 57 public ScriptManager()
58 compilers.Add(csharpCompiler.FileExt(),csharpCompiler); 58 {
59 59 // Default Engines
60 JScriptEngine jscriptCompiler = new JScriptEngine(); 60 CSharpScriptEngine csharpCompiler = new CSharpScriptEngine();
61 compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler); 61 compilers.Add(csharpCompiler.FileExt(),csharpCompiler);
62 62
63 JavaEngine javaCompiler = new JavaEngine(); 63 JScriptEngine jscriptCompiler = new JScriptEngine();
64 compilers.Add(javaCompiler.FileExt(), javaCompiler); 64 compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler);
65 } 65
66 66 JavaEngine javaCompiler = new JavaEngine();
67 public void Compile(string filename) 67 compilers.Add(javaCompiler.FileExt(), javaCompiler);
68 { 68 }
69 foreach (KeyValuePair<string, IScriptCompiler> compiler in compilers) 69
70 { 70 public void Initialise(Scene scene)
71 if (filename.EndsWith(compiler.Key)) 71 {
72 { 72 System.Console.WriteLine("Initialising Extensions Scripting Module");
73 LoadFromCompiler(compiler.Value.compile(filename)); 73 m_scene = scene;
74 break; 74
75 } 75 m_scene.RegisterAPIMethod("API_CompileExtensionScript", new ModuleAPIMethod<bool, string, int>(Compile));
76 } 76 m_scene.RegisterAPIMethod("API_AddExtensionScript", new ModuleAPIMethod<bool, IScript, int>(AddPreCompiledScript));
77 } 77 }
78 78
79 public void RunScriptCmd(string[] args) 79 public void PostInitialise()
80 { 80 {
81 switch (args[0]) 81
82 { 82 }
83 case "load": 83
84 Compile(args[1]); 84 public void CloseDown()
85 break; 85 {
86 86
87 default: 87 }
88 MainLog.Instance.Error("Unknown script command"); 88
89 break; 89 public string GetName()
90 } 90 {
91 } 91 return "ExtensionsScriptingModule";
92 92 }
93 public void AddPreCompiledScript(IScript script) 93
94 { 94 public bool Compile(string filename, int dummyParam)
95 MainLog.Instance.Verbose("Loading script " + script.Name); 95 {
96 ScriptInfo scriptInfo = new ScriptInfo(scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script. 96 foreach (KeyValuePair<string, IScriptCompiler> compiler in compilers)
97 script.Initialise(scriptInfo); 97 {
98 scripts.Add(script); 98 if (filename.EndsWith(compiler.Key))
99 } 99 {
100 } 100 LoadFromCompiler(compiler.Value.compile(filename));
101 101 break;
102 interface IScriptCompiler 102 }
103 { 103 }
104 Dictionary<string,IScript> compile(string filename); 104
105 string FileExt(); 105 return true;
106 } 106 }
107} 107
108 public void RunScriptCmd(string[] args)
109 {
110 switch (args[0])
111 {
112 case "load":
113 Compile(args[1], 0);
114 break;
115
116 default:
117 MainLog.Instance.Error("Unknown script command");
118 break;
119 }
120 }
121
122 public bool AddPreCompiledScript(IScript script, int dummyParam)
123 {
124 MainLog.Instance.Verbose("Loading script " + script.Name);
125 ScriptInfo scriptInfo = new ScriptInfo(m_scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
126 script.Initialise(scriptInfo);
127 scripts.Add(script);
128
129 return true;
130 }
131 }
132
133 interface IScriptCompiler
134 {
135 Dictionary<string,IScript> compile(string filename);
136 string FileExt();
137 }
138}