private void RegisterObserver(string key, IEventItem observer) { if (m_observerMap.ContainsKey(key)) { if (!m_observerMap[key].Contains(observer)) { m_observerMap[key].Add(observer); } } else { m_observerMap.Add(key, new List <IEventItem>() { observer }); } }
protected long TryPolling(long currentServerSession, long currentEventSequence, out bool errorOccured) { errorOccured = true; IList <IEventItem> events = null; try { events = EventService.PollEvents(currentServerSession, currentEventSequence, MaxWaitInterval); errorOccured = false; } catch (Exception e) { if (Log.ErrorEnabled) { Log.Error(e); } } if (events == null || events.Count == 0) { return(currentEventSequence); } long timeBeforeDispatch = DateTimeUtil.CurrentTimeMillis(); EventDispatcher.EnableEventQueue(); try { for (int a = 0, size = events.Count; a < size; a++) { IEventItem eventObject = events[a]; EventDispatcher.DispatchEvent(eventObject.EventObject, eventObject.DispatchTime, eventObject.SequenceNumber); currentEventSequence = eventObject.SequenceNumber; } } finally { EventDispatcher.FlushEventQueue(); } if (Log.InfoEnabled) { long timeAfterDispatch = DateTimeUtil.CurrentTimeMillis(); Log.Info("Dispatching " + events.Count + " event(s) took " + (timeAfterDispatch - timeBeforeDispatch) + " ms."); } return(currentEventSequence); }