public static string GetSerializedNotificationSubscription(IMailboxSession mailboxSession, IStorePropertyBag propertyBag, IXSOFactory xsoFactory) { string valueOrDefault = propertyBag.GetValueOrDefault <string>(PushNotificationSubscriptionItemSchema.SerializedNotificationSubscription, null); if (string.IsNullOrWhiteSpace(valueOrDefault)) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceError(0L, "PushNotificationStorage.GetSerializedNotificationSubscription: A subscription with an empty serialized value was returned by the Enumerator."); throw new CannotResolvePropertyException(PushNotificationSubscriptionItemSchema.SerializedNotificationSubscription.Name); } if (valueOrDefault.Length < 255) { return(valueOrDefault); } ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceDebug(0L, "PushNotificationStorage.GetSerializedNotificationSubscription: We need to bind to the item in order to obtain the full serialized notification subscription."); VersionedId valueOrDefault2 = propertyBag.GetValueOrDefault <VersionedId>(ItemSchema.Id, null); string result; using (IPushNotificationSubscriptionItem pushNotificationSubscriptionItem = xsoFactory.BindToPushNotificationSubscriptionItem(mailboxSession, valueOrDefault2, new PropertyDefinition[] { PushNotificationSubscriptionItemSchema.SerializedNotificationSubscription })) { string serializedNotificationSubscription = pushNotificationSubscriptionItem.SerializedNotificationSubscription; if (string.IsNullOrWhiteSpace(serializedNotificationSubscription)) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceError <VersionedId, string>(0L, "PushNotificationStorage.GetFullSerializedNotificationSubscription: Unable to obtain the full SerializedNotificationSubscription from {0}, partial value: {1}", valueOrDefault2, valueOrDefault); throw new CannotResolvePropertyException(PushNotificationSubscriptionItemSchema.SerializedNotificationSubscription.Name); } result = serializedNotificationSubscription; } return(result); }
private static IPushNotificationSubscriptionItem Create(IMailboxSession session, IXSOFactory xsoFactory, StoreId locationFolderId, string subscriptionId, PushNotificationServerSubscription subscription) { IPushNotificationSubscriptionItem pushNotificationSubscriptionItem = null; try { pushNotificationSubscriptionItem = xsoFactory.CreatePushNotificationSubscriptionItem(session, locationFolderId); subscription.LastSubscriptionUpdate = (DateTime)pushNotificationSubscriptionItem.LastUpdateTimeUTC; pushNotificationSubscriptionItem.SubscriptionId = subscriptionId; pushNotificationSubscriptionItem.SerializedNotificationSubscription = subscription.ToJson(); if (ExTraceGlobals.StorageNotificationSubscriptionTracer.IsTraceEnabled(TraceType.DebugTrace)) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceDebug <string, ExDateTime, string>((long)subscription.GetHashCode(), "PushNotificationSubscriptionItem.Create: Created SubscriptionItem on store, Id:{0}, RefTm:{1}, Json:{2}", pushNotificationSubscriptionItem.SubscriptionId, pushNotificationSubscriptionItem.LastUpdateTimeUTC, pushNotificationSubscriptionItem.SerializedNotificationSubscription); } ConflictResolutionResult conflictResolutionResult = pushNotificationSubscriptionItem.Save(SaveMode.FailOnAnyConflict); if (conflictResolutionResult.SaveStatus == SaveResult.IrresolvableConflict) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceError <string>((long)pushNotificationSubscriptionItem.GetHashCode(), "PushNotificationSubscriptionItem.Create: Save failed due to conflicts for subscription {0}.", subscriptionId); throw new SaveConflictException(ServerStrings.ExSaveFailedBecauseOfConflicts(pushNotificationSubscriptionItem.SubscriptionId)); } pushNotificationSubscriptionItem.Load(SubscriptionItemEnumeratorBase.PushNotificationSubscriptionItemProperties); } catch { if (pushNotificationSubscriptionItem != null) { pushNotificationSubscriptionItem.Dispose(); } throw; } return(pushNotificationSubscriptionItem); }
public static IPushNotificationSubscriptionItem CreateOrUpdateSubscription(IMailboxSession session, IXSOFactory xsoFactory, IFolder folder, string subscriptionId, PushNotificationServerSubscription subscription) { Util.ThrowOnNullArgument(session, "session"); Util.ThrowOnNullArgument(xsoFactory, "xsoFactory"); Util.ThrowOnNullArgument(folder, "folder"); Util.ThrowOnNullOrEmptyArgument(subscriptionId, "subscriptionId"); Util.ThrowOnNullArgument(subscription, "subscription"); ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceDebug <string, IExchangePrincipal>((long)subscription.GetHashCode(), "PushNotificationSubscriptionItem.CreateOrUpdateSubscription: Searching for Subscription {0} on Mailbox {1}.", subscriptionId, session.MailboxOwner); IStorePropertyBag[] array = PushNotificationSubscriptionItem.GetSubscriptionById(folder, subscriptionId).ToArray <IStorePropertyBag>(); IPushNotificationSubscriptionItem pushNotificationSubscriptionItem = null; try { if (array.Length >= 1) { if (array.Length > 1) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceWarning <string, Guid>(0L, "PushNotificationSubscriptionItem.CreateOrUpdateSubscription: AmbiguousSubscription for subscription {0} and user {1}", subscriptionId, session.MailboxGuid); } IStorePropertyBag storePropertyBag = array[0]; VersionedId valueOrDefault = storePropertyBag.GetValueOrDefault <VersionedId>(ItemSchema.Id, null); if (valueOrDefault == null) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceError <string>((long)storePropertyBag.GetHashCode(), "PushNotificationSubscriptionItem.CreateOrUpdateSubscription: Cannot resolve the ItemSchema.Id property from the Enumerable.", subscriptionId); throw new CannotResolvePropertyException(ItemSchema.Id.Name); } ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceDebug <VersionedId>((long)storePropertyBag.GetHashCode(), "PushNotificationSubscriptionItem.CreateOrUpdateSubscription: Found one existing subscription with ItemSchema.Id = {0}.", valueOrDefault); pushNotificationSubscriptionItem = xsoFactory.BindToPushNotificationSubscriptionItem(session, valueOrDefault, null); pushNotificationSubscriptionItem.LastUpdateTimeUTC = ExDateTime.UtcNow; subscription.LastSubscriptionUpdate = (DateTime)pushNotificationSubscriptionItem.LastUpdateTimeUTC; pushNotificationSubscriptionItem.SerializedNotificationSubscription = subscription.ToJson(); ConflictResolutionResult conflictResolutionResult = pushNotificationSubscriptionItem.Save(SaveMode.ResolveConflicts); if (conflictResolutionResult.SaveStatus == SaveResult.IrresolvableConflict) { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceError <string>((long)storePropertyBag.GetHashCode(), "PushNotificationSubscriptionItem.CreateOrUpdateSubscription: Save failed due to conflicts for subscription {0}.", subscriptionId); throw new SaveConflictException(ServerStrings.ExSaveFailedBecauseOfConflicts(subscriptionId)); } pushNotificationSubscriptionItem.Load(SubscriptionItemEnumeratorBase.PushNotificationSubscriptionItemProperties); } else { ExTraceGlobals.StorageNotificationSubscriptionTracer.TraceDebug((long)subscription.GetHashCode(), "PushNotificationSubscriptionItem.CreateOrUpdateSubscription: Cannot resolve given subscription, about to create a new SubscriptionItem."); pushNotificationSubscriptionItem = PushNotificationSubscriptionItem.Create(session, xsoFactory, folder.StoreObjectId, subscriptionId, subscription); } } catch { if (pushNotificationSubscriptionItem != null) { pushNotificationSubscriptionItem.Dispose(); } throw; } return(pushNotificationSubscriptionItem); }
// 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: 0x06001435 RID: 5173 RVA: 0x00074A68 File Offset: 0x00072C68 internal static void LogSubscriptionUpdated(IPushNotificationSubscriptionItem subscription, PushNotificationServerSubscription subscriptionContract, Guid mailboxGuid) { PushNotificationsCrimsonEvents.SubscriptionCreated.Log <string, string, Guid, string>(subscription.SubscriptionId, subscriptionContract.AppId, mailboxGuid, subscription.SerializedNotificationSubscription); ExTraceGlobals.PushNotificationAssistantTracer.TraceDebug <Guid, byte>(0L, "Mailbox Header Table updated for {0} with new Subscription type {1}.", mailboxGuid, (byte)subscriptionContract.GetSubscriptionOption()); }