예제 #1
0
        /// <summary>
        /// 解除事件注册
        /// </summary>
        /// <param name="id">事件id</param>
        /// <param name="handle">处理事件的handle</param>
        public void UnregisterEvent(ushort id, IEventHandle handle)
        {
            if (!nodetree.ContainsKey(id))
            {
                //TODO:解除注册失败
                return;
            }
            EventNode tmpNode = nodetree[id];

            if (handle == tmpNode.Handle)
            {
                if (tmpNode.next == null)
                {
                    nodetree.Remove(id);
                }
                else
                {
                    nodetree[id] = tmpNode.next;
                }
            }
            else
            {
                while (tmpNode.next.Handle != handle)
                {
                    tmpNode = tmpNode.next;
                }
                tmpNode.next = tmpNode.next.next;
            }
        }
 public void Dispose()
 {
     if (_MyEventHandle != null)
     {
         _MyEventHandle.Dispose();
     }
     _MyEventHandle = null;
     if (_EventHandles != null)
     {
         foreach (var eventHandle in _EventHandles)
         {
             eventHandle.Dispose();
         }
         _EventHandles.Clear();
     }
     _EventHandles = null;
 }
예제 #3
0
 /// <summary>
 /// 注册事件
 /// </summary>
 /// <param name="id">事件id</param>
 /// <param name="handle">处理事件的handle</param>
 public void RegisterEvent(ushort id, IEventHandle handle)
 {
     if (GetManager(id) != managerId)
     {
         //TODO:Event注册在错误的Manager上
         return;
     }
     if (!nodetree.ContainsKey(id))
     {
         nodetree.Add(id, new EventNode(handle));
     }
     else
     {
         EventNode tmpnode = nodetree[id];
         while (tmpnode.next != null)
         {
             tmpnode = tmpnode.next;
         }
         tmpnode.next = new EventNode(handle);
     }
 }
예제 #4
0
        public static void UnSubscrib <T>(OnEventDelegate <T> del)
        {
            ConcurrentBag <IEventHandle> bag;

            if (mDelegateMap.TryGetValue(typeof(T), out bag))
            {
                ConcurrentBag <IEventHandle> removeBag = new ConcurrentBag <IEventHandle>();
                foreach (DelWrapper <T> w in bag)
                {
                    if (w.Delegate == del)
                    {
                        removeBag.Add(w);
                    }
                }

                foreach (IEventHandle r in removeBag)
                {
                    IEventHandle one = r;
                    bag.TryTake(out one);
                }
            }
        }
예제 #5
0
 public void SetNext(IEventHandle next)
 {
     this.next = next;
 }
예제 #6
0
 public EventNode(IEventHandle handle)
 {
     this.handle = handle;
 }
 public MyEventListener(MyEventProvider provider)
 {
     _myEventHolder = provider.MyEvent.RegisterWeak(AtMyEvent);
 }
 public void RegisterˑMyEvent(MyEventProvider listener)
 {
     _MyEventHandle = listener.MyEvent.RegisterWeak(this, "AtMyEvent", AtMyEvent);
 }
 public void Listen(MyEventProvider2 provider)
 {
     _MyEventHolder = provider.MyEvent.RegisterWeak(AtMyEvent);
 }
 public void Listen(MyEventProvider1EventHandler <TEventArgs> provider)
 {
     _MyEventHolder = provider.MyEvent.RegisterWeak(AtMyEvent);
 }
예제 #11
0
 public static void Subscribes <TEvent>(IEventHandle <TEvent> eventHandle) where TEvent : EventDomain
 {
     UnSubscribe(eventHandle.GetType());
 }