示例#1
0
        public static void Load(this MessageDispatcherComponent self)
        {
            self.Handlers.Clear();

            HashSet <Type> types = Game.EventSystem.GetTypes(typeof(MessageHandlerAttribute));

            foreach (Type type in types)
            {
                IMHandler iMHandler = Activator.CreateInstance(type) as IMHandler;
                if (iMHandler == null)
                {
                    Log.Error($"message handle {type.Name} 需要继承 IMHandler");
                    continue;
                }

                Type   messageType = iMHandler.GetMessageType();
                ushort opcode      = OpcodeTypeComponent.Instance.GetOpcode(messageType);
                if (opcode == 0)
                {
                    Log.Error($"消息opcode为0: {messageType.Name}");
                    continue;
                }
                self.RegisterHandler(opcode, iMHandler);
            }
        }
        public static void Handle(this MessageDispatcherComponent self, Session session, ushort opcode, object message)
        {
            List <MessageDispatcherInfo> actions;

            if (!self.Handlers.TryGetValue(opcode, out actions))
            {
                Log.Error($"消息没有处理: {opcode} {message}");
                return;
            }

            SceneType sceneType = session.DomainScene().SceneType;

            foreach (MessageDispatcherInfo ev in actions)
            {
                if (ev.SceneType != sceneType)
                {
                    continue;
                }

                try
                {
                    ev.IMHandler.Handle(session, message);
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }
        }
        private static void Load(this MessageDispatcherComponent self)
        {
            self.Handlers.Clear();

            HashSet <Type> types = Game.EventSystem.GetTypes(typeof(MessageHandlerAttribute));

            foreach (Type type in types)
            {
                IMHandler iMHandler = Activator.CreateInstance(type) as IMHandler;
                if (iMHandler == null)
                {
                    Log.Error($"message handle {type.Name} 需要继承 IMHandler");
                    continue;
                }

                object[] attrs = type.GetCustomAttributes(typeof(MessageHandlerAttribute), false);

                foreach (object attr in attrs)
                {
                    MessageHandlerAttribute messageHandlerAttribute = attr as MessageHandlerAttribute;

                    Type messageType = iMHandler.GetMessageType();

                    ushort opcode = OpcodeTypeComponent.Instance.GetOpcode(messageType);
                    if (opcode == 0)
                    {
                        Log.Error($"消息opcode为0: {messageType.Name}");
                        continue;
                    }

                    MessageDispatcherInfo messageDispatcherInfo = new (messageHandlerAttribute.SceneType, iMHandler);
                    self.RegisterHandler(opcode, messageDispatcherInfo);
                }
            }
        }
示例#4
0
 public static void RegisterHandler(this MessageDispatcherComponent self, ushort opcode, IMHandler handler)
 {
     if (!self.Handlers.ContainsKey(opcode))
     {
         self.Handlers.Add(opcode, new List <IMHandler>());
     }
     self.Handlers[opcode].Add(handler);
 }
        private static void RegisterHandler(this MessageDispatcherComponent self, ushort opcode, MessageDispatcherInfo handler)
        {
            if (!self.Handlers.ContainsKey(opcode))
            {
                self.Handlers.Add(opcode, new List <MessageDispatcherInfo>());
            }

            self.Handlers[opcode].Add(handler);
        }
示例#6
0
        public static void Handle(this MessageDispatcherComponent self, Session session, MessageInfo messageInfo)
        {
            List <IMHandler> actions;

            if (!self.Handlers.TryGetValue(messageInfo.Opcode, out actions))
            {
                Log.Error($"消息没有处理: {messageInfo.Opcode} {JsonHelper.ToJson(messageInfo.Message)}");
                return;
            }

            foreach (IMHandler ev in actions)
            {
                try
                {
                    ev.Handle(session, messageInfo.Message);
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }
        }
示例#7
0
        public static void Handle(this MessageDispatcherComponent self, Session session, ushort opcode, object message)
        {
            List <IMHandler> actions;

            if (!self.Handlers.TryGetValue(opcode, out actions))
            {
                Log.Error($"消息没有处理: {opcode} {message}");
                return;
            }

            foreach (IMHandler ev in actions)
            {
                try
                {
                    ev.Handle(session, message);
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }
        }