From 37446b0392ba423894952f81aa0f938d2bd2de22 Mon Sep 17 00:00:00 2001 From: Tedd Hansen Date: Sat, 18 Aug 2007 23:24:38 +0000 Subject: Moved in-AppDomain event execution from Script to OpenSim.Region.ScriptEngine.Executor. Script no longer responsible for handling event calls to itself (and we can create reference cache in Executor). --- .../ScriptEngine/DotNetEngine/ScriptManager.cs | 80 ++++------------------ 1 file changed, 14 insertions(+), 66 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs') diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index 602ac9f..926ec74 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -42,7 +42,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine /// /// Loads scripts /// Compiles them if necessary - /// Execute functions for EventQueueManager + /// Execute functions for EventQueueManager (Sends them to script on other AppDomain for execution) /// [Serializable] public class ScriptManager @@ -182,18 +182,15 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine //OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass Script = LoadAndInitAssembly(FreeAppDomain, FileName, ObjectID); OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass Script = LoadAndInitAssembly(FreeAppDomain, FileName, ObjectID); - //string FullScriptID = ScriptID + "." + ObjectID; // Add it to our temporary active script keeper //Scripts.Add(FullScriptID, Script); SetScript(ObjectID, ScriptID, Script); // We need to give (untrusted) assembly a private instance of BuiltIns // this private copy will contain Read-Only FullScriptID so that it can bring that on to the server whenever needed. - //OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL_BuiltIn_Commands_Interface LSLB = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL_BuiltIn_Commands_TestImplementation(FullScriptID); + OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL_BuiltIn_Commands LSLB = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL_BuiltIn_Commands(this, ObjectID); // Start the script - giving it BuiltIns - //myScriptEngine.m_logger.Verbose("ScriptEngine", "ScriptManager initializing script, handing over private builtin command interface"); - - Script.Start(new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL_BuiltIn_Commands(this, ObjectID)); + Script.Start(LSLB); } catch (Exception e) @@ -210,12 +207,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine return FileName; } - //private AppDomain GetFreeAppDomain() - //{ - // // TODO: Find an available AppDomain - if none, create one and add default security - // return Thread.GetDomain(); - //} - /// /// Does actual loading and initialization of script Assembly /// @@ -239,68 +230,25 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine return mbrt; //return (LSL_BaseClass)mbrt; - - - - - -// //myScriptEngine.m_logger.Verbose("ScriptEngine", "ScriptManager Loading Assembly " + FileName); -// // Load .Net Assembly (.dll) -// // Initialize and return it - -// // TODO: Add error handling -// // Script might not follow our rules since users can upload -anything- - -// Assembly a; -// //try -// //{ - - -// // Load to default appdomain (temporary) -// a = Assembly.LoadFrom(FileName); -// // Load to specified appdomain -// // TODO: Insert security -// //a = FreeAppDomain.Load(FileName); -// //} -// //catch (Exception e) -// //{ -// //} - - -// //foreach (Type _t in a.GetTypes()) -// //{ -// // Console.WriteLine("Type: " + _t.ToString()); -// //} - -// Type t; -// //try -// //{ -// t = a.GetType("SecondLife.Script", true); -// //} -// //catch (Exception e) -// //{ -// //} - -// // Create constructor arguments -// object[] args = new object[] -// { -//// this, -//// host -// }; - -// return (OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass)Activator.CreateInstance(t, args ); - - } - internal void ExecuteFunction(IScriptHost ObjectID, string ScriptID, string FunctionName, object[] args) + /// + /// Execute a LL-event-function in Script + /// + /// Object the script is located in + /// Script ID + /// Name of function + /// Arguments to pass to function + internal void ExecuteEvent(IScriptHost ObjectID, string ScriptID, string FunctionName, object[] args) { // Execute a function in the script m_scriptEngine.Log.Verbose("ScriptEngine", "Executing Function ObjectID: " + ObjectID + ", ScriptID: " + ScriptID + ", FunctionName: " + FunctionName); OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass Script = m_scriptEngine.myScriptManager.GetScript(ObjectID, ScriptID); - Script.ExecuteEvent(FunctionName, args); + // Must be done in correct AppDomain, so leaving it up to the script itself + + Script.Exec.ExecuteEvent(FunctionName, args); //Type type = Script.GetType(); -- cgit v1.1