aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs2
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs25
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs5
5 files changed, 35 insertions, 9 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index 2183c1c..34a4bfc 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -54,7 +54,7 @@ namespace OpenSim.Region.Framework.Interfaces
54 Type[] LookupTypeSignature(string fname); 54 Type[] LookupTypeSignature(string fname);
55 Type LookupReturnType(string fname); 55 Type LookupReturnType(string fname);
56 56
57 object InvokeOperation(UUID scriptId, string fname, params object[] parms); 57 object InvokeOperation(UUID hostId, UUID scriptId, string fname, params object[] parms);
58 58
59 /// <summary> 59 /// <summary>
60 /// Send a link_message event to an in-world script 60 /// Send a link_message event to an in-world script
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 0ec4025..0605590 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -130,10 +130,18 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
130 130
131 public void RegisterScriptInvocation(object target, string meth) 131 public void RegisterScriptInvocation(object target, string meth)
132 { 132 {
133 m_log.DebugFormat("[MODULE COMMANDS] Register method {0} from type {1}",meth,target.GetType().Name);
134
135
133 MethodInfo mi = target.GetType().GetMethod(meth, 136 MethodInfo mi = target.GetType().GetMethod(meth,
134 BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); 137 BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
138 if (mi == null)
139 {
140 m_log.WarnFormat("[MODULE COMMANDS] Failed to register method {0}",meth);
141 return;
142 }
143
135 Type delegateType; 144 Type delegateType;
136
137 var typeArgs = mi.GetParameters() 145 var typeArgs = mi.GetParameters()
138 .Select(p => p.ParameterType) 146 .Select(p => p.ParameterType)
139 .ToList(); 147 .ToList();
@@ -153,13 +161,13 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
153 lock (m_scriptInvocation) 161 lock (m_scriptInvocation)
154 { 162 {
155 ParameterInfo[] parameters = fcall.Method.GetParameters (); 163 ParameterInfo[] parameters = fcall.Method.GetParameters ();
156 if (parameters.Length == 0) // Must have one UUID param 164 if (parameters.Length < 2) // Must have two UUID params
157 return; 165 return;
158 166
159 // Hide the first parameter 167 // Hide the first two parameters
160 Type[] parmTypes = new Type[parameters.Length - 1]; 168 Type[] parmTypes = new Type[parameters.Length - 2];
161 for (int i = 1 ; i < parameters.Length ; i++) 169 for (int i = 2 ; i < parameters.Length ; i++)
162 parmTypes[i - 1] = parameters[i].ParameterType; 170 parmTypes[i - 2] = parameters[i].ParameterType;
163 m_scriptInvocation[fcall.Method.Name] = new ScriptInvocationData(fcall.Method.Name, fcall, parmTypes, fcall.Method.ReturnType); 171 m_scriptInvocation[fcall.Method.Name] = new ScriptInvocationData(fcall.Method.Name, fcall, parmTypes, fcall.Method.ReturnType);
164 } 172 }
165 } 173 }
@@ -197,6 +205,8 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
197 return "modInvokeR"; 205 return "modInvokeR";
198 else if (sid.ReturnType == typeof(object[])) 206 else if (sid.ReturnType == typeof(object[]))
199 return "modInvokeL"; 207 return "modInvokeL";
208
209 m_log.WarnFormat("[MODULE COMMANDS] failed to find match for {0} with return type {1}",fname,sid.ReturnType.Name);
200 } 210 }
201 } 211 }
202 212
@@ -239,9 +249,10 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
239 return null; 249 return null;
240 } 250 }
241 251
242 public object InvokeOperation(UUID scriptid, string fname, params object[] parms) 252 public object InvokeOperation(UUID hostid, UUID scriptid, string fname, params object[] parms)
243 { 253 {
244 List<object> olist = new List<object>(); 254 List<object> olist = new List<object>();
255 olist.Add(hostid);
245 olist.Add(scriptid); 256 olist.Add(scriptid);
246 foreach (object o in parms) 257 foreach (object o in parms)
247 olist.Add(o); 258 olist.Add(o);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
index 1bcbcd3..7c07e15 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
@@ -122,6 +122,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
122 /// <param name="fname">The name of the function to invoke</param> 122 /// <param name="fname">The name of the function to invoke</param>
123 /// <param name="parms">List of parameters</param> 123 /// <param name="parms">List of parameters</param>
124 /// <returns>string result of the invocation</returns> 124 /// <returns>string result of the invocation</returns>
125 public void modInvokeN(string fname, params object[] parms)
126 {
127 Type returntype = m_comms.LookupReturnType(fname);
128 if (returntype != typeof(string))
129 MODError(String.Format("return type mismatch for {0}",fname));
130
131 modInvoke(fname,parms);
132 }
133
125 public LSL_String modInvokeS(string fname, params object[] parms) 134 public LSL_String modInvokeS(string fname, params object[] parms)
126 { 135 {
127 Type returntype = m_comms.LookupReturnType(fname); 136 Type returntype = m_comms.LookupReturnType(fname);
@@ -243,7 +252,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
243 // non-null but don't trust it completely 252 // non-null but don't trust it completely
244 try 253 try
245 { 254 {
246 object result = m_comms.InvokeOperation(m_itemID,fname,convertedParms); 255 object result = m_comms.InvokeOperation(m_host.UUID, m_itemID, fname, convertedParms);
247 if (result != null) 256 if (result != null)
248 return result; 257 return result;
249 258
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
index d258f76..aa78aaa 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
@@ -41,6 +41,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
41 public interface IMOD_Api 41 public interface IMOD_Api
42 { 42 {
43 // Invocation functions 43 // Invocation functions
44 void modInvokeN(string fname, params object[] parms);
44 LSL_String modInvokeS(string fname, params object[] parms); 45 LSL_String modInvokeS(string fname, params object[] parms);
45 LSL_Integer modInvokeI(string fname, params object[] parms); 46 LSL_Integer modInvokeI(string fname, params object[] parms);
46 LSL_Float modInvokeF(string fname, params object[] parms); 47 LSL_Float modInvokeF(string fname, params object[] parms);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
index e7a4b2b..1c47138 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
@@ -62,6 +62,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
62 m_MOD_Functions = (IMOD_Api)api; 62 m_MOD_Functions = (IMOD_Api)api;
63 } 63 }
64 64
65 public void modInvokeN(string fname, params object[] parms)
66 {
67 m_MOD_Functions.modInvokeN(fname, parms);
68 }
69
65 public LSL_String modInvokeS(string fname, params object[] parms) 70 public LSL_String modInvokeS(string fname, params object[] parms)
66 { 71 {
67 return m_MOD_Functions.modInvokeS(fname, parms); 72 return m_MOD_Functions.modInvokeS(fname, parms);