/// <summary> /// Invokes a preregistered function through the ScriptModuleComms class /// </summary> /// <param name="fname">The name of the function to invoke</param> /// <param name="fname">List of parameters</param> /// <returns>string result of the invocation</returns> protected object modInvoke(string fname, params object[] parms) { if (!m_MODFunctionsEnabled) { MODShoutError("Module command functions not enabled"); return(""); } // m_log.DebugFormat( // "[MOD API]: Invoking dynamic function {0}, args '{1}' with {2} return type", // fname, // string.Join(",", Array.ConvertAll<object, string>(parms, o => o.ToString())), // ((MethodInfo)MethodBase.GetCurrentMethod()).ReturnType); Type[] signature = m_comms.LookupTypeSignature(fname); if (signature.Length != parms.Length) { MODError(String.Format("wrong number of parameters to function {0}", fname)); } object[] convertedParms = new object[parms.Length]; for (int i = 0; i < parms.Length; i++) { convertedParms[i] = ConvertFromLSL(parms[i], signature[i], fname); } // now call the function, the contract with the function is that it will always return // non-null but don't trust it completely try { object result = m_comms.InvokeOperation(m_host.UUID, m_item.ItemID, fname, convertedParms); if (result != null) { return(result); } Type returntype = m_comms.LookupReturnType(fname); if (returntype == typeof(void)) { return(null); } MODError(String.Format("Invocation of {0} failed; null return value", fname)); } catch (Exception e) { MODError(String.Format("Invocation of {0} failed; {1}", fname, e.Message)); } return(null); }
/// <summary> /// Invokes a preregistered function through the ScriptModuleComms class /// </summary> /// <param name="fname">The name of the function to invoke</param> /// <param name="fname">List of parameters</param> /// <returns>string result of the invocation</returns> protected object modInvoke(string fname, params object[] parms) { if (!m_MODFunctionsEnabled) { MODShoutError("Module command functions not enabled"); return(""); } Type[] signature = m_comms.LookupTypeSignature(fname); if (signature.Length != parms.Length) { MODError(String.Format("wrong number of parameters to function {0}", fname)); } object[] convertedParms = new object[parms.Length]; for (int i = 0; i < parms.Length; i++) { convertedParms[i] = ConvertFromLSL(parms[i], signature[i], fname); } // now call the function, the contract with the function is that it will always return // non-null but don't trust it completely try { object result = m_comms.InvokeOperation(m_host.UUID, m_item.ItemID, fname, convertedParms); if (result != null) { return(result); } MODError(String.Format("Invocation of {0} failed; null return value", fname)); } catch (Exception e) { MODError(String.Format("Invocation of {0} failed; {1}", fname, e.Message)); } return(null); }