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())); } }
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); } }
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())); } }