diff options
author | Tedd Hansen | 2008-11-08 17:35:48 +0000 |
---|---|---|
committer | Tedd Hansen | 2008-11-08 17:35:48 +0000 |
commit | 9511a8c76370f21e839114007dcd2b25c69b009a (patch) | |
tree | b63323dfd96ecd1cc3cd560939bd66bb43ec9c1c /OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs | |
parent | * Added IClientIM to IClientCore interfaces (diff) | |
download | opensim-SC-9511a8c76370f21e839114007dcd2b25c69b009a.zip opensim-SC-9511a8c76370f21e839114007dcd2b25c69b009a.tar.gz opensim-SC-9511a8c76370f21e839114007dcd2b25c69b009a.tar.bz2 opensim-SC-9511a8c76370f21e839114007dcd2b25c69b009a.tar.xz |
Work in progress on SECS stuff. Have been holding it off until after 0.6 release. Still messy as hell and doesn't really work yet. Will undergo dramatic changes. AND MOST IMPORTANTLY: Will be conformed to work in coop with todays DNE and XEngine, hopefully one day providing a common interface for all components.
Diffstat (limited to 'OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs')
-rw-r--r-- | OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs | 171 |
1 files changed, 147 insertions, 24 deletions
diff --git a/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs b/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs index 3f24763..0f9b964 100644 --- a/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs +++ b/OpenSim/ScriptEngine/Engines/DotNetEngine/DotNetEngine.cs | |||
@@ -28,47 +28,170 @@ using System; | |||
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Reflection; | 29 | using System.Reflection; |
30 | using System.Text; | 30 | using System.Text; |
31 | using System.Text.RegularExpressions; | ||
31 | using log4net; | 32 | using log4net; |
32 | using Nini.Config; | 33 | using Nini.Config; |
34 | using OpenMetaverse; | ||
33 | using OpenSim.ApplicationPlugins.ScriptEngine; | 35 | using OpenSim.ApplicationPlugins.ScriptEngine; |
34 | using OpenSim.Region.Environment.Interfaces; | 36 | using OpenSim.Region.Environment.Interfaces; |
35 | using OpenSim.Region.Environment.Scenes; | 37 | using OpenSim.Region.Environment.Scenes; |
36 | using ComponentProviders = OpenSim.ApplicationPlugins.ScriptEngine.ComponentRegistry; | 38 | using OpenSim.ScriptEngine.Components.DotNetEngine.Events; |
39 | using OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler; | ||
40 | using OpenSim.ScriptEngine.Shared; | ||
41 | using ComponentProviders = OpenSim.ApplicationPlugins.ScriptEngine; | ||
37 | 42 | ||
38 | namespace OpenSim.ScriptEngine.Engines.DotNetEngine | 43 | namespace OpenSim.ScriptEngine.Engines.DotNetEngine |
39 | { | 44 | { |
40 | // This is a sample engine | 45 | // This is a sample engine |
41 | public class DotNetEngine : RegionScriptEngineBase | 46 | public partial class DotNetEngine : IScriptEngine |
42 | { | 47 | { |
43 | 48 | ||
44 | 49 | //private string[] _ComponentNames = new string[] { | |
45 | // This will be the makeup of this script engine | 50 | // "Commands_LSL", |
46 | public string[] ComponentNames = new string[] { | 51 | // "Commands_OSSL", |
47 | "Commands_LSL", | 52 | // "Compiler_CS", |
48 | "Commands_OSSL", | 53 | // "Compiler_JS", |
49 | "Compiler_CS", | 54 | // "Compiler_LSL", |
50 | "Compiler_JS", | 55 | // "Compiler_VB", |
51 | "Compiler_LSL", | 56 | // "LSLEventProvider", |
52 | "Compiler_VB", | 57 | // "Scheduler" |
53 | "LSLEventProvider", | 58 | // }; |
54 | "Scheduler" | 59 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | }; | 60 | |
56 | 61 | public string Name { get { return "SECS.DotNetEngine"; } } | |
57 | public override string Name | 62 | //public bool IsSharedModule { get { return true; } } |
63 | internal RegionInfoStructure RegionInfo; | ||
64 | |||
65 | private string[] commandNames = new string[] | ||
66 | { | ||
67 | "Commands_LSL" | ||
68 | }; | ||
69 | |||
70 | private string[] compilerNames = new string[] | ||
71 | { | ||
72 | "Compiler_CS", | ||
73 | "Compiler_JS", | ||
74 | "Compiler_LSL", | ||
75 | "Compiler_YP", | ||
76 | "Compiler_VB" | ||
77 | }; | ||
78 | private string[] schedulerNames = new string[] | ||
79 | { | ||
80 | "Scheduler" | ||
81 | }; | ||
82 | |||
83 | //internal IScriptLoader m_ScriptLoader; | ||
84 | internal LSLEventProvider m_LSLEventProvider; | ||
85 | //internal IScriptExecutor m_Executor; | ||
86 | //internal Dictionary<string, IScriptCompiler> Compilers = new Dictionary<string, IScriptCompiler>(); | ||
87 | internal Dictionary<string, IScriptScheduler> Schedulers = new Dictionary<string, IScriptScheduler>(); | ||
88 | public static Dictionary<string, IScriptCompiler> Compilers = new Dictionary<string, IScriptCompiler>(); | ||
89 | // private static bool haveInitialized = false; | ||
90 | |||
91 | public DotNetEngine() | ||
58 | { | 92 | { |
59 | get { return "DotNetEngine"; } | 93 | RegionInfo = new RegionInfoStructure(); |
94 | RegionInfo.Compilers = Compilers; | ||
95 | RegionInfo.Schedulers = Schedulers; | ||
96 | RegionInfo.Executors = new Dictionary<string, IScriptExecutor>(); | ||
97 | RegionInfo.CommandProviders = new Dictionary<string, IScriptCommandProvider>(); | ||
98 | RegionInfo.EventProviders = new Dictionary<string, IScriptEventProvider>(); | ||
99 | RegionInfo.Logger = LogManager.GetLogger("SECS.DotNetEngine.RegionInfo"); | ||
60 | } | 100 | } |
61 | 101 | ||
62 | public override void Initialize() | 102 | public void Initialise(Scene scene, IConfigSource source) |
63 | { | 103 | { |
64 | // We need to initialize the components we will be using. Our baseclass already has builtin functions for this. | 104 | RegionInfo.Scene = scene; |
65 | m_log.Info("[" + Name + "]: Initializing SECs (Script Engine Components)"); | 105 | RegionInfo.ConfigSource = source; |
66 | InitializeComponents(ComponentNames); | 106 | |
107 | m_log.DebugFormat("[{0}] Initializing components", Name); | ||
108 | InitializeComponents(); | ||
67 | } | 109 | } |
68 | 110 | ||
69 | public override void PreClose() | 111 | public void PostInitialise() { } |
112 | |||
113 | /// <summary> | ||
114 | /// Called on region close | ||
115 | /// </summary> | ||
116 | public void Close() | ||
70 | { | 117 | { |
71 | // Before | 118 | ComponentClose(); |
72 | } | 119 | } |
120 | #region Initialize the Script Engine Components we need | ||
121 | public void InitializeComponents() | ||
122 | { | ||
123 | string cname = ""; | ||
124 | m_log.DebugFormat("[{0}] Component initialization", Name); | ||
125 | // Initialize an instance of all module we want | ||
126 | try | ||
127 | { | ||
128 | cname = "ScriptManager"; | ||
129 | m_log.DebugFormat("[{0}] Executor: {1}", Name, cname); | ||
130 | RegionInfo.Executors.Add(cname, | ||
131 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as IScriptExecutor); | ||
132 | |||
133 | cname = "ScriptLoader"; | ||
134 | m_log.DebugFormat("[{0}] ScriptLoader: {1}", Name, cname); | ||
135 | RegionInfo.ScriptLoader = | ||
136 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as IScriptExecutor as ScriptLoader; | ||
137 | |||
138 | // CommandProviders | ||
139 | foreach (string cn in commandNames) | ||
140 | { | ||
141 | cname = cn; | ||
142 | m_log.DebugFormat("[{0}] CommandProvider: {1}", Name, cname); | ||
143 | RegionInfo.CommandProviders.Add(cname, | ||
144 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as | ||
145 | IScriptCommandProvider); | ||
146 | } | ||
147 | |||
148 | // Compilers | ||
149 | foreach (string cn in compilerNames) | ||
150 | { | ||
151 | cname = cn; | ||
152 | m_log.DebugFormat("[{0}] Compiler: {1}", Name, cname); | ||
153 | RegionInfo.Compilers.Add(cname, | ||
154 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as | ||
155 | IScriptCompiler); | ||
156 | } | ||
157 | |||
158 | // Schedulers | ||
159 | foreach (string cn in schedulerNames) | ||
160 | { | ||
161 | cname = cn; | ||
162 | m_log.DebugFormat("[{0}] Scheduler: {1}", Name, cname); | ||
163 | RegionInfo.Schedulers.Add(cname, | ||
164 | ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as | ||
165 | IScriptScheduler); | ||
166 | } | ||
167 | |||
168 | // Event provider | ||
169 | cname = "LSLEventProvider"; | ||
170 | m_log.DebugFormat("[{0}] EventProvider: {1}", Name, cname); | ||
171 | IScriptEventProvider sep = ScriptEnginePlugin.GetComponentInstance(RegionInfo, cname) as IScriptEventProvider; | ||
172 | RegionInfo.EventProviders.Add(cname, sep); | ||
173 | m_LSLEventProvider = sep as LSLEventProvider; | ||
174 | |||
175 | // Hook up events | ||
176 | m_LSLEventProvider.RezScript += Events_RezScript; | ||
177 | m_LSLEventProvider.RemoveScript += Events_RemoveScript; | ||
178 | } | ||
179 | catch (Exception e) | ||
180 | { | ||
181 | m_log.ErrorFormat("[{0}] Exception while loading \"{1}\": {2}", Name, cname, e.ToString()); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | private void ComponentClose() | ||
186 | { | ||
187 | // Close schedulers | ||
188 | foreach (IScriptScheduler scheduler in RegionInfo.Schedulers.Values) | ||
189 | { | ||
190 | scheduler.Close(); | ||
191 | } | ||
192 | } | ||
193 | |||
194 | #endregion | ||
195 | |||
73 | } | 196 | } |
74 | } | 197 | } |