From f3c8963c86dbc969541ede80ae37eb59d26b7809 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Thu, 25 Sep 2008 05:13:44 +0000 Subject: Convergence is almost complete. This brings the diff between the API to < 10k and makes it use a common set of types in both engine. Fixes the issues with running both engines and HTTP requests / listens / timers etc.. Also fixes a couple of minor Scene issues and a CTB by nullref. --- .../Api/Implementation/AsyncCommandManager.cs | 116 +++++++++++---------- .../Api/Implementation/Plugins/HttpRequest.cs | 4 +- .../Shared/Api/Implementation/Plugins/Listener.cs | 12 ++- .../Api/Implementation/Plugins/SensorRepeat.cs | 22 ---- .../Shared/Api/Implementation/Plugins/Timer.cs | 2 +- .../Api/Implementation/Plugins/XmlRequest.cs | 4 +- 6 files changed, 74 insertions(+), 86 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index 020e64a..91ca298 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs @@ -54,47 +54,47 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public IEventReceiver m_ScriptEngine; private IScene m_Scene; - private static Dictionary m_Dataserver = - new Dictionary(); - private static Dictionary m_Timer = - new Dictionary(); - private static Dictionary m_Listener = - new Dictionary(); - private static Dictionary m_HttpRequest = - new Dictionary(); - private static Dictionary m_SensorRepeat = - new Dictionary(); - private static Dictionary m_XmlRequest = - new Dictionary(); + private static Dictionary m_Dataserver = + new Dictionary(); + private static Dictionary m_Timer = + new Dictionary(); + private static Dictionary m_Listener = + new Dictionary(); + private static Dictionary m_HttpRequest = + new Dictionary(); + private static Dictionary m_SensorRepeat = + new Dictionary(); + private static Dictionary m_XmlRequest = + new Dictionary(); public Dataserver DataserverPlugin { - get { return m_Dataserver[m_Scene]; } + get { return m_Dataserver[m_ScriptEngine]; } } public Timer TimerPlugin { - get { return m_Timer[m_Scene]; } + get { return m_Timer[m_ScriptEngine]; } } public HttpRequest HttpRequestPlugin { - get { return m_HttpRequest[m_Scene]; } + get { return m_HttpRequest[m_ScriptEngine]; } } public Listener ListenerPlugin { - get { return m_Listener[m_Scene]; } + get { return m_Listener[m_ScriptEngine]; } } public SensorRepeat SensorRepeatPlugin { - get { return m_SensorRepeat[m_Scene]; } + get { return m_SensorRepeat[m_ScriptEngine]; } } public XmlRequest XmlRequestPlugin { - get { return m_XmlRequest[m_Scene]; } + get { return m_XmlRequest[m_ScriptEngine]; } } public IEventReceiver[] ScriptEngines @@ -107,26 +107,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_ScriptEngine = _ScriptEngine; m_Scene = m_ScriptEngine.World; + if (m_Scenes.Count == 0) + ReadConfig(); + if (!m_Scenes.Contains(m_Scene)) m_Scenes.Add(m_Scene); if (!m_ScriptEngines.Contains(m_ScriptEngine)) m_ScriptEngines.Add(m_ScriptEngine); - ReadConfig(); - // Create instances of all plugins - if (!m_Dataserver.ContainsKey(m_Scene)) - m_Dataserver[m_Scene] = new Dataserver(this); - if (!m_Timer.ContainsKey(m_Scene)) - m_Timer[m_Scene] = new Timer(this); - if (!m_HttpRequest.ContainsKey(m_Scene)) - m_HttpRequest[m_Scene] = new HttpRequest(this); - if (!m_Listener.ContainsKey(m_Scene)) - m_Listener[m_Scene] = new Listener(this); - if (!m_SensorRepeat.ContainsKey(m_Scene)) - m_SensorRepeat[m_Scene] = new SensorRepeat(this); - if (!m_XmlRequest.ContainsKey(m_Scene)) - m_XmlRequest[m_Scene] = new XmlRequest(this); + if (!m_Dataserver.ContainsKey(m_ScriptEngine)) + m_Dataserver[m_ScriptEngine] = new Dataserver(this); + if (!m_Timer.ContainsKey(m_ScriptEngine)) + m_Timer[m_ScriptEngine] = new Timer(this); + if (!m_HttpRequest.ContainsKey(m_ScriptEngine)) + m_HttpRequest[m_ScriptEngine] = new HttpRequest(this); + if (!m_Listener.ContainsKey(m_ScriptEngine)) + m_Listener[m_ScriptEngine] = new Listener(this); + if (!m_SensorRepeat.ContainsKey(m_ScriptEngine)) + m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this); + if (!m_XmlRequest.ContainsKey(m_ScriptEngine)) + m_XmlRequest[m_ScriptEngine] = new XmlRequest(this); StartThread(); } @@ -145,7 +146,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } } - public void ReadConfig() + private void ReadConfig() { // cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100); // TODO: Make this sane again @@ -195,18 +196,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private static void DoOneCmdHandlerPass() { - foreach (IScene s in m_Scenes) + // Check Listeners + m_Listener[m_ScriptEngines[0]].CheckListeners(); + + // Check HttpRequests + m_HttpRequest[m_ScriptEngines[0]].CheckHttpRequests(); + + // Check XMLRPCRequests + m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests(); + + foreach (IEventReceiver s in m_ScriptEngines) { // Check timers m_Timer[s].CheckTimerEvents(); - // Check HttpRequests - m_HttpRequest[s].CheckHttpRequests(); - // Check XMLRPCRequests - m_XmlRequest[s].CheckXMLRPCRequests(); - // Check Listeners - m_Listener[s].CheckListeners(); + // Check Sensors m_SensorRepeat[s].CheckSenseRepeaterEvents(); + // Check dataserver m_Dataserver[s].ExpireRequests(); } @@ -217,38 +223,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// /// /// - public static void RemoveScript(IScene scene, uint localID, UUID itemID) + public static void RemoveScript(IEventReceiver engine, uint localID, UUID itemID) { // Remove a specific script // Remove dataserver events - m_Dataserver[scene].RemoveEvents(localID, itemID); + m_Dataserver[engine].RemoveEvents(localID, itemID); // Remove from: Timers - m_Timer[scene].UnSetTimerEvents(localID, itemID); + m_Timer[engine].UnSetTimerEvents(localID, itemID); // Remove from: HttpRequest IHttpRequests iHttpReq = - scene.RequestModuleInterface(); + engine.World.RequestModuleInterface(); iHttpReq.StopHttpRequest(localID, itemID); - IWorldComm comms = scene.RequestModuleInterface(); + IWorldComm comms = engine.World.RequestModuleInterface(); comms.DeleteListener(itemID); - IXMLRPC xmlrpc = scene.RequestModuleInterface(); + IXMLRPC xmlrpc = engine.World.RequestModuleInterface(); xmlrpc.DeleteChannels(itemID); xmlrpc.CancelSRDRequests(itemID); // Remove Sensors - m_SensorRepeat[scene].UnSetSenseRepeaterEvents(localID, itemID); + m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID); } - public static Object[] GetSerializationData(IScene scene, UUID itemID) + public static Object[] GetSerializationData(IEventReceiver engine, UUID itemID) { List data = new List(); - Object[] listeners=m_Listener[scene].GetSerializationData(itemID); + Object[] listeners=m_Listener[engine].GetSerializationData(itemID); if (listeners.Length > 0) { data.Add("listener"); @@ -256,7 +262,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api data.AddRange(listeners); } - Object[] timers=m_Timer[scene].GetSerializationData(itemID); + Object[] timers=m_Timer[engine].GetSerializationData(itemID); if (timers.Length > 0) { data.Add("timer"); @@ -264,7 +270,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api data.AddRange(timers); } - Object[] sensors=m_SensorRepeat[scene].GetSerializationData(itemID); + Object[] sensors=m_SensorRepeat[engine].GetSerializationData(itemID); if (sensors.Length > 0) { data.Add("sensor"); @@ -275,7 +281,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return data.ToArray(); } - public static void CreateFromData(IScene scene, uint localID, + public static void CreateFromData(IEventReceiver engine, uint localID, UUID itemID, UUID hostID, Object[] data) { int idx = 0; @@ -297,15 +303,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api switch (type) { case "listener": - m_Listener[scene].CreateFromData(localID, itemID, + m_Listener[engine].CreateFromData(localID, itemID, hostID, item); break; case "timer": - m_Timer[scene].CreateFromData(localID, itemID, + m_Timer[engine].CreateFromData(localID, itemID, hostID, item); break; case "sensor": - m_SensorRepeat[scene].CreateFromData(localID, + m_SensorRepeat[engine].CreateFromData(localID, itemID, hostID, item); break; } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs index 3d3fb05..0c77a9d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs @@ -58,7 +58,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins while (httpInfo != null) { - //m_ScriptEngine.Log.Info("[AsyncLSL]:" + httpInfo.response_body + httpInfo.status); + //System.Console.WriteLine("[AsyncLSL]:" + httpInfo.response_body + httpInfo.status); // Deliver data to prim's remote_data handler // @@ -77,7 +77,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new LSL_Types.LSLString(httpInfo.response_body) }; - foreach (IScriptEngine e in m_CmdManager.ScriptEngines) + foreach (IEventReceiver e in m_CmdManager.ScriptEngines) { if (e.PostObjectEvent(httpInfo.localID, new EventParams("http_response", diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs index b353cba..59d5060 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs @@ -29,6 +29,7 @@ using System; using OpenMetaverse; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.Scripting.WorldComm; +using OpenSim.Region.ScriptEngine.Interfaces; using OpenSim.Region.ScriptEngine.Shared; using OpenSim.Region.ScriptEngine.Shared.Api; @@ -66,10 +67,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new LSL_Types.LSLString(lInfo.GetMessage()) }; - m_CmdManager.m_ScriptEngine.PostScriptEvent( - lInfo.GetItemID(), new EventParams( - "listen", resobj, - new DetectParams[0])); + foreach (IEventReceiver e in m_CmdManager.ScriptEngines) + { + e.PostScriptEvent( + lInfo.GetItemID(), new EventParams( + "listen", resobj, + new DetectParams[0])); + } } } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index d1e3921..9b0bc5b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs @@ -156,28 +156,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins SensorSweep(ts); } - public LSL_Types.list GetSensorList(uint m_localID, UUID m_itemID) - { - lock (SenseLock) - { - Dictionary Obj = null; - if (!SenseEvents.TryGetValue(m_localID, out Obj)) - { - return null; - } - lock (Obj) - { - // Get script - LSL_Types.list SenseList = null; - if (!Obj.TryGetValue(m_itemID, out SenseList)) - { - return null; - } - return SenseList; - } - } - } - private void SensorSweep(SenseRepeatClass ts) { SceneObjectPart SensePoint = ts.host; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs index ec7cd35..91cef9b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs @@ -108,7 +108,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins // Time has passed? if (ts.next < DateTime.Now.Ticks) { - // Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next); + //Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next); // Add it to queue m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, new EventParams("timer", new Object[0], diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs index a7699a1..1c1ea0b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs @@ -71,7 +71,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new LSL_Types.LSLString(rInfo.GetStrVal()) }; - foreach (IScriptEngine e in m_CmdManager.ScriptEngines) + foreach (IEventReceiver e in m_CmdManager.ScriptEngines) { if (e.PostScriptEvent( rInfo.GetItemID(), new EventParams( @@ -100,7 +100,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new LSL_Types.LSLString(srdInfo.sdata) }; - foreach (IScriptEngine e in m_CmdManager.ScriptEngines) + foreach (IEventReceiver e in m_CmdManager.ScriptEngines) { if (e.PostScriptEvent( srdInfo.m_itemID, new EventParams( -- cgit v1.1