예제 #1
0
        private void HandleEvent(object sender, T e)
        {
            enEventID eventId            = e.EventID;
            bool      noHandlerException = false;

            if (eventHandlers.TryGetValue(eventId, out var handlers) && handlers.Count > 0)
            {
                LinkedListNode <EventHandler <T> > current = handlers.First;
                while (current != null)
                {
                    LinkedListNode <EventHandler <T> > next = current.Next;
                    current.Value(sender, e);
                    current = next;
                }
            }
            else if (defaultHandler != null)
            {
                defaultHandler(sender, e);
            }
            else if ((eventPoolMode & enEventPoolMode.AllowNoHandler) == 0)
            {
                noHandlerException = true;
            }

            ReferencePool.ReferencePool.Release <T>(e);

            if (noHandlerException)
            {
                Debuger.LogError(Utility.StringUtility.Format("Event '{0}' not allow no handler.", eventId.ToString()));
            }
        }
예제 #2
0
 public void Subscribe(enEventID id, EventHandler <T> handler)
 {
     if (!eventHandlers.TryGetValue(id, out var handlers))
     {
         handlers = new LinkedList <EventHandler <T> >();
         handlers.AddLast(handler);
         eventHandlers.Add(id, handlers);
     }
     else if ((eventPoolMode & enEventPoolMode.AllowMultiHandler) == 0)
     {
         Debuger.LogError(Utility.StringUtility.Format("Event '{0}' not allow multi handler.", id.ToString()));
     }
     else if ((eventPoolMode & enEventPoolMode.AllowDuplicateHandler) == 0 && Check(id, handler))
     {
         Debuger.LogError(Utility.StringUtility.Format("Event '{0}' not allow duplicate handler.", id.ToString()));
     }
     else
     {
         handlers.AddLast(handler);
     }
 }
예제 #3
0
        public void Unsubscribe(enEventID id, EventHandler <T> handler)
        {
            if (handler == null)
            {
                Debuger.LogError("Event handler is invalid.");
            }

            if (!eventHandlers.TryGetValue(id, out var handlers))
            {
                Debuger.LogError(Utility.StringUtility.Format("Event '{0}' not exists any handler.", id.ToString()));
            }

            if (!handlers.Remove(handler))
            {
                Debuger.LogError(Utility.StringUtility.Format("Event '{0}' not exists specified handler.", id.ToString()));
            }
        }