public void BuildAssemblyRPC(System.Reflection.Assembly[] assems, string[] assemMacro, EngineNS.ECSType csType) { if (assems == null) { assems = AppDomain.CurrentDomain.GetAssemblies(); } List <RPCTypeInfo> AllClass = new List <RPCTypeInfo>(); for (var i = 0; i < assems.Length; i++) { try { var assm = assems[i]; if (assemMacro != null && assemMacro.Length == assems.Length && string.IsNullOrEmpty(assemMacro[i])) { assemMacro[i] = GetAssmemblyRPCMacro(assm); } foreach (var j in assm.GetTypes()) { if (j.IsSubclassOf(typeof(RPCProcessor))) { if (j.IsGenericType) { continue; } if (RPCProcessor.GetProcessor(j) == null) { RPCProcessor.InitProcessor(j); } } if (IsRPCClass(j)) { var tmp = new RPCTypeInfo(); tmp.Type = j; if (assemMacro != null && assemMacro.Length == assems.Length) { tmp.Macro = assemMacro[i]; } AllClass.Add(tmp); } } } catch (System.Exception ex) { EngineNS.Profiler.Log.WriteException(ex); } } //只有不会再被派生的类才能做RPC分析,否则就会出现一个RPCParameter被多个函数使用的情况 var finalKlass = GetFinalKlass(AllClass); foreach (var i in finalKlass) { RegClass(i.Type, i.Macro, csType); } RefreshRPCMap(null); }
public void BuildAssemblyRPC(System.Reflection.Assembly[] assems, string[] assemMacro, EngineNS.ECSType csType) { if (this.HashExec.Count > 0) { return; } if (assems == null) { assems = AppDomain.CurrentDomain.GetAssemblies(); } List <RPCTypeInfo> AllClass = new List <RPCTypeInfo>(); var mapRpcFuncs = new List <System.Reflection.MethodInfo>(); for (var i = 0; i < assems.Length; i++) { try { var assm = assems[i]; var mapKlass = assm.GetType("EngineNS.Bricks.RemoteServices" + ".SystemMapRPC"); if (mapKlass != null) { var mapFun = mapKlass.GetMethod("DoRPCMap"); if (mapFun != null) { var args = mapFun.GetParameters(); if (args.Length != 1) { continue; } if (args[0].ParameterType != this.GetType()) { continue; } if (mapFun.IsStatic == false) { continue; } mapRpcFuncs.Add(mapFun); //mapFun.Invoke(null, new object[] { this }); } } if (assemMacro != null && assemMacro.Length == assems.Length && string.IsNullOrEmpty(assemMacro[i])) { assemMacro[i] = GetAssmemblyRPCMacro(assm); } foreach (var j in assm.GetTypes()) { if (IsRPCClass(j)) { var tmp = new RPCTypeInfo(); tmp.Type = j; if (assemMacro != null && assemMacro.Length == assems.Length) { tmp.Macro = assemMacro[i]; } AllClass.Add(tmp); } } } catch (System.Exception ex) { EngineNS.Profiler.Log.WriteException(ex); } } //只有不会再被派生的类才能做RPC分析,否则就会出现一个RPCParameter被多个函数使用的情况 var finalKlass = GetFinalKlass(AllClass); foreach (var i in finalKlass) { RegClass(i.Type, i.Macro, csType); } RefreshRPCMap(mapRpcFuncs); }