aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie2012-03-26 01:21:44 +0100
committerMelanie2012-03-26 01:47:20 +0100
commitac0f1ff0a66e361e7ca24ce4660bf58c5662283c (patch)
tree502451bbbfe16960880e31836f5da6517df26c35
parentCorrect the design error I introduced into ScriptComms. Untested but about to (diff)
downloadopensim-SC-ac0f1ff0a66e361e7ca24ce4660bf58c5662283c.zip
opensim-SC-ac0f1ff0a66e361e7ca24ce4660bf58c5662283c.tar.gz
opensim-SC-ac0f1ff0a66e361e7ca24ce4660bf58c5662283c.tar.bz2
opensim-SC-ac0f1ff0a66e361e7ca24ce4660bf58c5662283c.tar.xz
Dynamically create the delegate type to reduce complexity in the caller
-rw-r--r--OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs3
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs22
2 files changed, 23 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index 8a08fbe..34586f5 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -26,6 +26,7 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Reflection;
29using OpenMetaverse; 30using OpenMetaverse;
30 31
31namespace OpenSim.Region.Framework.Interfaces 32namespace OpenSim.Region.Framework.Interfaces
@@ -45,7 +46,7 @@ namespace OpenSim.Region.Framework.Interfaces
45 /// </summary> 46 /// </summary>
46 event ScriptCommand OnScriptCommand; 47 event ScriptCommand OnScriptCommand;
47 48
48 void RegisterScriptInvocation(Delegate fn); 49 void RegisterScriptInvocation(object target, MethodInfo mi);
49 Delegate[] GetScriptInvocationList(); 50 Delegate[] GetScriptInvocationList();
50 51
51 Delegate LookupScriptInvocation(string fname); 52 Delegate LookupScriptInvocation(string fname);
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index e37e42e..e0683a0 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -35,6 +35,8 @@ using OpenSim.Region.Framework.Interfaces;
35using OpenSim.Region.Framework.Scenes; 35using OpenSim.Region.Framework.Scenes;
36using Mono.Addins; 36using Mono.Addins;
37using OpenMetaverse; 37using OpenMetaverse;
38using System.Linq;
39using System.Linq.Expressions;
38 40
39namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms 41namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
40{ 42{
@@ -126,8 +128,26 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
126 m_scriptModule.PostScriptEvent(script, "link_message", args); 128 m_scriptModule.PostScriptEvent(script, "link_message", args);
127 } 129 }
128 130
129 public void RegisterScriptInvocation(Delegate fcall) 131 public void RegisterScriptInvocation(object target, MethodInfo mi)
130 { 132 {
133 Type delegateType;
134
135 var typeArgs = mi.GetParameters()
136 .Select(p => p.ParameterType)
137 .ToList();
138
139 if (mi.ReturnType == typeof(void))
140 {
141 delegateType = Expression.GetActionType(typeArgs.ToArray());
142 }
143 else
144 {
145 typeArgs.Add(mi.ReturnType);
146 delegateType = Expression.GetFuncType(typeArgs.ToArray());
147 }
148
149 Delegate fcall = Delegate.CreateDelegate(delegateType, target, mi);
150
131 lock (m_scriptInvocation) 151 lock (m_scriptInvocation)
132 { 152 {
133 ParameterInfo[] parameters = fcall.Method.GetParameters (); 153 ParameterInfo[] parameters = fcall.Method.GetParameters ();