Beispiel #1
0
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var bd = new BooleanDisposable();

            observer.OnSubscribe(bd);

            if (bd.IsDisposed())
            {
                return;
            }

            try
            {
                action();
            }
            catch (Exception ex)
            {
                if (!bd.IsDisposed())
                {
                    observer.OnError(ex);
                }
                return;
            }

            if (!bd.IsDisposed())
            {
                observer.OnCompleted();
            }
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new RetryObserver(observer, source, times);

            observer.OnSubscribe(parent);
            parent.Next();
        }
        public void Subscribe(IMaybeObserver <R> observer)
        {
            var srcs = sources;
            var n    = srcs.Length;

            MaybeZipCoordinator <T, R> .Run(srcs, n, observer, mapper, delayErrors);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new DelaySubscriptionObserver(observer, source);

            observer.OnSubscribe(parent);
            other.Subscribe(parent);
        }
        public void Subscribe(IMaybeObserver <R> observer)
        {
            var n    = 0;
            var srcs = sources;

            var a = new IMaybeSource <T> [8];

            try
            {
                foreach (var m in srcs)
                {
                    if (n == a.Length)
                    {
                        var b = new IMaybeSource <T> [n + (n >> 2)];
                        Array.Copy(a, 0, b, 0, n);
                        a = b;
                    }
                    a[n++] = m;
                }
            }
            catch (Exception ex)
            {
                DisposableHelper.Error(observer, ex);
                return;
            }

            MaybeZipCoordinator <T, R> .Run(a, n, observer, mapper, delayErrors);
        }
 public UsingObserver(IMaybeObserver <T> downstream, S resource, Action <S> resourceCleanup, bool eagerCleanup)
 {
     this.downstream      = downstream;
     this.eagerCleanup    = eagerCleanup;
     this.resource        = resource;
     this.resourceCleanup = resourceCleanup;
 }
Beispiel #7
0
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var srcs = sources;
            var n    = srcs.Length;

            MaybeAmbCoordinator <T> .Run(observer, n, srcs);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var d = new BooleanDisposable();

            observer.OnSubscribe(d);

            if (d.IsDisposed())
            {
                return;
            }

            var v = default(T);

            try
            {
                v = func();
            }
            catch (Exception ex)
            {
                if (!d.IsDisposed())
                {
                    observer.OnError(ex);
                }
                return;
            }

            if (!d.IsDisposed())
            {
                observer.OnSuccess(v);
            }
        }
        public void Subscribe(IMaybeObserver <long> observer)
        {
            var sad = new SingleAssignmentDisposable();

            observer.OnSubscribe(sad);

            sad.Disposable = scheduler.Schedule(observer, time, COMPLETE);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new TimeoutObserver(observer, fallback);

            observer.OnSubscribe(parent);
            parent.SetTask(scheduler.Schedule(parent, timeout, RUN));
            source.Subscribe(parent);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new SwitchIfEmptyObserver(observer, fallback);

            observer.OnSubscribe(parent);

            parent.Drain(source);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new ElementAtObserver(observer, index);

            observer.OnSubscribe(parent);

            parent.OnSubscribe(source.Subscribe(parent));
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new TaskDisposable(observer);

            observer.OnSubscribe(parent);

            task.ContinueWith(TASK, parent);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new SingleElementObserver(observer);

            observer.OnSubscribe(parent);

            parent.OnSubscribe(source.Subscribe(parent));
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new DelaySubscriptionObserver(observer, source);

            observer.OnSubscribe(parent);

            parent.SetTask(scheduler.Schedule(parent, delay, RUN));
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new SubscribeOnObserver(observer, source);

            observer.OnSubscribe(parent);
            var d = scheduler.Schedule(parent, RUN);

            parent.SetTask(d);
        }
            public void OnSuccess(T item)
            {
                var d = downstream;

                downstream = null;
                upstream   = null;

                d?.OnSuccess(item);
            }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new CacheDisposable(observer, this);

            observer.OnSubscribe(parent);

            if (Add(parent))
            {
                if (parent.IsDisposed())
                {
                    Remove(parent);
                }
            }
            else
            {
                if (!parent.IsDisposed())
                {
                    var ex = error;
                    if (ex != null)
                    {
                        observer.OnError(ex);
                    }
                    else
                    {
                        if (hasValue)
                        {
                            observer.OnSuccess(value);
                        }
                        else
                        {
                            observer.OnCompleted();
                        }
                    }
                }
                return;
            }

            var src = Volatile.Read(ref source);

            if (src != null && Interlocked.CompareExchange(ref source, null, src) == src)
            {
                var c = cancel;
                cancel = null;

                try
                {
                    c?.Invoke(this);
                }
                catch (Exception ex)
                {
                    OnError(ex);
                    return;
                }

                src.Subscribe(this);
            }
        }
            public void OnCompleted()
            {
                var d = downstream;

                downstream = null;
                upstream   = null;

                d?.OnCompleted();
            }
