예제 #1
0
        /// <summary>
        /// 注册消息,必须实现接口IMsgReceiver
        /// </summary>
        public static void RegisterLogicMsg(this IMsgReceiver self, int msgName, Action <IMsgParam> callback = null)
        {
            if (msgName == 0)
            {
                return;
            }

            if (!mMsgHandlerDict.ContainsKey(msgName))
            {
                mMsgHandlerDict[msgName] = new List <LogicMsgHandler>();
            }

            List <LogicMsgHandler> handlers = mMsgHandlerDict[msgName];
            int handlerCount = handlers.Count;

            // 防止重复注册
            for (int i = 0; i < handlerCount; i++)
            {
                LogicMsgHandler handler = handlers[i];
                if (handler.Receiver == self && handler.Callback == callback)
                {
                    return;
                }
            }

            handlers.Add(new LogicMsgHandler(self, callback));
        }
예제 #2
0
        /// <summary>
        /// 发送消息,必须实现接口IMsgSender
        /// </summary>
        public static void SendLogicMsg(this IMsgSender sender, int msgName, IMsgParam paramList)
        {
            if (msgName == 0)
            {
                return;
            }

            if (!mMsgHandlerDict.ContainsKey(msgName))
            {
                return;
            }

            List <LogicMsgHandler> handlers = mMsgHandlerDict[msgName];
            int handlerCount = handlers.Count;

            // 之所以是从后向前遍历,是因为从前向后遍历删除后索引值会不断变化
            for (int i = handlerCount - 1; i >= 0; i--)
            {
                LogicMsgHandler handler = handlers[i];

                if (handler.Receiver != null)
                {
                    handler.Callback(paramList);
                }
                else
                {
                    handlers.Remove(handler);
                }
            }
        }
예제 #3
0
        /// <summary>
        /// 注销消息,必须实现接口IMsgReceiver
        /// </summary>
        public static void UnRegisterLogicMsg(this IMsgReceiver self, int msgName, Action <IMsgParam> callback)
        {
            if (msgName == 0)
            {
                return;
            }

            List <LogicMsgHandler> handlers = mMsgHandlerDict[msgName];

            for (int i = handlers.Count - 1; i >= 0; i--)
            {
                LogicMsgHandler handler = handlers[i];
                if (handler.Receiver == self && handler.Callback == callback)
                {
                    handlers.Remove(handler);
                    break;
                }
            }
        }
예제 #4
0
    /// <summary>注销消息 第三个参数 false = 只注销当前实例的注册  true = 注销全部实例注册的这个消息名称列表</summary>
    public static void CancelLogicMsg(this IMsgReceiver self, string msgName, bool isAll = false)
    {
        if (string.IsNullOrEmpty(msgName))
        {
            Debug.Log("消息系统 【注销】:" + msgName + " is Null or Empty");
            return;
        }

        if (!mMsgHandlerDict.ContainsKey(msgName))
        {
            //QPrint.FrameworkWarn("SendMsg is UnRegister");
            Debug.Log("消息系统 【注销】:" + msgName + " 此消息没有注册!");
            return;
        }
        if (isAll == false)
        {
            if (mMsgHandlerDict.ContainsKey(msgName))
            {
                var             handlers         = mMsgHandlerDict [msgName];
                LogicMsgHandler mLogicMsgHandler = handlers.Find(s => s.receiver == self);
                if (mLogicMsgHandler != null)
                {
                    handlers.Remove(mLogicMsgHandler);
                }
                else
                {
                    Debug.Log("消息系统 【注销】:此消息没有找到 ==" + msgName);
                }
            }
        }
        else
        {
            if (mMsgHandlerDict.ContainsKey(msgName))
            {
                mMsgHandlerDict.Remove(msgName);
            }
        }
    }