protected override void BrokerInstOnOnNotificationFailed(GcmNotification notification,
                                                          AggregateException exception)
 {
     base.BrokerInstOnOnNotificationFailed(notification, exception);
     exception.Handle(ex =>
     {
         if (ex is GcmNotificationException)
         {
             int count;
             if (WorkingQueue.TryGetValue(notification, out count) && count < TriesCount)
             {
                 RetryQueue(notification);
             }
             else
             {
                 Logger.NotificationFailed(notification, exception);
             }
         }
         else if (ex is GcmMulticastResultException)
         {
             RemoveNotification(notification);
             Logger.NotificationFailed(notification, exception);
         }
         else if (ex is DeviceSubscriptionExpiredException)
         {
             //TODO: Add notification expired logic
             var exc = ex as DeviceSubscriptionExpiredException;
             if (exc.NewSubscriptionId != null)
             {
                 notification.RegistrationIds.Remove(exc.OldSubscriptionId);
                 notification.RegistrationIds.Add(exc.NewSubscriptionId);
                 RetryQueue(notification);
             }
             else
             {
                 Logger.NotificationFailed(notification, exception);
             }
             TokenExperation.AddExpiredToken(exc.OldSubscriptionId, exc.NewSubscriptionId);
         }
         else if (ex is RetryAfterException)
         {
             RemoveNotification(notification);
             Logger.NotificationFailed(notification, exception);
         }
         else
         {
             int count;
             if (WorkingQueue.TryGetValue(notification, out count) && count < TriesCount)
             {
                 RetryQueue(notification);
             }
             else
             {
                 Logger.NotificationFailed(notification, exception);
             }
         }
         return(true);
     });
 }
 protected override void BrokerInstOnOnNotificationFailed(ApnsNotification notification,
                                                          AggregateException exception)
 {
     base.BrokerInstOnOnNotificationFailed(notification, exception);
     exception.Handle(ex =>
     {
         if (ex is ApnsNotificationException)
         {
             int count;
             if (WorkingQueue.TryGetValue(notification, out count) && count < TriesCount)
             {
                 RetryQueue(notification);
             }
             else
             {
                 TokenExperation.AddExpiredToken(notification.DeviceToken, null);
                 Logger.NotificationFailed(notification, ex);
             }
         }
         return(true);
     });
 }