// Token: 0x06001400 RID: 5120 RVA: 0x00073D14 File Offset: 0x00071F14 protected override void DrainNotifications(ConcurrentDictionary <Guid, PushNotificationContext> notificationContexts) { MailboxNotificationBatch mailboxNotificationBatch = new MailboxNotificationBatch(); foreach (Guid guid in notificationContexts.Keys) { if (base.CheckCancellation()) { return; } PushNotificationContext pushNotificationContext = notificationContexts[guid]; MailboxNotification notification = this.CreateMailboxNotification(guid, pushNotificationContext); mailboxNotificationBatch.Add(notification); NotificationTracker.ReportCreated(notification, pushNotificationContext.OriginalTime); PushNotificationHelper.LogNotificationBatchEntry(guid, notification); } if (!mailboxNotificationBatch.IsEmpty) { ExTraceGlobals.PushNotificationAssistantTracer.TraceDebug <int>((long)this.GetHashCode(), "PushNotificationBatchManager.DrainNotifications: Ready to send notification batch, size:'{0}'.", mailboxNotificationBatch.Count); if (base.CheckCancellation()) { return; } PushNotificationBatchManager.notificationsPerBatchCounter.AddSample((long)mailboxNotificationBatch.Count); this.SendPublishNotificationRequest(mailboxNotificationBatch); } notificationContexts.Clear(); }
// Token: 0x060013C4 RID: 5060 RVA: 0x00073304 File Offset: 0x00071504 public PushNotificationBatchManager TakeReference() { PushNotificationBatchManager batchManager; lock (this.syncroot) { this.referenceCounter++; if (this.BatchManager == null) { this.PublisherClient = new PublisherServiceProxy(null); this.BatchManager = new PushNotificationBatchManager(this.BatchConfig, this.PublisherClient); } if (this.ProxyWatcher == null && !this.AssistantConfig.IsAssistantPublishingEnabled) { this.ProxyWatcher = new PushNotificationProxyConfigWatcher(this.AssistantConfig); this.ProxyWatcher.Start(); } if (this.referenceCounter == 1) { PushNotificationHelper.LogAssistantPublishingStatus(this.AssistantConfig.IsPublishingEnabled); } batchManager = this.BatchManager; } return(batchManager); }
// Token: 0x060013F9 RID: 5113 RVA: 0x00073C50 File Offset: 0x00071E50 internal PushNotificationBatchManager(PushNotificationBatchManagerConfig assistantConfig, IPublisherServiceContract publisherClient) : base((assistantConfig != null) ? assistantConfig.BatchTimerInSeconds : 0U, (assistantConfig != null) ? assistantConfig.BatchSize : 0U) { ArgumentValidator.ThrowIfNull("assistantConfig", assistantConfig); ArgumentValidator.ThrowIfNull("publisherClient", publisherClient); this.configuration = assistantConfig; this.publisherClient = publisherClient; PushNotificationHelper.LogBatchManager(this.configuration); }
// Token: 0x060013B0 RID: 5040 RVA: 0x0007314C File Offset: 0x0007134C static PushNotificationAssistant() { RegistrySession registrySession = new RegistrySession(true); PushNotificationBatchManagerConfig pushNotificationBatchManagerConfig = registrySession.Read <PushNotificationBatchManagerConfig>(); PushNotificationHelper.CheckAndLogInvalidConfigurationSetting(pushNotificationBatchManagerConfig); PushNotificationAssistant.AssistantConfig = registrySession.Read <PushNotificationAssistantConfig>(); PushNotificationHelper.CheckAndLogInvalidConfigurationSetting(PushNotificationAssistant.AssistantConfig); PushNotificationAssistant.SharedResources = new PushNotificationAssistant.SharedResourcesGuard(pushNotificationBatchManagerConfig, PushNotificationAssistant.AssistantConfig); }
// Token: 0x060013B3 RID: 5043 RVA: 0x000731DC File Offset: 0x000713DC protected override void HandleEventInternal(MapiEvent mapiEvent, MailboxSession itemStore, StoreObject item, List <KeyValuePair <string, object> > customDataToLog) { try { this.assistantAdapter.HandleEvent(mapiEvent, itemStore, item); } catch (PushNotificationBaseException ex) { PushNotificationHelper.LogHandleEventError(ex, base.DatabaseInfo, mapiEvent); throw new SkipException(ex); } catch (Exception ex2) { PushNotificationHelper.LogHandleEventError(ex2, base.DatabaseInfo, mapiEvent); throw; } }
// Token: 0x06001402 RID: 5122 RVA: 0x00073EB8 File Offset: 0x000720B8 private MailboxNotification CreateMailboxNotification(Guid mailboxGuid, PushNotificationContext context) { MailboxNotificationPayload payload = new MailboxNotificationPayload(context.TenantId, context.UnseenEmailCount, context.BackgroundSyncType, null); List <MailboxNotificationRecipient> list = new List <MailboxNotificationRecipient>(context.Subscriptions.Count); foreach (PushNotificationServerSubscription pushNotificationServerSubscription in context.Subscriptions) { if (this.IsSubscriptionSuitable(pushNotificationServerSubscription)) { list.Add(new MailboxNotificationRecipient(pushNotificationServerSubscription.AppId, pushNotificationServerSubscription.DeviceNotificationId, pushNotificationServerSubscription.LastSubscriptionUpdate, pushNotificationServerSubscription.InstallationId)); } else { PushNotificationHelper.LogInvalidSubscription(mailboxGuid, pushNotificationServerSubscription); } } return(new MailboxNotification(payload, list)); }
// Token: 0x060013D6 RID: 5078 RVA: 0x000736A8 File Offset: 0x000718A8 private void HandleNotificationEvent(IMapiEvent mapiEvent, IMailboxSession session, IStoreObject item) { PushNotificationContext pushNotificationContext = new PushNotificationContext { OriginalTime = ExDateTime.UtcNow }; if (this.assistantCache.ShouldProcessUnseenEmailEvent(session, this.XSOFactory, mapiEvent) && this.PopulateSubscriptionsAndTenantId(mapiEvent, session, pushNotificationContext)) { if (this.assistantCache.IsBackgroundSyncEnabled(mapiEvent.MailboxGuid)) { pushNotificationContext.BackgroundSyncType = BackgroundSyncType.Email; } pushNotificationContext.UnseenEmailCount = new int?(this.ResolveUnseenEmailCount(mapiEvent, pushNotificationContext.Subscriptions)); PushNotificationHelper.LogMailboxNotificationResolution(mapiEvent.MailboxGuid, pushNotificationContext); this.NotificationBatchManager.Add(mapiEvent.MailboxGuid, pushNotificationContext); } }
// Token: 0x06001423 RID: 5155 RVA: 0x00074378 File Offset: 0x00072578 internal void OnStart(IDatabaseInfo databaseInfo) { IEnumerable <IMailboxInformation> mailboxTable = databaseInfo.GetMailboxTable(ClientType.EventBased, new PropertyTagPropertyDefinition[] { MailboxSchema.PushNotificationSubscriptionType }); foreach (IMailboxInformation mailboxInformation in mailboxTable) { object mailboxProperty = mailboxInformation.GetMailboxProperty(MailboxSchema.PushNotificationSubscriptionType); byte[] array = mailboxProperty as byte[]; if (!(mailboxProperty is PropertyError) && !PushNotificationSubscriptionTableEntry.IsSubscriptionDisabled(array)) { this.subscribedMailboxes[mailboxInformation.MailboxGuid] = array[0]; } } PushNotificationsAssistantPerfCounters.CurrentActiveUserSubscriptions.IncrementBy((long)this.subscribedMailboxes.Count); PushNotificationHelper.LogAssistantStartup(databaseInfo.DatabaseName, this.subscribedMailboxes.Count); }
// Token: 0x06001401 RID: 5121 RVA: 0x00073E68 File Offset: 0x00072068 private void SendPublishNotificationRequest(MailboxNotificationBatch batch) { AverageTimeCounter requestCounter = new AverageTimeCounter(PushNotificationsAssistantPerfCounters.AveragePublishingRequestProcessing, PushNotificationsAssistantPerfCounters.AveragePublishingRequestProcessingBase, true); this.publisherClient.BeginPublishNotifications(batch, delegate(IAsyncResult asyncResult) { object asyncState = asyncResult.AsyncState; try { this.publisherClient.EndPublishNotifications(asyncResult); PushNotificationsMonitoring.PublishSuccessNotification("SendPublishNotification", ""); } catch (Exception exception) { PushNotificationsAssistantPerfCounters.PublishingRequestErrors.Increment(); PushNotificationHelper.LogSendPublishNotificationException(exception, null); } finally { requestCounter.Stop(); } }, requestCounter); }
// Token: 0x060013D8 RID: 5080 RVA: 0x000737D4 File Offset: 0x000719D4 private List <PushNotificationServerSubscription> ResolveSubscriptions(IMailboxSession session, IPushNotificationStorage storage) { List <PushNotificationServerSubscription> list = storage.GetActiveNotificationSubscriptions(session, this.AssistantConfig.SubscriptionExpirationInHours); if (list == null || list.Count == 0) { PushNotificationsAssistantPerfCounters.TotalSubscriptionsExpiredCleanup.Increment(); PushNotificationsAssistantPerfCounters.CurrentActiveUserSubscriptions.Decrement(); PushNotificationHelper.LogSubscriptionExpired(session.MailboxGuid); this.assistantCache.RemoveSubscriptions(session.MailboxGuid); this.MailboxTable.DisableSubscriptionOnMailboxTable(session); storage.DeleteExpiredSubscriptions(this.AssistantConfig.SubscriptionExpirationInHours); list = null; } else { list = list.Distinct(PushNotificationAssistantAdapter.SubscriptionComparer.Default).ToList <PushNotificationServerSubscription>(); PushNotificationHelper.LogActiveSubscriptions(session.MailboxGuid, list); if (session.IsMailboxOof()) { List <PushNotificationServerSubscription> list2 = new List <PushNotificationServerSubscription>(); foreach (PushNotificationServerSubscription pushNotificationServerSubscription in list) { if ((pushNotificationServerSubscription.GetSubscriptionOption() & PushNotificationSubscriptionOption.SuppressNotificationsWhenOof) == PushNotificationSubscriptionOption.NoSubscription) { list2.Add(pushNotificationServerSubscription); } else { PushNotificationHelper.LogSuppressedNotifications(session.MailboxGuid, pushNotificationServerSubscription); } } list = list2; } } return(list); }
// Token: 0x060013D5 RID: 5077 RVA: 0x000735A0 File Offset: 0x000717A0 private void HandleSubscriptionChangeEvent(IMailboxSession session, IStoreObject item) { IPushNotificationSubscriptionItem pushNotificationSubscriptionItem = item as IPushNotificationSubscriptionItem; if (pushNotificationSubscriptionItem == null) { throw new InvalidStoreObjectInstanceException((item != null) ? item.GetType() : null); } try { PushNotificationServerSubscription pushNotificationServerSubscription = PushNotificationServerSubscription.FromJson(pushNotificationSubscriptionItem.SerializedNotificationSubscription); this.assistantCache.UpdateSubscriptionData(session.MailboxGuid, pushNotificationServerSubscription); if (pushNotificationServerSubscription.GetSubscriptionOption() == this.MailboxTable.ReadSubscriptionOnMailboxTable(session)) { ExTraceGlobals.PushNotificationAssistantTracer.TraceDebug <Guid>((long)this.GetHashCode(), "PushNotificationAssistantAdapter.HandleSubscriptionChangeEvent: Mailbox Header Table is up to date for {0}.", session.MailboxGuid); PushNotificationsAssistantPerfCounters.TotalSubscriptionsUpdated.Increment(); } else { this.MailboxTable.UpdateSubscriptionOnMailboxTable(session, pushNotificationServerSubscription); PushNotificationHelper.LogSubscriptionUpdated(pushNotificationSubscriptionItem, pushNotificationServerSubscription, session.MailboxGuid); PushNotificationsAssistantPerfCounters.TotalNewSubscriptionsCreated.Increment(); PushNotificationsAssistantPerfCounters.CurrentActiveUserSubscriptions.Increment(); } } catch (Exception ex) { Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_FailedToUpdateSubscriptionOnMailboxTable, ex.ToString(), new object[] { pushNotificationSubscriptionItem.SerializedNotificationSubscription, session.MailboxGuid, ex.ToTraceString() }); throw; } }
// Token: 0x060013FE RID: 5118 RVA: 0x00073CF1 File Offset: 0x00071EF1 protected override void ReportDrainNotificationsException(AggregateException error) { PushNotificationHelper.LogProcessNotificationBatchException(error); }