diff options
Diffstat (limited to 'OpenSim/Region/OptionalModules/Scripting')
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs | 130 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs | 33 |
2 files changed, 92 insertions, 71 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs index 600cafb..fff3a32 100644 --- a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs | |||
@@ -31,16 +31,14 @@ using System.Reflection; | |||
31 | using System.Net; | 31 | using System.Net; |
32 | using System.IO; | 32 | using System.IO; |
33 | using System.Text; | 33 | using System.Text; |
34 | |||
35 | using log4net; | 34 | using log4net; |
36 | using Nini.Config; | 35 | using Nini.Config; |
37 | using OpenMetaverse; | 36 | using OpenMetaverse; |
38 | using OpenMetaverse.StructuredData; | 37 | using OpenMetaverse.StructuredData; |
39 | using OpenSim.Services.Interfaces; | ||
40 | |||
41 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
42 | using OpenSim.Region.Framework.Interfaces; | 39 | using OpenSim.Region.Framework.Interfaces; |
43 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
41 | using OpenSim.Services.Interfaces; | ||
44 | 42 | ||
45 | namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | 43 | namespace OpenSim.Region.OptionalModules.Scripting.RegionReady |
46 | { | 44 | { |
@@ -50,16 +48,15 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | |||
50 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 48 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
51 | 49 | ||
52 | private IConfig m_config = null; | 50 | private IConfig m_config = null; |
53 | private bool m_ScriptRez; | ||
54 | private bool m_firstEmptyCompileQueue; | 51 | private bool m_firstEmptyCompileQueue; |
55 | private bool m_oarFileLoading; | 52 | private bool m_oarFileLoading; |
56 | private bool m_lastOarLoadedOk; | 53 | private bool m_lastOarLoadedOk; |
57 | private int m_channelNotify = -1000; | 54 | private int m_channelNotify = -1000; |
58 | private bool m_enabled = false; | 55 | private bool m_enabled = false; |
59 | private bool m_disable_logins = false; | 56 | private bool m_disable_logins; |
60 | private string m_uri = string.Empty; | 57 | private string m_uri = string.Empty; |
61 | 58 | ||
62 | Scene m_scene = null; | 59 | Scene m_scene; |
63 | 60 | ||
64 | #region INonSharedRegionModule interface | 61 | #region INonSharedRegionModule interface |
65 | 62 | ||
@@ -93,53 +90,40 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | |||
93 | 90 | ||
94 | m_scene.RegisterModuleInterface<IRegionReadyModule>(this); | 91 | m_scene.RegisterModuleInterface<IRegionReadyModule>(this); |
95 | 92 | ||
96 | m_ScriptRez = false; | ||
97 | m_firstEmptyCompileQueue = true; | 93 | m_firstEmptyCompileQueue = true; |
98 | m_oarFileLoading = false; | 94 | m_oarFileLoading = false; |
99 | m_lastOarLoadedOk = true; | 95 | m_lastOarLoadedOk = true; |
100 | 96 | ||
101 | m_scene.EventManager.OnOarFileLoaded += OnOarFileLoaded; | 97 | m_scene.EventManager.OnOarFileLoaded += OnOarFileLoaded; |
102 | m_scene.EventManager.OnRezScript += OnRezScript; | ||
103 | m_scene.EventManager.OnLoginsEnabled += OnLoginsEnabled; | ||
104 | 98 | ||
105 | m_log.DebugFormat("[RegionReady]: Enabled for region {0}", scene.RegionInfo.RegionName); | 99 | m_log.DebugFormat("[RegionReady]: Enabled for region {0}", scene.RegionInfo.RegionName); |
106 | 100 | ||
107 | if (m_disable_logins == true) | 101 | if (m_disable_logins) |
108 | { | 102 | { |
109 | scene.LoginLock = true; | 103 | m_scene.LoginLock = true; |
110 | scene.LoginsDisabled = true; | 104 | m_scene.EventManager.OnEmptyScriptCompileQueue += OnEmptyScriptCompileQueue; |
111 | m_log.InfoFormat("[RegionReady]: Region {0} - logins disabled during initialization.",m_scene.RegionInfo.RegionName); | 105 | |
106 | m_log.InfoFormat("[RegionReady]: Region {0} - LOGINS DISABLED DURING INITIALIZATION.", m_scene.Name); | ||
112 | 107 | ||
113 | if(m_uri != string.Empty) | 108 | if (m_uri != string.Empty) |
114 | { | 109 | { |
115 | RRAlert("disabled"); | 110 | RRAlert("disabled"); |
116 | } | 111 | } |
117 | } | 112 | } |
118 | } | 113 | } |
119 | 114 | ||
120 | void OnRezScript (uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource) | ||
121 | { | ||
122 | if (!m_ScriptRez) | ||
123 | { | ||
124 | m_ScriptRez = true; | ||
125 | m_scene.EventManager.OnEmptyScriptCompileQueue += OnEmptyScriptCompileQueue; | ||
126 | m_scene.EventManager.OnRezScript -= OnRezScript; | ||
127 | } | ||
128 | } | ||
129 | |||
130 | public void RemoveRegion(Scene scene) | 115 | public void RemoveRegion(Scene scene) |
131 | { | 116 | { |
132 | if (!m_enabled) | 117 | if (!m_enabled) |
133 | return; | 118 | return; |
134 | 119 | ||
135 | m_scene.EventManager.OnEmptyScriptCompileQueue -= OnEmptyScriptCompileQueue; | ||
136 | m_scene.EventManager.OnOarFileLoaded -= OnOarFileLoaded; | 120 | m_scene.EventManager.OnOarFileLoaded -= OnOarFileLoaded; |
137 | m_scene.EventManager.OnLoginsEnabled -= OnLoginsEnabled; | ||
138 | 121 | ||
139 | if(m_uri != string.Empty) | 122 | if (m_disable_logins) |
140 | { | 123 | m_scene.EventManager.OnEmptyScriptCompileQueue -= OnEmptyScriptCompileQueue; |
124 | |||
125 | if (m_uri != string.Empty) | ||
141 | RRAlert("shutdown"); | 126 | RRAlert("shutdown"); |
142 | } | ||
143 | 127 | ||
144 | m_scene = null; | 128 | m_scene = null; |
145 | } | 129 | } |
@@ -159,7 +143,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | |||
159 | 143 | ||
160 | #endregion | 144 | #endregion |
161 | 145 | ||
162 | |||
163 | void OnEmptyScriptCompileQueue(int numScriptsFailed, string message) | 146 | void OnEmptyScriptCompileQueue(int numScriptsFailed, string message) |
164 | { | 147 | { |
165 | m_log.DebugFormat("[RegionReady]: Script compile queue empty!"); | 148 | m_log.DebugFormat("[RegionReady]: Script compile queue empty!"); |
@@ -193,75 +176,80 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | |||
193 | m_scene.RegionInfo.RegionName, c.Message, m_channelNotify); | 176 | m_scene.RegionInfo.RegionName, c.Message, m_channelNotify); |
194 | 177 | ||
195 | m_scene.EventManager.TriggerOnChatBroadcast(this, c); | 178 | m_scene.EventManager.TriggerOnChatBroadcast(this, c); |
196 | m_scene.EventManager.TriggerLoginsEnabled(m_scene.RegionInfo.RegionName); | 179 | |
197 | m_scene.SceneGridService.InformNeighborsThatRegionisUp(m_scene.RequestModuleInterface<INeighbourService>(), m_scene.RegionInfo); | 180 | TriggerRegionReady(m_scene); |
198 | } | 181 | } |
199 | } | 182 | } |
200 | 183 | ||
201 | void OnOarFileLoaded(Guid requestId, string message) | 184 | void OnOarFileLoaded(Guid requestId, string message) |
202 | { | 185 | { |
203 | m_oarFileLoading = true; | 186 | m_oarFileLoading = true; |
187 | |||
204 | if (message==String.Empty) | 188 | if (message==String.Empty) |
205 | { | 189 | { |
206 | m_lastOarLoadedOk = true; | 190 | m_lastOarLoadedOk = true; |
207 | } else { | 191 | } |
192 | else | ||
193 | { | ||
208 | m_log.WarnFormat("[RegionReady]: Oar file load errors: {0}", message); | 194 | m_log.WarnFormat("[RegionReady]: Oar file load errors: {0}", message); |
209 | m_lastOarLoadedOk = false; | 195 | m_lastOarLoadedOk = false; |
210 | } | 196 | } |
211 | } | 197 | } |
212 | 198 | ||
213 | // This will be triggerd by Scene if we have no scripts | 199 | /// <summary> |
214 | // m_ScriptsRezzing will be false if there were none | 200 | /// This will be triggered by Scene directly if it contains no scripts on startup. Otherwise it is triggered |
215 | // else it will be true and we should wait on the | 201 | /// when the script compile queue is empty after initial region startup. |
216 | // empty compile queue | 202 | /// </summary> |
217 | void OnLoginsEnabled(string regionName) | 203 | /// <param name='scene'></param> |
204 | public void TriggerRegionReady(IScene scene) | ||
218 | { | 205 | { |
219 | if (m_disable_logins == true) | 206 | m_scene.EventManager.OnEmptyScriptCompileQueue -= OnEmptyScriptCompileQueue; |
207 | m_scene.LoginLock = false; | ||
208 | |||
209 | if (!m_scene.StartDisabled) | ||
220 | { | 210 | { |
221 | if (m_scene.StartDisabled == false) | 211 | m_scene.LoginsEnabled = true; |
222 | { | ||
223 | m_scene.LoginsDisabled = false; | ||
224 | m_scene.LoginLock = false; | ||
225 | 212 | ||
226 | m_scene.EventManager.OnEmptyScriptCompileQueue -= OnEmptyScriptCompileQueue; | 213 | // m_log.InfoFormat("[RegionReady]: Logins enabled for {0}, Oar {1}", |
214 | // m_scene.RegionInfo.RegionName, m_oarFileLoading.ToString()); | ||
227 | 215 | ||
228 | // m_log.InfoFormat("[RegionReady]: Logins enabled for {0}, Oar {1}", | 216 | m_log.InfoFormat( |
229 | // m_scene.RegionInfo.RegionName, m_oarFileLoading.ToString()); | 217 | "[RegionReady]: INITIALIZATION COMPLETE FOR {0} - LOGINS ENABLED", m_scene.Name); |
218 | } | ||
230 | 219 | ||
231 | m_log.InfoFormat( | 220 | m_scene.SceneGridService.InformNeighborsThatRegionisUp( |
232 | "[RegionReady]: INITIALIZATION COMPLETE FOR {0} - LOGINS ENABLED", m_scene.Name); | 221 | m_scene.RequestModuleInterface<INeighbourService>(), m_scene.RegionInfo); |
233 | 222 | ||
234 | if (m_uri != string.Empty) | 223 | if (m_uri != string.Empty) |
235 | { | 224 | { |
236 | RRAlert("enabled"); | 225 | RRAlert("enabled"); |
237 | } | ||
238 | } | ||
239 | } | 226 | } |
227 | |||
228 | m_scene.Ready = true; | ||
240 | } | 229 | } |
241 | 230 | ||
242 | public void OarLoadingAlert(string msg) | 231 | public void OarLoadingAlert(string msg) |
243 | { | 232 | { |
244 | // Let's bypass this for now until some better feedback can be established | 233 | // Let's bypass this for now until some better feedback can be established |
245 | // | 234 | // |
246 | return; | ||
247 | 235 | ||
248 | if (msg == "load") | 236 | // if (msg == "load") |
249 | { | 237 | // { |
250 | m_scene.EventManager.OnEmptyScriptCompileQueue += OnEmptyScriptCompileQueue; | 238 | // m_scene.EventManager.OnEmptyScriptCompileQueue += OnEmptyScriptCompileQueue; |
251 | m_scene.EventManager.OnOarFileLoaded += OnOarFileLoaded; | 239 | // m_scene.EventManager.OnOarFileLoaded += OnOarFileLoaded; |
252 | m_scene.EventManager.OnLoginsEnabled += OnLoginsEnabled; | 240 | // m_scene.EventManager.OnLoginsEnabled += OnLoginsEnabled; |
253 | m_scene.EventManager.OnRezScript += OnRezScript; | 241 | // m_scene.EventManager.OnRezScript += OnRezScript; |
254 | m_oarFileLoading = true; | 242 | // m_oarFileLoading = true; |
255 | m_firstEmptyCompileQueue = true; | 243 | // m_firstEmptyCompileQueue = true; |
256 | 244 | // | |
257 | m_scene.LoginsDisabled = true; | 245 | // m_scene.LoginsDisabled = true; |
258 | m_scene.LoginLock = true; | 246 | // m_scene.LoginLock = true; |
259 | if ( m_uri != string.Empty ) | 247 | // if ( m_uri != string.Empty ) |
260 | { | 248 | // { |
261 | RRAlert("loading oar"); | 249 | // RRAlert("loading oar"); |
262 | RRAlert("disabled"); | 250 | // RRAlert("disabled"); |
263 | } | 251 | // } |
264 | } | 252 | // } |
265 | } | 253 | } |
266 | 254 | ||
267 | public void RRAlert(string status) | 255 | public void RRAlert(string status) |
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs index 74a85e2..705a847 100644 --- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs | |||
@@ -46,6 +46,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms | |||
46 | private static readonly ILog m_log = | 46 | private static readonly ILog m_log = |
47 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
48 | 48 | ||
49 | private Dictionary<string,object> m_constants = new Dictionary<string,object>(); | ||
50 | |||
49 | #region ScriptInvocation | 51 | #region ScriptInvocation |
50 | protected class ScriptInvocationData | 52 | protected class ScriptInvocationData |
51 | { | 53 | { |
@@ -269,6 +271,37 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms | |||
269 | Delegate fn = LookupScriptInvocation(fname); | 271 | Delegate fn = LookupScriptInvocation(fname); |
270 | return fn.DynamicInvoke(olist.ToArray()); | 272 | return fn.DynamicInvoke(olist.ToArray()); |
271 | } | 273 | } |
274 | |||
275 | /// <summary> | ||
276 | /// Operation to for a region module to register a constant to be used | ||
277 | /// by the script engine | ||
278 | /// </summary> | ||
279 | public void RegisterConstant(string cname, object value) | ||
280 | { | ||
281 | m_log.DebugFormat("[MODULE COMMANDS] register constant <{0}> with value {1}",cname,value.ToString()); | ||
282 | lock (m_constants) | ||
283 | { | ||
284 | m_constants.Add(cname,value); | ||
285 | } | ||
286 | } | ||
287 | |||
288 | /// <summary> | ||
289 | /// Operation to check for a registered constant | ||
290 | /// </summary> | ||
291 | public object LookupModConstant(string cname) | ||
292 | { | ||
293 | // m_log.DebugFormat("[MODULE COMMANDS] lookup constant <{0}>",cname); | ||
294 | |||
295 | lock (m_constants) | ||
296 | { | ||
297 | object value = null; | ||
298 | if (m_constants.TryGetValue(cname,out value)) | ||
299 | return value; | ||
300 | } | ||
301 | |||
302 | return null; | ||
303 | } | ||
304 | |||
272 | #endregion | 305 | #endregion |
273 | 306 | ||
274 | } | 307 | } |