예제 #1
0
        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;
            }
        }
예제 #2
0
 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);
     }
 }
예제 #3
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);
     }
 }