Ejemplo n.º 1
0
        /// <summary>
        /// Notify one subscription
        /// </summary>
        public void Notify <T>(DocumentSubscription <T> documentSubscription) where T : class
        {
            if (_database is null)
            {
                throw new InvalidOperationException("notification service is not initialized");
            }

            var nextValue = _database.GetCollection <T>(documentSubscription.Collection).FindById(documentSubscription.Id);

            Task.Run(() => documentSubscription.Observer?.OnNext(nextValue));
        }
Ejemplo n.º 2
0
        public void Unsubscribe_From_DB_When_Disposing()
        {
            var subscriptions = new SubscriptionDict();
            var sub1          = new DocumentSubscription <Model>(_db.NotificationService);
            var sub2          = new CollectionSubscription <Model>(_db.NotificationService);

            subscriptions.TryAdd(sub1, default);
            subscriptions.TryAdd(sub2, default);
            subscriptions.Keys.Should().HaveCount(2);
            subscriptions.Keys.Should().Contain(sub1);
            subscriptions.Keys.Should().Contain(sub2);

            using (var unsubscriber = new Unsubscriber(subscriptions, sub1))
            { }

            subscriptions.Keys.Should().HaveCount(1);
            subscriptions.Keys.Should().Contain(sub2);
        }
Ejemplo n.º 3
0
        internal void NotifyIfNeeded <T>(DocumentSubscription <T> documentSubscription, NotificationCache cache) where T : class
        {
            if (cache.Broadcasts.Contains(documentSubscription.Collection))
            {
                Notify(documentSubscription);
                return;
            }

            if (documentSubscription.Id is null)
            {
                return;
            }

            if (cache.Documents.Contains((documentSubscription.Collection, documentSubscription.Id)))
            {
                Notify(documentSubscription);
                return;
            }
        }