Class OperatorReplay.ReplaySubscriber<T>

java.lang.Object
rx.Subscriber<T>
rx.internal.operators.OperatorReplay.ReplaySubscriber<T>
All Implemented Interfaces:
Observer<T>, Subscription
Enclosing class:
OperatorReplay<T>

static final class OperatorReplay.ReplaySubscriber<T> extends Subscriber<T> implements Subscription
  • Field Details

    • buffer

      Holds notifications from upstream.
    • nl

      final NotificationLite<T> nl
      The notification-lite factory.
    • done

      boolean done
      Contains either an onCompleted or an onError token from upstream.
    • EMPTY

      static final OperatorReplay.InnerProducer[] EMPTY
      Indicates an empty array of inner producers.
    • TERMINATED

      static final OperatorReplay.InnerProducer[] TERMINATED
      Indicates a terminated ReplaySubscriber.
    • terminated

      volatile boolean terminated
      Indicates no further InnerProducers are accepted.
    • producers

      Tracks the subscribed producers. Guarded by itself.
    • producersCache

      OperatorReplay.InnerProducer<T>[] producersCache
      Contains a copy of the producers. Modified only from the source side.
    • producersVersion

      volatile long producersVersion
      Contains number of modifications to the producers set.
    • producersCacheVersion

      long producersCacheVersion
      Contains the number of modifications that the producersCache holds.
    • shouldConnect

      final AtomicBoolean shouldConnect
      Atomically changed from false to true by connect to make sure the connection is only performed by one thread.
    • emitting

      boolean emitting
      Guarded by this.
    • missed

      boolean missed
      Guarded by this.
    • maxChildRequested

      long maxChildRequested
      Contains the maximum element index the child Subscribers requested so far. Accessed while emitting is true.
    • maxUpstreamRequested

      long maxUpstreamRequested
      Counts the outstanding upstream requests until the producer arrives.
    • producer

      volatile Producer producer
      The upstream producer.
    • coordinationQueue

      List<OperatorReplay.InnerProducer<T>> coordinationQueue
      The queue that holds producers with request changes that need to be coordinated.
    • coordinateAll

      boolean coordinateAll
      Indicate that all request amounts should be considered.
  • Constructor Details

  • Method Details

    • init

      void init()
      Should be called after the constructor finished to setup nulling-out the current reference.
    • add

      boolean add(OperatorReplay.InnerProducer<T> producer)
      Atomically try adding a new InnerProducer to this Subscriber or return false if this Subscriber was terminated.
      Parameters:
      producer - the producer to add
      Returns:
      true if succeeded, false otherwise
    • remove

      void remove(OperatorReplay.InnerProducer<T> producer)
      Atomically removes the given producer from the producers array.
      Parameters:
      producer - the producer to remove
    • setProducer

      public void setProducer(Producer p)
      Description copied from class: Subscriber
      If other subscriber is set (by calling constructor Subscriber(Subscriber) or Subscriber(Subscriber, boolean)) then this method calls setProducer on the other subscriber. If the other subscriber is not set and no requests have been made to this subscriber then p.request(Long.MAX_VALUE) is called. If the other subscriber is not set and some requests have been made to this subscriber then p.request(n) is called where n is the accumulated requests to this subscriber.
      Overrides:
      setProducer in class Subscriber<T>
      Parameters:
      p - producer to be used by this subscriber or the other subscriber (or recursively its other subscriber) to make requests from
    • onNext

      public void onNext(T t)
      Description copied from interface: Observer
      Provides the Observer with a new item to observe.

      The Observable may call this method 0 or more times.

      The Observable will not call this method again after it calls either Observer.onCompleted() or Observer.onError(java.lang.Throwable).

      Specified by:
      onNext in interface Observer<T>
      Parameters:
      t - the item emitted by the Observable
    • onError

      public void onError(Throwable e)
      Description copied from interface: Observer
      Notifies the Observer that the Observable has experienced an error condition.

      If the Observable calls this method, it will not thereafter call Observer.onNext(T) or Observer.onCompleted().

      Specified by:
      onError in interface Observer<T>
      Parameters:
      e - the exception encountered by the Observable
    • onCompleted

      public void onCompleted()
      Description copied from interface: Observer
      Notifies the Observer that the Observable has finished sending push-based notifications.

      The Observable will not call this method if it calls Observer.onError(java.lang.Throwable).

      Specified by:
      onCompleted in interface Observer<T>
    • manageRequests

      void manageRequests(OperatorReplay.InnerProducer<T> inner)
      Coordinates the request amounts of various child Subscribers.
    • copyProducers

      OperatorReplay.InnerProducer<T>[] copyProducers()
    • makeRequest

      void makeRequest(long maxTotalRequests, long previousTotalRequests)
    • replay

      void replay()
      Tries to replay the buffer contents to all known subscribers.