private IDisposable InitializeStreamingSubscription(IObserver <FirebaseEvent <T> > observer) { var completeDisposable = Disposable.Create(() => this.isSyncRunning = false); switch (this.streamingOptions) { case StreamingOptions.LatestOnly: // stream since the latest key var queryLatest = this.childQuery.OrderByKey().StartAt(() => this.GetLatestKey()); this.firebaseSubscription = new FirebaseSubscription <T>(observer, queryLatest, this.elementRoot, this.firebaseCache); this.firebaseSubscription.ExceptionThrown += this.StreamingExceptionThrown; return(new CompositeDisposable(this.firebaseSubscription.Run(), completeDisposable)); case StreamingOptions.Everything: // stream everything var queryAll = this.childQuery; this.firebaseSubscription = new FirebaseSubscription <T>(observer, queryAll, this.elementRoot, this.firebaseCache); this.firebaseSubscription.ExceptionThrown += this.StreamingExceptionThrown; return(new CompositeDisposable(this.firebaseSubscription.Run(), completeDisposable)); default: break; } return(completeDisposable); }
/// <summary> /// Starts observing this query watching for changes real time sent by the server. /// </summary> /// <typeparam name="T"> Type of elements. </typeparam> /// <param name="elementRoot"> Optional custom root element of received json items. </param> /// <returns> Observable stream of <see cref="FirebaseEvent{T}"/>. </returns> public IObservable <FirebaseEvent <T> > AsObservable <T>(EventHandler <ExceptionEventArgs <FirebaseException> > exceptionHandler = null, string elementRoot = "") { return(Observable.Create <FirebaseEvent <T> >(observer => { var sub = new FirebaseSubscription <T>(observer, this, elementRoot, new FirebaseCache <T>()); sub.ExceptionThrown += exceptionHandler; return sub.Run(); })); }
private IDisposable InitializeStreamingSubscription(IObserver <FirebaseEvent <T> > observer) { if (this.streamChanges) { var query = this.childQuery.OrderByKey().StartAt(() => this.GetLatestKey()); var sub = new FirebaseSubscription <T>(observer, query, this.elementRoot, this.firebaseCache); sub.ExceptionThrown += this.StreamingExceptionThrown; return(sub.Run()); } return(Observable.Never <string>().Subscribe()); }
private IDisposable InitializeStreamingSubscription(IObserver <FirebaseEvent <T> > observer) { var completeDisposable = Disposable.Create(() => this.isSyncRunning = false); if (this.streamChanges) { var query = this.childQuery.OrderByKey().StartAt(() => this.GetLatestKey()); var sub = new FirebaseSubscription <T>(observer, query, this.elementRoot, this.firebaseCache); sub.ExceptionThrown += this.StreamingExceptionThrown; return(new CompositeDisposable(sub.Run(), completeDisposable)); } return(completeDisposable); }