示例#1
0
        public void AddListener(int noticeName, Action <INoticeBase <int> > listener, bool onlyOnce = false)
        {
            NoticeHandler <int> handlers;

            if (mNoticeMapper.ContainsKey(noticeName))
            {
                handlers = mNoticeMapper[noticeName];
            }
            else
            {
                handlers = NoticeHandler <int> .Create(noticeName, mObserver);

                mNoticeMapper[noticeName] = handlers;
            }
            if (onlyOnce)
            {
                AddOnlyOnceListener(noticeName, listener);

                if (HasListener(noticeName, listener))
                {
                    return;
                }
                else
                {
                }
            }
            else
            {
            }

            handlers.Add(listener);
        }
示例#2
0
        public static NoticeHandler <NameT> Create(NameT name, INotificationSender sender = default)
        {
            NoticeHandler <NameT> result = new NoticeHandler <NameT>
            {
                Name   = name,
                Sender = sender
            };

            return(result);
        }
示例#3
0
        private void ClearOnlyOnceListeners(int noticeName, ref NoticeHandler <int> handlers)
        {
            if (mOnlyOnceListeners.ContainsKey(noticeName))
            {
                OnlyOnceListenerList list = mOnlyOnceListeners[noticeName];

                int max = list.Count;
                for (int i = 0; i < max; i++)
                {
                    handlers.Remove(list[i]);
                }
                list.Clear();
            }
            else
            {
            }
        }
示例#4
0
        public void Add(NameT name, Action <INoticeBase <NameT> > handler)
        {
            if (mNoticeHandlers == null)
            {
                return;
            }
            NoticeHandler <NameT> noticeHolder;

            if (!mNoticeHandlers.IsContainsKey(name))
            {
                noticeHolder = NoticeHandler <NameT> .Create(name);

                mNoticeHandlers[name] = noticeHolder;
            }
            else
            {
                noticeHolder = mNoticeHandlers[name];
            }
            noticeHolder.Add(handler);
        }
示例#5
0
        /// <summary>
        /// 对观察者本体派发消息
        /// </summary>
        /// <param name="notice"></param>
        public void Dispatch(INoticeBase <int> notice)
        {
            int noticeName = notice.Name;

            if (mNoticeMapper.ContainsKey(noticeName))
            {
                NoticeHandler <int> handlers = mNoticeMapper[noticeName];
                if (handlers.Sender == mObserver)
                {
                    handlers.Invoke(ref notice);

                    ClearOnlyOnceListeners(noticeName, ref handlers);
                }
                else
                {
                }
            }
            else
            {
            }
        }
示例#6
0
        public void RemoveListener(int noticeName, Action <INoticeBase <int> > listener)
        {
            NoticeHandler <int> handlers = mNoticeMapper[noticeName];

            handlers?.Remove(listener);

            if (mOnlyOnceListeners.ContainsKey(noticeName))
            {
                OnlyOnceListenerList list = mOnlyOnceListeners[noticeName];
                if (list.Contains(listener))
                {
                    list.Remove(listener);
                }
                else
                {
                }
            }
            else
            {
            }
        }