Пример #1
0
        public void Subscribe(ICompletableObserver observer)
        {
            RequireNonNull(observer, nameof(observer));

            var completeSignals = new UnicastSubject <object>();
            var redo            = default(IObservable <U>);

            try
            {
                redo = RequireNonNullRef(handler(completeSignals), "The handler returned a null IObservable");
            }
            catch (Exception ex)
            {
                DisposableHelper.Error(observer, ex);
                return;
            }

            var parent = new MainObserver(observer, source, new SerializedObserver <object>(completeSignals));

            var d = redo.Subscribe(parent.handlerObserver);

            parent.handlerObserver.OnSubscribe(d);

            parent.HandlerNext();
        }
Пример #2
0
        public IDisposable Subscribe(IObserver <T> observer)
        {
            if (observer == null)
            {
                throw new ArgumentNullException(nameof(observer));
            }

            var errorSignals = new UnicastSubject <Exception>();
            var redo         = default(IObservable <U>);

            try
            {
                redo = handler(errorSignals);
                if (redo == null)
                {
                    throw new NullReferenceException("The handler returned a null IObservable");
                }
            }
            catch (Exception ex)
            {
                observer.OnError(ex);
                return(DisposableHelper.EMPTY);
            }

            var parent = new MainObserver(observer, source, new SerializedObserver <Exception>(errorSignals));

            var d = redo.Subscribe(parent.handlerObserver);

            parent.handlerObserver.OnSubscribe(d);

            parent.HandlerNext();

            return(parent);
        }
Пример #3
0
        public IDisposable Subscribe(IObserver <T> observer)
        {
            RequireNonNull(observer, nameof(observer));

            var errorSignals = new UnicastSubject <Exception>();
            var redo         = default(IObservable <U>);

            try
            {
                redo = RequireNonNullRef(handler(errorSignals), "The handler returned a null IObservable");
            }
            catch (Exception ex)
            {
                observer.OnError(ex);
                return(DisposableHelper.EMPTY);
            }

            var parent = new MainObserver(observer, source, new SerializedObserver <Exception>(errorSignals));

            var d = redo.Subscribe(parent.handlerObserver);

            parent.handlerObserver.OnSubscribe(d);

            parent.HandlerNext();

            return(parent);
        }
        public IDisposable Subscribe(IObserver <T> observer)
        {
            var terminalSignal = new UnicastSubject <object>();

            var redoSignal = default(IObservable <U>);

            try
            {
                redoSignal = RequireNonNullRef(handler(terminalSignal), "The handler returned a null IObservable");
            }
            catch (Exception ex)
            {
                observer.OnError(ex);
                return(DisposableHelper.EMPTY);
            }

            var parent = new RepeatWhenObserver(observer, source, ((IObserver <object>)terminalSignal).ToSerialized());

            parent.redoObserver.OnSubscribe(redoSignal.Subscribe(parent.redoObserver));

            parent.Next();

            return(parent);
        }
Пример #5
0
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var terminalSignal = new UnicastSubject <Exception>();

            var redoSignal = default(IObservable <U>);

            try
            {
                redoSignal = RequireNonNullRef(handler(terminalSignal), "The handler returned a null IObservable");
            }
            catch (Exception ex)
            {
                observer.Error(ex);
                return;
            }

            var parent = new RetryWhenObserver(observer, source, ((IObserver <Exception>)terminalSignal).ToSerialized());

            observer.OnSubscribe(parent);

            parent.redoObserver.OnSubscribe(redoSignal.Subscribe(parent.redoObserver));

            parent.Next();
        }
 public DisposeObserver(UnicastSubject <T> parent)
 {
     Volatile.Write(ref this.parent, parent);
 }