public IList <IQueuedEvent> BatchEvents(IList <IQueuedEvent> eventItems) { List <IQueuedEvent> outputEvents; if (eventItems.Count == 0) { outputEvents = new List <IQueuedEvent>(0); return(outputEvents); } if (eventItems.Count == 1) { outputEvents = new List <IQueuedEvent>(1); IQueuedEvent soleEvent = eventItems[0]; outputEvents.Add(soleEvent); return(outputEvents); } outputEvents = new List <IQueuedEvent>(); IList <IQueuedEvent> currentBatchableEvents = new List <IQueuedEvent>(); IList <IQueuedEvent> batchedEvents; IEventBatcher currentEventBatcher = null; for (int i = 0, size = eventItems.Count; i < size; i++) { IQueuedEvent queuedEvent = eventItems[i]; Object eventObject = queuedEvent.EventObject; IEventBatcher eventBatcher = typeToBatchersDict.GetExtension(eventObject.GetType()); if (eventBatcher != null) { if (currentEventBatcher != null && !eventBatcher.Equals(currentEventBatcher)) { batchedEvents = BatchEventsIntern(currentBatchableEvents, currentEventBatcher); if (batchedEvents != null) { outputEvents.AddRange(batchedEvents); } currentBatchableEvents.Clear(); } currentEventBatcher = eventBatcher; currentBatchableEvents.Add(queuedEvent); continue; } batchedEvents = BatchEventsIntern(currentBatchableEvents, currentEventBatcher); if (batchedEvents != null) { outputEvents.AddRange(batchedEvents); } currentBatchableEvents.Clear(); currentEventBatcher = null; outputEvents.Add(queuedEvent); } batchedEvents = BatchEventsIntern(currentBatchableEvents, currentEventBatcher); if (batchedEvents != null) { outputEvents.AddRange(batchedEvents); } return(outputEvents); }
public void UnregisterEventBatcher(IEventBatcher eventBatcher, Type eventType) { typeToBatchersDict.Unregister(eventBatcher, eventType); }
protected IList <IQueuedEvent> BatchEventsIntern(IList <IQueuedEvent> currentBatchableEvents, IEventBatcher currentEventBatcher) { if (currentBatchableEvents.Count == 0) { return(null); } if (currentBatchableEvents.Count == 1 || currentEventBatcher == null) { List <IQueuedEvent> batchedEvents = new List <IQueuedEvent>(currentBatchableEvents.Count); batchedEvents.AddRange(currentBatchableEvents); return(batchedEvents); } else { return(currentEventBatcher.BatchEvents(currentBatchableEvents)); } }