示例#1
0
    public void Add(EventObserver observer)
    {
        Dictionary <int, EventObserver> obs = observersByMsgCode.GetNewIfNo(observer.Key);

        if (obs.Count > 100)
        {
            Debuger.LogError("EventMgr同一个对象的同一个消息的监听者过多,是不是泄露:{0} {1} {2}", observer.msg, observer.code, Util.GetDelegateName(observer.GetDelegate()));
        }


        obs.Add(observer.Id, observer);
        observersById.Add(observer.Id, observer);
    }
示例#2
0
    //取消监听
    public static void Remove(EventObserver observer)
    {
        if (observer.IsInPool)
        {
            Debuger.LogError(string.Format("重复删除监听者:{0} {1}", observer.Id, Util.GetDelegateName(observer.GetDelegate())));
            return;
        }
        if (observer.removeCounter > 0 && m_fireCount > 0)
        {
            //    Debuger.LogError(string.Format("重复删除监听者:{0} {1}", observer.Id,  Util.GetDelegateName(observer.GetDelegate())));
            return;
        }
        observer.removeCounter = 1;
        if (m_fireCount > 0)
        {
            m_delayRemovesObservers.Add(observer);
            return;
        }


        if (!observer.isAll)
        {
            observer.notifier.Remove(observer);
            AllFireNotifier.Remove(observer);
        }
        else
        {
            AllNotifier.Remove(observer);
        }
        if (!m_observersById.Remove(observer.Id))
        {
            Debuger.LogError(string.Format("删除了不存在的监听者:{0}", observer.Id));
        }

        IdTypePool <EventObserver> .Put(observer);
    }