/// <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)); }
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); }
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; } }