/// <summary> /// Manages the received signal /// </summary> /// <param name="memberName">The name of the signal</param> /// <param name="msg">The message containing all the parameters</param> public void ManageSignalCall(string memberName, IntPtr msg) { Console.WriteLine("{0} called", memberName); Type type = typeof(T); string signature = NativeHelper.MessageSignature(msg); Object[] values = new Object[signature.Length]; NativeHelper.extractValues(values, msg, signature); FireEvent(memberName, values); }
/// <summary> /// Manages the remote call of a method to this process /// </summary> /// <param name="memberName">The name of the method</param> /// <param name="msg">The message set with the method call</param> /// <returns>The reply to send back</returns> public IntPtr ManageMethodCall(string memberName, IntPtr msg) { Type type = typeof(T); MethodInfo method = type.GetMethod(memberName); Console.WriteLine("Member = " + memberName); Object[] values = new Object[method.GetParameters().Length]; string sign = NativeHelper.MessageSignature(msg); NativeHelper.extractValues(values, msg, sign); Object ret = method.Invoke(_remoteObj, values); IntPtr reply = NativeHelper.CreateReply(method.ReturnParameter.ParameterType.Name, ret); return(reply); }
/// <summary> /// Calls a method by name /// </summary> /// <param name="name">The name of the method to call</param> /// <param name="vars">All the parameters that will be sent</param> public Object[] CallMethod(string name, object[] vars) { Console.WriteLine("Method name = {0}", name); Type type = typeof(T); MethodInfo mInfo = type.GetMethod(name); if (mInfo != null) { ParameterInfo[] sig = mInfo.GetParameters(); for (int i = 0; i < vars.Length; i++) { if (sig[i].ParameterType != vars[i].GetType()) { string s = "Expected : " + sig[i].ParameterType.Name + " got : " + vars[i].GetType().Name; throw new ApplicationException(s); } } IntPtr[] msgs = NativeHelper.CreateMessages(vars); IntPtr message = NativeHelper.Client_CallMethod(_nativeClient.Value, name, msgs, msgs.Length); if (message != IntPtr.Zero) { string signature = NativeHelper.MessageSignature(message); Object[] replyValue = new Object[signature.Length]; if (signature.Length > 0) { NativeHelper.extractValues(replyValue, message, signature); Console.WriteLine("Value received : {0}", replyValue); } return(replyValue); } else { Console.WriteLine("Nothing was returned"); } } return(null); }