Exemplo n.º 1
0
        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();
                }
            });
        }
Exemplo n.º 2
0
        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();
                }
            });
        }