Beispiel #20
0
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new TakeUntilObserver(observer);

            observer.OnSubscribe(parent);

            other.Subscribe(parent.other);
            source.Subscribe(parent);
        }
            public void OnError(Exception error)
            {
                var d = downstream;

                downstream = null;
                upstream   = null;

                d?.OnError(error);
            }
Beispiel #22
0
        public MaybeAmbCoordinator(IMaybeObserver <T> downstream, int n)
        {
            this.downstream = downstream;
            var o = new InnerObserver[n];

            for (int i = 0; i < n; i++)
            {
                o[i] = new InnerObserver(this, i);
            }
            this.observers = o;
            Volatile.Write(ref winner, -1);
        }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var resource = default(S);

            try
            {
                resource = resourceSupplier();
            }
            catch (Exception ex)
            {
                DisposableHelper.Error(observer, ex);
                return;
            }

            var c = default(IMaybeSource <T>);

            try
            {
                c = RequireNonNullRef(sourceSelector(resource), "The sourceSelector returned an null IMaybeSource");
            }
            catch (Exception ex)
            {
                if (eagerCleanup)
                {
                    try
                    {
                        resourceCleanup(resource);
                    }
                    catch (Exception exc)
                    {
                        ex = new AggregateException(ex, exc);
                    }

                    DisposableHelper.Error(observer, ex);
                }
                else
                {
                    DisposableHelper.Error(observer, ex);
                    try
                    {
                        resourceCleanup(resource);
                    }
                    catch (Exception)
                    {
                        // TODO where could this go???
                    }
                }
                return;
            }

            c.Subscribe(new UsingObserver(observer, resource, resourceCleanup, eagerCleanup));
        }
Beispiel #24
0
 public void Subscribe(IMaybeObserver <T> observer)
 {
     source.Subscribe(new PeekObserver(observer,
                                       onSuccess,
                                       onAfterSuccess,
                                       onError,
                                       onCompleted,
                                       onSubscribe,
                                       onTerminate,
                                       onAfterTerminate,
                                       onDispose,
                                       doFinally));
 }
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var parent = new CreateDisposableEmitter(observer);

            observer.OnSubscribe(parent);
            try
            {
                onSubscribe(parent);
            }
            catch (Exception ex)
            {
                parent.OnError(ex);
            }
        }
        internal MaybeZipCoordinator(IMaybeObserver <R> downstream, int n, Func <T[], R> mapper, bool delayErrors)
        {
            this.downstream = downstream;
            var o = new InnerObserver[n];

            for (int i = 0; i < n; i++)
            {
                o[i] = new InnerObserver(this, i);
            }

            this.observers   = o;
            this.mapper      = mapper;
            this.values      = new T[n];
            this.delayErrors = delayErrors;
            Volatile.Write(ref ready, n);
        }
Beispiel #27
0
        public void Subscribe(IMaybeObserver <T> observer)
        {
            var c = default(IMaybeSource <T>);

            try
            {
                c = ValidationHelper.RequireNonNullRef(supplier(), "The supplier returned a null IMaybeSource");
            }
            catch (Exception ex)
            {
                DisposableHelper.Error(observer, ex);
                return;
            }

            c.Subscribe(observer);
        }
Beispiel #28
0
        internal static void Run(IMaybeObserver <T> observer, int n, IMaybeSource <T>[] sources)
        {
            if (n == 0)
            {
                DisposableHelper.Complete(observer);
                return;
            }

            if (n == 1)
            {
                sources[0].Subscribe(observer);
                return;
            }

            var parent = new MaybeAmbCoordinator <T>(observer, n);

            observer.OnSubscribe(parent);

            parent.Subscribe(sources, n);
        }
        internal static void Run(IMaybeSource <T>[] srcs, int n, IMaybeObserver <R> observer, Func <T[], R> mapper, bool delayErrors)
        {
            if (n == 0)
            {
                DisposableHelper.Complete(observer);
                return;
            }

            if (n == 1)
            {
                new MaybeMap <T, R>(srcs[0],
                                    v => mapper(new T[] { v })
                                    ).Subscribe(observer);
                return;
            }

            var parent = new MaybeZipCoordinator <T, R>(observer, n, mapper, delayErrors);

            observer.OnSubscribe(parent);

            parent.Subscribe(srcs, n);
        }
Beispiel #30
0
 public PeekObserver(
     IMaybeObserver <T> downstream,
     Action <T> onSuccess,
     Action <T> onAfterSuccess,
     Action <Exception> onError,
     Action onCompleted,
     Action <IDisposable> onSubscribe,
     Action onTerminate,
     Action onAfterTerminate,
     Action onDispose,
     Action doFinally)
 {
     this.downstream       = downstream;
     this.onSuccess        = onSuccess;
     this.onAfterSuccess   = onAfterSuccess;
     this.onError          = onError;
     this.onCompleted      = onCompleted;
     this.onSubscribe      = onSubscribe;
     this.onTerminate      = onTerminate;
     this.onAfterTerminate = onAfterTerminate;
     this.onDispose        = onDispose;
     this.doFinally        = doFinally;
 }