diff options
author | Tedd Hansen | 2007-08-25 19:08:15 +0000 |
---|---|---|
committer | Tedd Hansen | 2007-08-25 19:08:15 +0000 |
commit | b75c1b2191640f4a140dc4cd0e8ce35ab64863d9 (patch) | |
tree | 05a5194e8e304df86897003bdbceca68fd65fd80 /OpenSim/Region/ScriptEngine/Common/Executor.cs | |
parent | Scripts no longer crash sim after 5 minutes (override InitializeLifetimeServi... (diff) | |
download | opensim-SC-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.zip opensim-SC-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.tar.gz opensim-SC-b75c1b2191640f4a140dc4cd0e8ce35ab64863d9.tar.bz2 opensim-SC-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 '')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/Executor.cs | 80 |
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 | ||