private static DateTime GetEventTime(MapiEventManager eventManager, long eventCounter) { MapiEvent[] array = eventManager.ReadEvents(eventCounter, 1); if (array != null && array.Length != 0) { return(array[0].CreateTime); } return(DateTime.UtcNow); }
internal IEnumerable <DatabaseEvent> ReadEvents(MapiSession mapiSession, Database database, long startCounter, Restriction restriction, bool includeMoveDestinationEvents, int resultSize) { if (mapiSession == null) { throw new ArgumentException("mapiSession"); } if (database == null) { throw new ArgumentException("database"); } int count = 0; long endCounter = (0L < startCounter) ? (startCounter - 1L) : 0L; MapiEvent[] events = null; DatabaseId databaseId = MapiTaskHelper.ConvertDatabaseADObjectToDatabaseId(database); MapiEventManager eventManager = MapiEventManager.Create(mapiSession.Administration, Guid.NewGuid(), databaseId.Guid); for (;;) { startCounter = endCounter + 1L; ReadEventsFlags flags = includeMoveDestinationEvents ? ReadEventsFlags.IncludeMoveDestinationEvents : ReadEventsFlags.None; mapiSession.InvokeWithWrappedException(delegate() { events = eventManager.ReadEvents(startCounter, (0 < resultSize) ? resultSize : 1000, 0, restriction, flags, out endCounter); }, Strings.ErrorCannotReadDatabaseEvents(databaseId.ToString()), databaseId); foreach (MapiEvent mapiEvent in events) { yield return(new DatabaseEvent(mapiEvent, databaseId, this.server, database.Server.ObjectGuid == this.server.Guid)); count++; if (0 < resultSize && count == resultSize) { goto Block_6; } } if (endCounter == startCounter) { goto Block_8; } } Block_6: yield break; Block_8: yield break; }
private static MapiEvent[] ReadEvents(MapiEventManager mapiEventManager, object mapiEventManagerLock, long startCounter, int eventCountWanted, int eventCountToCheck, Restriction restriction, out long endCounter) { long num = 0L; MapiEvent[] result = null; StoreSession storeSession = null; object thisObject = null; bool flag = false; try { if (storeSession != null) { storeSession.BeginMapiCall(); storeSession.BeginServerHealthCall(); flag = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } lock (mapiEventManagerLock) { result = mapiEventManager.ReadEvents(startCounter, eventCountWanted, eventCountToCheck, restriction, ReadEventsFlags.FailIfEventsDeleted, false, out num); } } catch (MapiPermanentException ex) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCaughtMapiExceptionWhileReadingEvents, ex, storeSession, thisObject, "{0}. MapiException = {1}.", new object[] { string.Format("EventPump::ReadEvents. Caught MapiException while reading events.", new object[0]), ex }); } catch (MapiRetryableException ex2) { throw StorageGlobals.TranslateMapiException(ServerStrings.ExCaughtMapiExceptionWhileReadingEvents, ex2, storeSession, thisObject, "{0}. MapiException = {1}.", new object[] { string.Format("EventPump::ReadEvents. Caught MapiException while reading events.", new object[0]), ex2 }); } finally { try { if (storeSession != null) { storeSession.EndMapiCall(); if (flag) { storeSession.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } endCounter = num; return(result); }