private async Task HandlePushMessageDeliveryException(Exception exception, PushSubscription subscription) { PushServiceClientException pushServiceClientException = exception as PushServiceClientException; if (pushServiceClientException is null) { _logger?.LogError(exception, "Failed requesting push message delivery to {0}.", subscription.Endpoint); } else { if (pushServiceClientException.StatusCode == HttpStatusCode.NotFound || pushServiceClientException.StatusCode == HttpStatusCode.Gone) { using (IPushSubscriptionStoreAccessor subscriptionStoreAccessor = _subscriptionStoreAccessorProvider.GetPushSubscriptionStoreAccessor()) { await subscriptionStoreAccessor.PushSubscriptionStore.DiscardSubscriptionAsync(subscription.Endpoint); } _logger?.LogInformation("Subscription has expired or is no longer valid and has been removed."); } } }
private async Task DequeueMessagesAsync() { while (!_stopTokenSource.IsCancellationRequested) { PushMessage message = await _messagesQueue.DequeueAsync(_stopTokenSource.Token); if (!_stopTokenSource.IsCancellationRequested) { using (IPushSubscriptionStoreAccessor subscriptionStoreAccessor = _subscriptionStoreAccessorProvider.GetPushSubscriptionStoreAccessor()) { await subscriptionStoreAccessor.PushSubscriptionStore.ForEachSubscriptionAsync((PushSubscription subscription) => { // Fire-and-forget _notificationService.SendNotificationAsync(subscription, message, _stopTokenSource.Token); }, _stopTokenSource.Token); } } } }
private async Task DequeueMessagesAsync() { while (!_stopTokenSource.IsCancellationRequested) { PushMessage message = await _messagesQueue.DequeueAsync(_stopTokenSource.Token); if (!_stopTokenSource.IsCancellationRequested) { using (IPushSubscriptionStoreAccessor subscriptionStoreAccessor = _subscriptionStoreAccessorProvider.GetPushSubscriptionStoreAccessor()) { await subscriptionStoreAccessor.PushSubscriptionStore.ForEachSubscriptionAsync((PushSubscription subscription) => { Console.WriteLine("Sending to subscription right about now: " + subscription.Endpoint); Task.Delay(1000).Wait(); // Fire-and-forget _notificationService.SendNotificationAsync(subscription, message, _stopTokenSource.Token); }, _stopTokenSource.Token); } } } }