From 833f5e8bed5b36501c4579859e380038400ecb75 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 8 Nov 2008 02:24:34 +0000 Subject: [PATCH] Refactor IEventReceiver back into IScriptEngine --- OpenSim/Region/Environment/Scenes/Scene.cs | 2 + .../ScriptEngine/DotNetEngine/ScriptEngine.cs | 17 ++++- .../ScriptEngine/Interfaces/IEventReceiver.cs | 71 ------------------- .../ScriptEngine/Interfaces/IScriptApi.cs | 2 +- .../ScriptEngine/Interfaces/IScriptEngine.cs | 31 +++++++- .../Interfaces/IScriptInstance.cs | 3 + .../Api/Implementation/AsyncCommandManager.cs | 42 +++++------ .../Shared/Api/Implementation/LSL_Api.cs | 4 +- .../Shared/Api/Implementation/OSSL_Api.cs | 4 +- .../Api/Implementation/Plugins/HttpRequest.cs | 2 +- .../Api/Implementation/Plugins/Listener.cs | 2 +- .../Api/Implementation/Plugins/XmlRequest.cs | 4 +- .../ScriptEngine/Shared/CodeTools/Compiler.cs | 4 +- .../Shared/Instance/ScriptInstance.cs | 11 +++ .../Region/ScriptEngine/XEngine/XEngine.cs | 16 +++++ 15 files changed, 110 insertions(+), 105 deletions(-) delete mode 100644 OpenSim/Region/ScriptEngine/Interfaces/IEventReceiver.cs diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 4b8df370ea..ab2b336bae 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -2100,6 +2100,8 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup sceneObject = m_serialiser.DeserializeGroupFromXml2(objXMLData); AddRestoredSceneObject(sceneObject, true, false); + sceneObject.CreateScriptInstances(0, false, DefaultScriptEngine); + SceneObjectPart RootPrim = GetSceneObjectPart(primID); if (RootPrim != null) { diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs index 9911feccf1..269afaa4c7 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs @@ -44,7 +44,7 @@ using OpenSim.Region.ScriptEngine.Shared.ScriptBase; namespace OpenSim.Region.ScriptEngine.DotNetEngine { [Serializable] - public class ScriptEngine : IRegionModule, IEventReceiver, IScriptModule + public class ScriptEngine : IRegionModule, IScriptEngine, IScriptModule { private static readonly ILog m_log = LogManager.GetLogger( @@ -388,5 +388,20 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine { return m_ScriptManager.GetApi(itemID, name); } + + public IScriptWorkItem QueueEventHandler(Object o) + { + return null; + } + + public string GetAssemblyName(UUID itemID) + { + return ""; + } + + public string GetXMLState(UUID itemID) + { + return ""; + } } } diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IEventReceiver.cs b/OpenSim/Region/ScriptEngine/Interfaces/IEventReceiver.cs deleted file mode 100644 index 898d6709f4..0000000000 --- a/OpenSim/Region/ScriptEngine/Interfaces/IEventReceiver.cs +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using log4net; -using System; -using OpenSim.Region.ScriptEngine.Shared; -using OpenSim.Region.Environment.Scenes; -using OpenMetaverse; -using Nini.Config; -using OpenSim.Region.ScriptEngine.Interfaces; -using Amib.Threading; -using OpenSim.Framework; - -namespace OpenSim.Region.ScriptEngine.Interfaces -{ - /// - /// An interface for a script API module to communicate with - /// the engine it's running under - /// - public interface IEventReceiver - { - Scene World { get; } - - /// - /// Post an event to a single script - /// - bool PostScriptEvent(UUID itemID, EventParams parms); - - /// - /// Post event to an entire prim - /// - bool PostObjectEvent(uint localID, EventParams parms); - - DetectParams GetDetectParams(UUID item, int number); - int GetStartParameter(UUID itemID); - - void SetScriptState(UUID itemID, bool state); - bool GetScriptState(UUID itemID); - void SetState(UUID itemID, string newState); - void ApiResetScript(UUID itemID); - void ResetScript(UUID itemID); - IConfig Config { get; } - string ScriptEngineName { get; } - ILog Log { get; } - IScriptApi GetApi(UUID itemID, string name); - } -} diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs index 13f043d1c4..e94de68747 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs @@ -38,6 +38,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces // Each API has an identifier, which is used to load the // proper runtime assembly at load time. // - void Initialize(IEventReceiver engine, SceneObjectPart part, uint localID, UUID item); + void Initialize(IScriptEngine engine, SceneObjectPart part, uint localID, UUID item); } } diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs index 5bd2f79ce2..29b83dc8b2 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs @@ -33,6 +33,7 @@ using OpenMetaverse; using Nini.Config; using OpenSim.Region.ScriptEngine.Interfaces; using Amib.Threading; +using OpenSim.Framework; namespace OpenSim.Region.ScriptEngine.Interfaces { @@ -40,11 +41,39 @@ namespace OpenSim.Region.ScriptEngine.Interfaces /// An interface for a script API module to communicate with /// the engine it's running under /// - public interface IScriptEngine : IEventReceiver + public interface IScriptEngine { /// /// Queue an event for execution /// IScriptWorkItem QueueEventHandler(object parms); + + Scene World { get; } + + /// + /// Post an event to a single script + /// + bool PostScriptEvent(UUID itemID, EventParams parms); + + /// + /// Post event to an entire prim + /// + bool PostObjectEvent(uint localID, EventParams parms); + + DetectParams GetDetectParams(UUID item, int number); + int GetStartParameter(UUID itemID); + + void SetScriptState(UUID itemID, bool state); + bool GetScriptState(UUID itemID); + void SetState(UUID itemID, string newState); + void ApiResetScript(UUID itemID); + void ResetScript(UUID itemID); + IConfig Config { get; } + string ScriptEngineName { get; } + ILog Log { get; } + IScriptApi GetApi(UUID itemID, string name); + + string GetAssemblyName(UUID itemID); + string GetXMLState(UUID itemID); } } diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index dee79700b2..508e00f5ed 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs @@ -99,5 +99,8 @@ namespace OpenSim.Region.ScriptEngine.Interfaces Dictionary, KeyValuePair> LineMap { get; set; } + + string GetAssemblyName(); + string GetXMLState(); } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index c828d69edc..71a8d0fc1e 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs @@ -48,24 +48,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private static int cmdHandlerThreadCycleSleepms; private static List m_Scenes = new List(); - private static List m_ScriptEngines = - new List(); + private static List m_ScriptEngines = + new List(); - public IEventReceiver m_ScriptEngine; + public IScriptEngine 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 { @@ -97,12 +97,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api get { return m_XmlRequest[m_ScriptEngine]; } } - public IEventReceiver[] ScriptEngines + public IScriptEngine[] ScriptEngines { get { return m_ScriptEngines.ToArray(); } } - public AsyncCommandManager(IEventReceiver _ScriptEngine) + public AsyncCommandManager(IScriptEngine _ScriptEngine) { m_ScriptEngine = _ScriptEngine; m_Scene = m_ScriptEngine.World; @@ -202,7 +202,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // Check XMLRPCRequests m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests(); - foreach (IEventReceiver s in m_ScriptEngines) + foreach (IScriptEngine s in m_ScriptEngines) { // Check Listeners m_Listener[s].CheckListeners(); @@ -223,7 +223,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// /// /// - public static void RemoveScript(IEventReceiver engine, uint localID, UUID itemID) + public static void RemoveScript(IScriptEngine engine, uint localID, UUID itemID) { // Remove a specific script @@ -250,7 +250,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } - public static Object[] GetSerializationData(IEventReceiver engine, UUID itemID) + public static Object[] GetSerializationData(IScriptEngine engine, UUID itemID) { List data = new List(); @@ -281,7 +281,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return data.ToArray(); } - public static void CreateFromData(IEventReceiver engine, uint localID, + public static void CreateFromData(IScriptEngine engine, uint localID, UUID itemID, UUID hostID, Object[] data) { int idx = 0; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 123f98f96e..59f5ccda4a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -66,7 +66,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// public class LSL_Api : MarshalByRefObject, ILSL_Api, IScriptApi { - protected IEventReceiver m_ScriptEngine; + protected IScriptEngine m_ScriptEngine; protected SceneObjectPart m_host; protected uint m_localID; protected UUID m_itemID; @@ -80,7 +80,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api //private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - public void Initialize(IEventReceiver ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) + public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) { m_ScriptEngine = ScriptEngine; m_host = host; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 787d9516c6..f9302e963f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -99,7 +99,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api [Serializable] public class OSSL_Api : MarshalByRefObject, IOSSL_Api, IScriptApi { - internal IEventReceiver m_ScriptEngine; + internal IScriptEngine m_ScriptEngine; internal ILSL_Api m_LSL_Api; // get a reference to the LSL API so we can call methods housed there internal SceneObjectPart m_host; internal uint m_localID; @@ -110,7 +110,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api internal float m_ScriptDistanceFactor = 1.0f; internal Dictionary > m_FunctionPerms = new Dictionary >(); - public void Initialize(IEventReceiver ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) + public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) { m_ScriptEngine = ScriptEngine; m_host = host; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs index 0c77a9dab0..f5a965b729 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs @@ -77,7 +77,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new LSL_Types.LSLString(httpInfo.response_body) }; - foreach (IEventReceiver e in m_CmdManager.ScriptEngines) + foreach (IScriptEngine 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 59d50608ce..b72d17cde3 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs @@ -67,7 +67,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new LSL_Types.LSLString(lInfo.GetMessage()) }; - foreach (IEventReceiver e in m_CmdManager.ScriptEngines) + foreach (IScriptEngine e in m_CmdManager.ScriptEngines) { e.PostScriptEvent( lInfo.GetItemID(), new EventParams( diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs index 1c1ea0b9fc..a7699a1811 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 (IEventReceiver e in m_CmdManager.ScriptEngines) + foreach (IScriptEngine 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 (IEventReceiver e in m_CmdManager.ScriptEngines) + foreach (IScriptEngine e in m_CmdManager.ScriptEngines) { if (e.PostScriptEvent( srdInfo.m_itemID, new EventParams( diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index c6026fb7be..bc75ed56c8 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs @@ -83,8 +83,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools // private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files private static UInt64 scriptCompileCounter = 0; // And a counter - public IEventReceiver m_scriptEngine; - public Compiler(IEventReceiver scriptEngine) + public IScriptEngine m_scriptEngine; + public Compiler(IScriptEngine scriptEngine) { m_scriptEngine = scriptEngine; ReadConfig(); diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 98d7bbe0fa..30f03ac331 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs @@ -848,5 +848,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance return e.ToString(); } + + public string GetAssemblyName() + { + return m_Assembly; + } + + public string GetXMLState() + { + Stop(100); + return ScriptSerializer.Serialize(this); + } } } diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 9a4cb8b98f..221562e2cf 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -985,5 +985,21 @@ namespace OpenSim.Region.ScriptEngine.XEngine controllingClient.AgentId); } } + + public string GetAssemblyName(UUID itemID) + { + IScriptInstance instance = GetInstance(itemID); + if (instance == null) + return null; + return instance.GetAssemblyName(); + } + + public string GetXMLState(UUID itemID) + { + IScriptInstance instance = GetInstance(itemID); + if (instance == null) + return null; + return instance.GetXMLState(); + } } }