Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }