public EmbeddableDatabaseChanges(EmbeddableDocumentStore embeddableDocumentStore, Action onDispose) { this.onDispose = onDispose; Task = new CompletedTask <IDatabaseChanges>(this); indexesObservable = new EmbeddableObservableWithTask <IndexChangeNotification>(); documentsObservable = new EmbeddableObservableWithTask <DocumentChangeNotification>(); embeddableDocumentStore.DocumentDatabase.TransportState.OnIndexChangeNotification += (o, notification) => enqueuedActions.Add(() => indexesObservable.Notify(o, notification)); embeddableDocumentStore.DocumentDatabase.TransportState.OnDocumentChangeNotification += (o, notification) => enqueuedActions.Add(() => documentsObservable.Notify(o, notification)); enqueuedTask = System.Threading.Tasks.Task.Factory.StartNew(() => { while (true) { var action = enqueuedActions.Take(); if (action == null) { return; } action(); } }); }
public EmbeddableDatabaseChanges(EmbeddableDocumentStore embeddableDocumentStore, Action onDispose, Func <string, Etag, string[], bool> tryResolveConflictByUsingRegisteredConflictListeners) { this.onDispose = onDispose; this.tryResolveConflictByUsingRegisteredConflictListeners = tryResolveConflictByUsingRegisteredConflictListeners; Task = new CompletedTask <IDatabaseChanges>(this); indexesObservable = new EmbeddableObservableWithTask <IndexChangeNotification>(); documentsObservable = new EmbeddableObservableWithTask <DocumentChangeNotification>(); bulkInsertObservable = new EmbeddableObservableWithTask <BulkInsertChangeNotification>(); replicationConflictsObservable = new EmbeddableObservableWithTask <ReplicationConflictNotification>(); embeddableDocumentStore.DocumentDatabase.TransportState.OnIndexChangeNotification += (o, notification) => enqueuedActions.Add(() => indexesObservable.Notify(o, notification)); embeddableDocumentStore.DocumentDatabase.TransportState.OnDocumentChangeNotification += (o, notification) => enqueuedActions.Add(() => documentsObservable.Notify(o, notification)); embeddableDocumentStore.DocumentDatabase.TransportState.OnReplicationConflictNotification += (o, notification) => enqueuedActions.Add(() => replicationConflictsObservable.Notify(o, notification)); embeddableDocumentStore.DocumentDatabase.TransportState.OnReplicationConflictNotification += TryResolveConflict; embeddableDocumentStore.DocumentDatabase.TransportState.OnBulkInsertChangeNotification += (o, notification) => enqueuedActions.Add(() => { bulkInsertObservable.Notify(o, notification); documentsObservable.Notify(o, notification); }); enqueuedTask = System.Threading.Tasks.Task.Factory.StartNew(() => { while (true) { var action = enqueuedActions.Take(); if (action == null) { return; } action(); } }); }