예제 #1
0
        internal bool Dispatch(NetMessage message, NetConnection connection, MethodInfo method, object instance)
        {
            List <Type> paramTypes = RpcInfoCache.ParamTypes(method.Name);

            if (paramTypes.Count >= message.Parameters.Length)
            {
                return(false);
            }

            if (method.ReturnType == typeof(IEnumerator) || method.ReturnType == typeof(void))
            {
                return(false);
            }

            ushort requestId = (ushort)message.Parameters[message.Parameters.Length - 1];

            object[] culledParams = new object[paramTypes.Count];

            for (int i = 0; i < paramTypes.Count; i++)
            {
                culledParams[i] = message.Parameters[i];
            }

            message.Parameters = culledParams;

            object result = method.Invoke(instance, message.Parameters);

            connection.Send(NetMessage.Create((ushort)Cmd.RequestResponse, message.ViewId,
                                              new object[] { requestId, true, result }, true));

            return(true);
        }
예제 #2
0
 internal List <Type> ParamTypes(ushort id)
 {
     return(RpcInfoCache.ParamTypes(IdToName(id)));
 }