/// <inheritDoc/> public void Subscribe(ISubscriber <T> s) { PublishSubscription ps = new PublishSubscription(s, this); s.OnSubscribe(ps); if (subscribers.Add(ps)) { if (ps.IsCancelled()) { subscribers.Remove(ps); } else { Drain(); } } else { var ex = error; if (ex != null) { EmptySubscription <T> .Error(s, ex); } else { EmptySubscription <T> .Complete(s); } } }
public void Subscribe(ISubscriber <R> s) { IEnumerator <U> enumerator; bool hasValue; try { enumerator = other.GetEnumerator(); hasValue = enumerator.MoveNext(); } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <R> .Error(s, ex); return; } if (!hasValue) { EmptySubscription <R> .Complete(s); return; } var parent = new ZipEnumerableSubscriber(s, enumerator, zipper); source.Subscribe(parent); }
public void Subscribe(ISubscriber <T> s) { try { action(); } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <T> .Error(s, ex); return; } EmptySubscription <T> .Complete(s); }
public void Subscribe(ISubscriber <T> s) { IEnumerator <IPublisher <T> > enumerator; bool hasValue; try { enumerator = sources.GetEnumerator(); hasValue = enumerator.MoveNext(); } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <T> .Error(s, ex); return; } if (!hasValue) { EmptySubscription <T> .Complete(s); return; } if (s is IConditionalSubscriber <T> ) { ConcatConditionalSubscriber parent = new ConcatConditionalSubscriber((IConditionalSubscriber <T>)s, enumerator, delayError); s.OnSubscribe(parent); parent.Drain(); } else { ConcatSubscriber parent = new ConcatSubscriber(s, enumerator, delayError); s.OnSubscribe(parent); parent.Drain(); } }
public void Subscribe(ISubscriber <T> s) { int n; IPublisher <T>[] a; if (!MultiSourceHelper.ToArray(sources, sourcesEnumerable, s, out n, out a)) { return; } if (n == 0) { EmptySubscription <T> .Complete(s); return; } else if (n == 1) { a[0].Subscribe(s); return; } if (s is IConditionalSubscriber <T> ) { AmbConditionalSubscription parent = new AmbConditionalSubscription((IConditionalSubscriber <T>)s, n); s.OnSubscribe(parent); parent.Subscribe(a, n); } else { AmbSubscription parent = new AmbSubscription(s, n); s.OnSubscribe(parent); parent.Subscribe(a, n); } }
public void Subscribe(ISubscriber <R> s) { int n; IPublisher <T>[] a; if (!MultiSourceHelper.ToArray(sources, sourcesEnumerable, s, out n, out a)) { return; } if (n == 0) { EmptySubscription <R> .Complete(s); return; } else if (n == 1) { new PublisherMap <T, R>(a[0], v => combiner(new T[] { v })).Subscribe(s); return; } if (s is IConditionalSubscriber <R> ) { CombineLatestConditionalSubscription parent = new CombineLatestConditionalSubscription((IConditionalSubscriber <R>)s, prefetch, delayError, combiner, n); s.OnSubscribe(parent); parent.Subscribe(a, n); } else { CombineLatestSubscription parent = new CombineLatestSubscription(s, prefetch, delayError, combiner, n); s.OnSubscribe(parent); parent.Subscribe(a, n); } }
public void Subscribe(ISubscriber <T> s) { IEnumerator <T> enumerator; bool hasValue; try { enumerator = enumerable.GetEnumerator(); hasValue = enumerator.MoveNext(); } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <T> .Error(s, ex); return; } if (!hasValue) { EmptySubscription <T> .Complete(s); return; } if (s is IConditionalSubscriber <T> ) { s.OnSubscribe(new EnumerableConditionalSubscription((IConditionalSubscriber <T>)s, enumerator)); } else { s.OnSubscribe(new EnumerableSubscription(s, enumerator)); } }
public void Subscribe(ISubscriber <T> s) { EmptySubscription <T> .Complete(s); }
/// <summary> /// Applies shortcuts if the source is the empty instance or an ICallable. /// </summary> /// <param name="source">The source IPublisher.</param> /// <param name="s">The ISubscriber</param> /// <param name="mapper">The function that takes a source value and maps it into an IPublisher.</param> /// <returns>True if the optimizations were applied.</returns> internal static bool CallableXMap(IPublisher <T> source, ISubscriber <R> s, Func <T, IPublisher <R> > mapper) { if (source == PublisherEmpty <T> .Instance) { EmptySubscription <R> .Complete(s); return(true); } if (source is ICallable <T> ) { T t; try { t = (source as ICallable <T>).Value; } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <R> .Error(s, ex); return(true); } IPublisher <R> p; try { p = mapper(t); } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <R> .Error(s, ex); return(true); } if (p == null) { EmptySubscription <R> .Error(s, new NullReferenceException("The mapper returned a null IPublisher")); return(true); } if (p == PublisherEmpty <R> .Instance) { EmptySubscription <R> .Complete(s); return(true); } if (p is ICallable <R> ) { R r; try { r = (p as ICallable <R>).Value; } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); EmptySubscription <R> .Error(s, ex); return(true); } s.OnSubscribe(new ScalarSubscription <R>(s, r)); return(true); } p.Subscribe(s); return(true); } return(false); }