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不存在!"); } }
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); } }