/// <summary> /// will activate handler in next frame /// </summary> public void FireEvent(EventID eventID, long senderID, long receiverID, object data) { if (senderID == -1 || receiverID == -1) { return; } var eventObj = new CommonEvent(eventID, senderID, receiverID, data); _cachedEvents.Add(eventObj); }
private void dispatchCachedEvent() { //use try-catch-finnaly to ensure cached event can be cleared, regardless of exception and error try { for (int i = 0; i < _cachedEvents.Count; i++) { CommonEvent param = _cachedEvents[i]; var eventID = (EventID)_cachedEvents[i].eventID; if (_allHandlers.ContainsKey(eventID)) { for (int j = 0; j < _allHandlers[eventID].Count; j++) //iterate all handler { EventHandlerWithID selectedHandlers = _allHandlers[eventID][j]; if (param.receiverID == ReceiverIDAllocator.GLOBALID)//broadcast { if (selectedHandlers.handler(param)) { break; } } else { if (selectedHandlers.handlerID == param.receiverID) { selectedHandlers.handler(param); break;//break off } } } } } } catch (System.Exception) { throw; } finally { _cachedEvents.Clear(); } }