예제 #1
0
        private void HandleRPCMessage(ISession session, RPCMessage rpcmsg)
        {
            RPCMethodHelper helper = GetMethodHelper(rpcmsg.name);

            if (helper != null)
            {
                object[] args      = new object[rpcmsg.raw_args.Count + 1];
                var      raw_args  = rpcmsg.raw_args;
                var      paramInfo = helper.method.GetParameters();

                args[0] = session;

                if (args.Length == paramInfo.Length)
                {
                    for (int i = 0; i < raw_args.Count; i++)
                    {
                        if (raw_args[i].type == RPCArgType.PBObject)
                        {
                            args[i + 1] = m_RecvBuff.DecodeProtoMsg(raw_args[i].raw_value, null, paramInfo[i + 1].ParameterType);
                        }
                        else
                        {
                            args[i + 1] = raw_args[i].value;
                        }
                    }

                    m_currInvokingName    = rpcmsg.name;
                    m_currInvokingSession = session;

                    try
                    {
                        helper.method.Invoke(helper.listener, BindingFlags.NonPublic, null, args, null);
                    }
                    catch (Exception e)
                    {
                        Debuger.LogError("RPC调用出错:{0}\n{1}", e.Message, e.StackTrace);
                    }
                    m_currInvokingName    = null;
                    m_currInvokingSession = null;
                }
                else
                {
                    Debuger.LogWarning("参数数量不一致!");
                }
            }
            else
            {
                Debuger.LogWarning("RPC不存在!");
            }
        }
예제 #2
0
        private void HandleRPCMessage(ISession session, RPCMessage rpcMessage)
        {
            RPCMethodHelper helper = rpcManager.GetMethodHelper(rpcMessage.name);

            if (helper != null)
            {
                object[] args      = new object[rpcMessage.rawargs.Count + 1];
                var      rawargs   = rpcMessage.rawargs;
                var      paramInfo = helper.method.GetParameters();
                args[0] = session;
                if (args.Length == paramInfo.Length)
                {
                    for (int i = 0; i < rawargs.Count; i++)
                    {
                        if (rawargs[i].type == enRPCArgType.PBObject)
                        {
                            args[i + 1] = ProtoBuffUtility.Deserialize(paramInfo[i + 1].ParameterType, rawargs[i].rawValue);
                        }
                        else
                        {
                            args[i + 1] = rawargs[i].value;
                        }
                    }

                    currInvokingName    = rpcMessage.name;
                    currInvokingSession = session;

                    try
                    {
                        helper.method.Invoke(helper.listener, BindingFlags.NonPublic, null, args, null);
                    }
                    catch (Exception e)
                    {
                        Debuger.LogError("RPC调用出错:{0} : {1}\n{2}", rpcMessage.name, e.Message, e.StackTrace);
                    }
                    currInvokingName    = null;
                    currInvokingSession = null;
                }
                else
                {
                    Debuger.LogWarning("参数数量不一致!{0}", rpcMessage.name);
                }
            }
            else
            {
                Debuger.LogWarning("RPC不存在!{0}", rpcMessage.name);
            }
        }