private async Task DequeueMessagesAsync()
        {
            while (!_stopTokenSource.IsCancellationRequested)
            {
                PushMessageEx pushmessage = await _messagesQueue.DequeueAsync(_stopTokenSource.Token);

                if (!_stopTokenSource.IsCancellationRequested)
                {
                    using (IServiceScope serviceScope = _serviceProvider.CreateScope())
                    {
                        IPushSubscriptionStore subscriptionStore = serviceScope.ServiceProvider.GetRequiredService <IPushSubscriptionStore>();

                        //await subscriptionStore.ForEachSubscriptionAsync((PushSubscription subscription) =>
                        //{
                        //    // Fire-and-forget
                        //    _notificationService.SendNotificationAsync(subscription, message, _stopTokenSource.Token);
                        //}, _stopTokenSource.Token);

                        await subscriptionStore.ForEachSubscriptionAsyncEx((SWSubscription sub) =>
                        {
                            PushSubscription subscription = new PushSubscription();
                            subscription.Endpoint         = sub.Endpoint;
                            subscription.SetKey(PushEncryptionKeyName.Auth, sub.Auth);
                            subscription.SetKey(PushEncryptionKeyName.P256DH, sub.P256DH);
                            // subscription.Keys
                            // Fire-and-forget
                            _notificationService.SendNotificationAsync(subscription, pushmessage.pushmessage, _stopTokenSource.Token);
                        }, _stopTokenSource.Token);
                    }
                }
            }
        }
Esempio n. 2
0
        public void Enqueue(PushMessageEx message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            _messages.Enqueue(message);

            _messageEnqueuedSignal.Release();
        }
        public IActionResult SendNotification([FromBody] PushMessageViewModel message)
        {
            PushMessageEx msg = new PushMessageEx();

            msg.pushmessage = new PushMessage(message.Notification)
            {
                Topic   = message.Topic,
                Urgency = message.Urgency
            };
            msg.MemberID = 1;// test

            _pushNotificationsQueue.Enqueue(msg);

            return(NoContent());
        }