aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common
diff options
context:
space:
mode:
authorTedd Hansen2007-08-25 19:08:15 +0000
committerTedd Hansen2007-08-25 19:08:15 +0000
commitb75c1b2191640f4a140dc4cd0e8ce35ab64863d9 (patch)
tree05a5194e8e304df86897003bdbceca68fd65fd80 /OpenSim/Region/ScriptEngine/Common
parentScripts no longer crash sim after 5 minutes (override InitializeLifetimeServi... (diff)
downloadopensim-SC_OLD-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.zip
opensim-SC_OLD-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.tar.gz
opensim-SC_OLD-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.tar.bz2
opensim-SC_OLD-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.tar.xz
Added class for "long commands" (command that returns as event) with dedicated thread for processing. Added support for llSetTimerEvent(). Deleting old compiled scripts before new compile is attempted (avoids loading wrong script on compile error).
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/Executor.cs80
1 files changed, 43 insertions, 37 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/Executor.cs b/OpenSim/Region/ScriptEngine/Common/Executor.cs
index cadd55c..363d81e 100644
--- a/OpenSim/Region/ScriptEngine/Common/Executor.cs
+++ b/OpenSim/Region/ScriptEngine/Common/Executor.cs
@@ -23,7 +23,7 @@ namespace OpenSim.Region.ScriptEngine.Common
23 // Object never expires 23 // Object never expires
24 public override Object InitializeLifetimeService() 24 public override Object InitializeLifetimeService()
25 { 25 {
26 Console.WriteLine("Executor: InitializeLifetimeService()"); 26 //Console.WriteLine("Executor: InitializeLifetimeService()");
27 // return null; 27 // return null;
28 ILease lease = (ILease)base.InitializeLifetimeService(); 28 ILease lease = (ILease)base.InitializeLifetimeService();
29 29
@@ -45,54 +45,60 @@ namespace OpenSim.Region.ScriptEngine.Common
45 { 45 {
46 // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory. 46 // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory.
47 // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead! 47 // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead!
48 48 try
49 if (m_Running == false)
50 { 49 {
51 // Script is inactive, do not execute! 50 if (m_Running == false)
52 return; 51 {
53 } 52 // Script is inactive, do not execute!
53 return;
54 }
54 55
55 string EventName = m_Script.State() + "_event_" + FunctionName; 56 string EventName = m_Script.State() + "_event_" + FunctionName;
56 57
57 //type.InvokeMember(EventName, BindingFlags.InvokeMethod, null, m_Script, args); 58 //type.InvokeMember(EventName, BindingFlags.InvokeMethod, null, m_Script, args);
58 59
59 Console.WriteLine("ScriptEngine Executor.ExecuteEvent: \"" + EventName + "\""); 60 Console.WriteLine("ScriptEngine Executor.ExecuteEvent: \"" + EventName + "\"");
60 61
61 if (Events.ContainsKey(EventName) == false) 62 if (Events.ContainsKey(EventName) == false)
62 {
63 // Not found, create
64 Type type = m_Script.GetType();
65 try
66 {
67 MethodInfo mi = type.GetMethod(EventName);
68 Events.Add(EventName, mi);
69 }
70 catch (Exception e)
71 { 63 {
72 // Event name not found, cache it as not found 64 // Not found, create
73 Events.Add(EventName, null); 65 Type type = m_Script.GetType();
66 try
67 {
68 MethodInfo mi = type.GetMethod(EventName);
69 Events.Add(EventName, mi);
70 }
71 catch (Exception e)
72 {
73 // Event name not found, cache it as not found
74 Events.Add(EventName, null);
75 }
74 } 76 }
75 }
76 77
77 // Get event 78 // Get event
78 MethodInfo ev = null; 79 MethodInfo ev = null;
79 Events.TryGetValue(EventName, out ev); 80 Events.TryGetValue(EventName, out ev);
80 81
81 if (ev == null) // No event by that name! 82 if (ev == null) // No event by that name!
82 return; 83 {
84 Console.WriteLine("ScriptEngine Can not find any event named: \"" + EventName + "\"");
85 return;
86 }
83 87
84 // Found 88 // Found
85 try 89 try
86 { 90 {
87 // Invoke it 91 // Invoke it
88 ev.Invoke(m_Script, args); 92 ev.Invoke(m_Script, args);
89 93
94 }
95 catch (Exception e)
96 {
97 // TODO: Send to correct place
98 Console.WriteLine("ScriptEngine Exception attempting to executing script function: " + e.ToString());
99 }
90 } 100 }
91 catch (Exception e) 101 catch { }
92 {
93 // TODO: Send to correct place
94 Console.WriteLine("ScriptEngine Exception attempting to executing script function: " + e.ToString());
95 }
96 } 102 }
97 103
98 104