private static void _DetectMethod_Handler(Type cls, MethodInfo mi, PacketHandlePhase phase, ServiceRegHolderClass holderCls) { Type attrTy = (phase == PacketHandlePhase.Handle ? typeof(HandlerAttribute) : ( phase == PacketHandlePhase.PreHandle ? typeof(PreHandlerAttribute) : typeof(UnifyPreHandlerAttribute))); Attribute attr = mi.GetCustomAttribute(attrTy, false); if (attr == null) { return; } if (phase == PacketHandlePhase.Handle) { ServiceRegHolderMethod holderMethod = _GetHolderMethod(holderCls, mi); holderMethod.asHandler = true; holderMethod.handlerOpcode = (attr as HandlerAttribute).opcode; } else if (phase == PacketHandlePhase.PreHandle) { ServiceRegHolderMethod holderMethod = _GetHolderMethod(holderCls, mi); holderMethod.asPreHandler = true; holderMethod.preHandlerOpcode = (attr as PreHandlerAttribute).opcode; } else { ServiceRegHolderMethod holderMethod = _GetHolderMethod(holderCls, mi); holderMethod.asUnifyPreHandler = true; } }
private void _RegisterExcHandler(Service svc, PacketHandlePhase phase, bool asDefault, ref object obj) { if (phase == PacketHandlePhase.Handle) { if (!asDefault && asExcHandler) { _CreateObject(ref obj); for (int i = 0; i < excHandlerOpcodes.Count; i++) { svc.SetPacketExcHandler(PacketHandlePhase.Handle, methodInfo.CreateDelegate(typeof(PacketExcHandler), obj) as PacketExcHandler, excHandlerOpcodes[i]); } } else if (asDefault && asDftExcHandler) { _CreateObject(ref obj); svc.SetDftPacketExcHandler(PacketHandlePhase.Handle, methodInfo.CreateDelegate(typeof(PacketExcHandler), obj) as PacketExcHandler); } } else if (phase == PacketHandlePhase.PreHandle) { if (!asDefault && asExcPreHandler) { _CreateObject(ref obj); for (int i = 0; i < excPreHandlerOpcodes.Count; i++) { svc.SetPacketExcHandler(PacketHandlePhase.PreHandle, methodInfo.CreateDelegate(typeof(PacketExcHandler), obj) as PacketExcHandler, excPreHandlerOpcodes[i]); } } else if (asDefault && asDftExcPreHandler) { _CreateObject(ref obj); svc.SetDftPacketExcHandler(PacketHandlePhase.PreHandle, methodInfo.CreateDelegate(typeof(PacketExcHandler), obj) as PacketExcHandler); } } else if (phase == PacketHandlePhase.UnifyPreHandle && asExcUnifyPreHandler) { _CreateObject(ref obj); svc.SetPacketExcHandler(PacketHandlePhase.UnifyPreHandle, methodInfo.CreateDelegate(typeof(PacketExcHandler), obj) as PacketExcHandler, 0); } }
private void _RegisterHandler(Service svc, PacketHandlePhase phase, ref object obj) { if (phase == PacketHandlePhase.Handle && asHandler) { _CreateObject(ref obj); svc.Subscribe(handlerOpcode, methodInfo.CreateDelegate(typeof(PacketHandler), obj) as PacketHandler); } else if (phase == PacketHandlePhase.PreHandle && asPreHandler) { _CreateObject(ref obj); svc.PreSubscribe(preHandlerOpcode, methodInfo.CreateDelegate(typeof(PacketPreHandler), obj) as PacketPreHandler); } else if (phase == PacketHandlePhase.UnifyPreHandle && asUnifyPreHandler) { _CreateObject(ref obj); svc.UnifyPreSubscribe( methodInfo.CreateDelegate(typeof(PacketUnifyPreHandler), obj) as PacketUnifyPreHandler); } }