Ejemplo n.º 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");
                    }
                }
            }
Ejemplo n.º 2
0
 public void AttachSubscriber(ISubscriber <T> subscriber)
 {
     if (Subscriber == null)
     {
         Subscriber = UntypedSubscriber.FromTyped(subscriber);
         ReactiveStreamsCompliance.TryOnSubscribe(subscriber, _subscription);
     }
     else
     {
         ReactiveStreamsCompliance.RejectAdditionalSubscriber(subscriber, "Substream publisher");
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// TBD
 /// </summary>
 /// <param name="subscriber">TBD</param>
 public void Subscribe(ISubscriber <T> subscriber)
 {
     try
     {
         ReactiveStreamsCompliance.RejectAdditionalSubscriber(subscriber, "Publisher");
     }
     catch (Exception e)
     {
         if (!(e is ISpecViolation))
         {
             throw;
         }
     }
 }
Ejemplo n.º 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);
         }
     }
 }