void ProcessCommand(HashSet <string> names, MethodDefinition md, CustomAttribute ca) { if (!CommandProcessor.ProcessMethodsValidateCommand(md, ca)) { return; } if (names.Contains(md.Name)) { Weaver.Error("Duplicate Command name [" + netBehaviourSubclass.FullName + ":" + md.Name + "]"); return; } names.Add(md.Name); commands.Add(md); MethodDefinition cmdCallFunc = CommandProcessor.ProcessCommandCall(netBehaviourSubclass, md, ca); MethodDefinition cmdFunc = CommandProcessor.ProcessCommandInvoke(netBehaviourSubclass, md, cmdCallFunc); if (cmdFunc != null) { commandInvocationFuncs.Add(cmdFunc); } if (cmdCallFunc != null) { commandCallFuncs.Add(cmdCallFunc); } }
void ProcessCommand(HashSet <string> names, MethodDefinition md, CustomAttribute commandAttr) { if (!CommandProcessor.ProcessMethodsValidateCommand(md)) { return; } if (names.Contains(md.Name)) { Weaver.Error($"Duplicate Command name {md.Name}", md); return; } bool ignoreAuthority = commandAttr.GetField("ignoreAuthority", false); names.Add(md.Name); commands.Add(new CmdResult { method = md, ignoreAuthority = ignoreAuthority }); MethodDefinition cmdCallFunc = CommandProcessor.ProcessCommandCall(netBehaviourSubclass, md, commandAttr); MethodDefinition cmdFunc = CommandProcessor.ProcessCommandInvoke(netBehaviourSubclass, md, cmdCallFunc); if (cmdFunc != null) { commandInvocationFuncs.Add(cmdFunc); } }
void ProcessCommand(HashSet <string> names, MethodDefinition md, CustomAttribute commandAttr, ref bool WeavingFailed) { if (md.IsAbstract) { Log.Error("Abstract Commands are currently not supported, use virtual method instead", md); WeavingFailed = true; return; } if (!ValidateRemoteCallAndParameters(md, RemoteCallType.Command, ref WeavingFailed)) { return; } bool requiresAuthority = commandAttr.GetField("requiresAuthority", true); names.Add(md.Name); commands.Add(new CmdResult { method = md, requiresAuthority = requiresAuthority }); MethodDefinition cmdCallFunc = CommandProcessor.ProcessCommandCall(weaverTypes, writers, Log, netBehaviourSubclass, md, commandAttr, ref WeavingFailed); MethodDefinition cmdFunc = CommandProcessor.ProcessCommandInvoke(weaverTypes, readers, Log, netBehaviourSubclass, md, cmdCallFunc, ref WeavingFailed); if (cmdFunc != null) { commandInvocationFuncs.Add(cmdFunc); } }
void ProcessCommand(HashSet <string> names, MethodDefinition md, CustomAttribute commandAttr) { if (md.IsAbstract) { Weaver.Error("Abstract Commands are currently not supported, use virtual method instead", md); return; } if (!ValidateRemoteCallAndParameters(md, RemoteCallType.Command)) { return; } if (names.Contains(md.Name)) { Weaver.Error($"Duplicate Command name {md.Name}", md); return; } bool ignoreAuthority = commandAttr.GetField("ignoreAuthority", false); names.Add(md.Name); commands.Add(new CmdResult { method = md, ignoreAuthority = ignoreAuthority }); MethodDefinition cmdCallFunc = CommandProcessor.ProcessCommandCall(netBehaviourSubclass, md, commandAttr); MethodDefinition cmdFunc = CommandProcessor.ProcessCommandInvoke(netBehaviourSubclass, md, cmdCallFunc); if (cmdFunc != null) { commandInvocationFuncs.Add(cmdFunc); } }
void ProcessMethods() { HashSet <string> names = new HashSet <string>(); // find command and RPC functions foreach (MethodDefinition md in m_td.Methods) { Weaver.ResetRecursionCount(); foreach (CustomAttribute ca in md.CustomAttributes) { if (ca.AttributeType.FullName == Weaver.CommandType.FullName) { if (!CommandProcessor.ProcessMethodsValidateCommand(m_td, md, ca)) { return; } if (names.Contains(md.Name)) { Log.Error("Duplicate Command name [" + m_td.FullName + ":" + md.Name + "]"); Weaver.fail = true; return; } names.Add(md.Name); m_Cmds.Add(md); MethodDefinition cmdFunc = CommandProcessor.ProcessCommandInvoke(m_td, md); if (cmdFunc != null) { m_CmdInvocationFuncs.Add(cmdFunc); } MethodDefinition cmdCallFunc = CommandProcessor.ProcessCommandCall(m_td, md, ca); if (cmdCallFunc != null) { m_CmdCallFuncs.Add(cmdCallFunc); Weaver.lists.replaceMethods[md.FullName] = cmdCallFunc; } break; } if (ca.AttributeType.FullName == Weaver.TargetRpcType.FullName) { if (!TargetRpcProcessor.ProcessMethodsValidateTargetRpc(m_td, md, ca)) { return; } if (names.Contains(md.Name)) { Log.Error("Duplicate Target Rpc name [" + m_td.FullName + ":" + md.Name + "]"); Weaver.fail = true; return; } names.Add(md.Name); m_TargetRpcs.Add(md); MethodDefinition rpcFunc = TargetRpcProcessor.ProcessTargetRpcInvoke(m_td, md); if (rpcFunc != null) { m_TargetRpcInvocationFuncs.Add(rpcFunc); } MethodDefinition rpcCallFunc = TargetRpcProcessor.ProcessTargetRpcCall(m_td, md, ca); if (rpcCallFunc != null) { m_TargetRpcCallFuncs.Add(rpcCallFunc); Weaver.lists.replaceMethods[md.FullName] = rpcCallFunc; } break; } if (ca.AttributeType.FullName == Weaver.ClientRpcType.FullName) { if (!RpcProcessor.ProcessMethodsValidateRpc(m_td, md, ca)) { return; } if (names.Contains(md.Name)) { Log.Error("Duplicate ClientRpc name [" + m_td.FullName + ":" + md.Name + "]"); Weaver.fail = true; return; } names.Add(md.Name); m_Rpcs.Add(md); MethodDefinition rpcFunc = RpcProcessor.ProcessRpcInvoke(m_td, md); if (rpcFunc != null) { m_RpcInvocationFuncs.Add(rpcFunc); } MethodDefinition rpcCallFunc = RpcProcessor.ProcessRpcCall(m_td, md, ca); if (rpcCallFunc != null) { m_RpcCallFuncs.Add(rpcCallFunc); Weaver.lists.replaceMethods[md.FullName] = rpcCallFunc; } break; } } } // cmds foreach (MethodDefinition md in m_CmdInvocationFuncs) { m_td.Methods.Add(md); } foreach (MethodDefinition md in m_CmdCallFuncs) { m_td.Methods.Add(md); } // rpcs foreach (MethodDefinition md in m_RpcInvocationFuncs) { m_td.Methods.Add(md); } foreach (MethodDefinition md in m_TargetRpcInvocationFuncs) { m_td.Methods.Add(md); } foreach (MethodDefinition md in m_RpcCallFuncs) { m_td.Methods.Add(md); } foreach (MethodDefinition md in m_TargetRpcCallFuncs) { m_td.Methods.Add(md); } }