Exemple #1
0
            public void Subscribe(ISubscriber <T> subscriber)
            {
                ReactiveStreamsCompliance.RequireNonNullSubscriber(subscriber);
                SubscriptionTimeout.Cancel();

                if (_state.CompareAndSet(Open.Instance, new Attached(subscriber)))
                {
                    Actor.Tell(new SubstreamSubscribe(Key, subscriber));
                }
                else
                {
                    var value = _state.Value;
                    if (value is Attached || value is Cancelled)
                    {
                        ReactiveStreamsCompliance.RejectAdditionalSubscriber(subscriber, "Substream publisher");
                    }
                    else if (value is ICompletedState)
                    {
                        ReactiveStreamsCompliance.TryOnSubscribe(subscriber, CancelledSubscription.Instance);
                        CloseSubscriber(subscriber, (ICompletedState)value);
                    }
                    else if (value is Open)
                    {
                        throw new IllegalStateException("Publisher cannot become open after being used before");
                    }
                }
            }
 /// <summary>
 /// TBD
 /// </summary>
 /// <param name="subscriber">TBD</param>
 public void Subscribe(ISubscriber <T> subscriber)
 {
     ReactiveStreamsCompliance.RequireNonNullSubscriber(subscriber);
     ReactiveStreamsCompliance.TryOnSubscribe(subscriber, new MaybeSubscription(subscriber, Promise));
     Promise.Task.ContinueWith(t =>
     {
         ReactiveStreamsCompliance.TryOnError(subscriber, t.Exception);
     }, TaskContinuationOptions.NotOnRanToCompletion);
 }
Exemple #3
0
 public void AttachSubscriber(ISubscriber <T> subscriber)
 {
     if (Subscriber == null)
     {
         Subscriber = UntypedSubscriber.FromTyped(subscriber);
         ReactiveStreamsCompliance.TryOnSubscribe(subscriber, _subscription);
     }
     else
     {
         ReactiveStreamsCompliance.RejectAdditionalSubscriber(subscriber, "Substream publisher");
     }
 }
Exemple #4
0
 private void SubscribePending(IEnumerable <IUntypedSubscriber> subscribers)
 {
     foreach (var subscriber in subscribers)
     {
         if (ReferenceEquals(Subscriber, null))
         {
             Subscriber = subscriber;
             ReactiveStreamsCompliance.TryOnSubscribe(subscriber, CreateSubscription());
         }
         else
         {
             ReactiveStreamsCompliance.RejectAdditionalSubscriber(subscriber, GetType().Name);
         }
     }
 }
 /// <summary>
 /// TBD
 /// </summary>
 /// <param name="subscriber">TBD</param>
 public void Subscribe(ISubscriber <T> subscriber)
 {
     try
     {
         ReactiveStreamsCompliance.RequireNonNullSubscriber(subscriber);
         ReactiveStreamsCompliance.TryOnSubscribe(subscriber, CancelledSubscription.Instance);
         ReactiveStreamsCompliance.TryOnError(subscriber, Cause);
     }
     catch (Exception e)
     {
         if (!(e is ISpecViolation))
         {
             throw;
         }
     }
 }
 public void Subscribe(ISubscriber <T> subscriber)
 {
     try
     {
         ReactiveStreamsCompliance.RequireNonNullSubscriber(subscriber);
         ReactiveStreamsCompliance.TryOnSubscribe(subscriber, new MaybeSubscription(subscriber, Promise));
         Promise.Task.ContinueWith(t =>
         {
             ReactiveStreamsCompliance.TryOnError(subscriber, t.Exception);
         }, TaskContinuationOptions.NotOnRanToCompletion);
     }
     catch (Exception)
     {
         //case sv: SpecViolation ⇒ ec.reportFailure(sv)
         throw;
     }
 }
Exemple #7
0
            private void ClosePublisher(ICompletedState withState)
            {
                SubscriptionTimeout.Cancel();
                var prev = _state.Value;

                _state.Value = withState;

                if (prev is ICompletedState)
                {
                    throw new IllegalStateException("Attempted to double shutdown publisher");
                }

                if (prev is Attached)
                {
                    var sub = ((Attached)prev).Subscriber;
                    if (Subscriber == null)
                    {
                        ReactiveStreamsCompliance.TryOnSubscribe(sub, CancelledSubscription.Instance);
                    }
                    CloseSubscriber(sub, withState);
                }
            }