Class FlowableReplay.ReplaySubscriber<T>
- java.lang.Object
-
- java.util.concurrent.atomic.AtomicReference<org.reactivestreams.Subscription>
-
- io.reactivex.rxjava3.internal.operators.flowable.FlowableReplay.ReplaySubscriber<T>
-
- All Implemented Interfaces:
FlowableSubscriber<T>,Disposable,java.io.Serializable,org.reactivestreams.Subscriber<T>
- Enclosing class:
- FlowableReplay<T>
static final class FlowableReplay.ReplaySubscriber<T> extends java.util.concurrent.atomic.AtomicReference<org.reactivestreams.Subscription> implements FlowableSubscriber<T>, Disposable
-
-
Field Summary
Fields Modifier and Type Field Description (package private) FlowableReplay.ReplayBuffer<T>bufferHolds notifications from upstream.(package private) java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>>currentThe current connection.(package private) booleandoneIndicates this Subscriber received a terminal event.(package private) static FlowableReplay.InnerSubscription[]EMPTYIndicates an empty array of inner subscriptions.(package private) java.util.concurrent.atomic.AtomicIntegermanagement(package private) longrequestedFromUpstreamTracks the amount already requested from the upstream.private static longserialVersionUID(package private) java.util.concurrent.atomic.AtomicBooleanshouldConnectAtomically changed from false to true by connect to make sure the connection is only performed by one thread.(package private) java.util.concurrent.atomic.AtomicReference<FlowableReplay.InnerSubscription<T>[]>subscribersTracks the subscribed InnerSubscriptions.(package private) static FlowableReplay.InnerSubscription[]TERMINATEDIndicates a terminated ReplaySubscriber.
-
Constructor Summary
Constructors Constructor Description ReplaySubscriber(FlowableReplay.ReplayBuffer<T> buffer, java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>> current)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) booleanadd(FlowableReplay.InnerSubscription<T> producer)Atomically try adding a new InnerSubscription to this Subscriber or return false if this Subscriber was terminated.voiddispose()Dispose the resource, the operation should be idempotent.booleanisDisposed()Returns true if this resource has been disposed.(package private) voidmanageRequests()Coordinates the request amounts of various child Subscribers.voidonComplete()voidonError(java.lang.Throwable e)voidonNext(T t)voidonSubscribe(org.reactivestreams.Subscription p)Implementors of this method should make sure everything that needs to be visible inSubscriber.onNext(Object)is established before callingSubscription.request(long).(package private) voidremove(FlowableReplay.InnerSubscription<T> p)Atomically removes the given InnerSubscription from the subscribers array.-
Methods inherited from class java.util.concurrent.atomic.AtomicReference
accumulateAndGet, compareAndExchange, compareAndExchangeAcquire, compareAndExchangeRelease, compareAndSet, get, getAcquire, getAndAccumulate, getAndSet, getAndUpdate, getOpaque, getPlain, lazySet, set, setOpaque, setPlain, setRelease, toString, updateAndGet, weakCompareAndSet, weakCompareAndSetAcquire, weakCompareAndSetPlain, weakCompareAndSetRelease, weakCompareAndSetVolatile
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
buffer
final FlowableReplay.ReplayBuffer<T> buffer
Holds notifications from upstream.
-
done
boolean done
Indicates this Subscriber received a terminal event.
-
EMPTY
static final FlowableReplay.InnerSubscription[] EMPTY
Indicates an empty array of inner subscriptions.
-
TERMINATED
static final FlowableReplay.InnerSubscription[] TERMINATED
Indicates a terminated ReplaySubscriber.
-
subscribers
final java.util.concurrent.atomic.AtomicReference<FlowableReplay.InnerSubscription<T>[]> subscribers
Tracks the subscribed InnerSubscriptions.
-
shouldConnect
final java.util.concurrent.atomic.AtomicBoolean shouldConnect
Atomically changed from false to true by connect to make sure the connection is only performed by one thread.
-
management
final java.util.concurrent.atomic.AtomicInteger management
-
requestedFromUpstream
long requestedFromUpstream
Tracks the amount already requested from the upstream.
-
current
final java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>> current
The current connection.
-
-
Constructor Detail
-
ReplaySubscriber
ReplaySubscriber(FlowableReplay.ReplayBuffer<T> buffer, java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>> current)
-
-
Method Detail
-
isDisposed
public boolean isDisposed()
Description copied from interface:DisposableReturns true if this resource has been disposed.- Specified by:
isDisposedin interfaceDisposable- Returns:
- true if this resource has been disposed
-
dispose
public void dispose()
Description copied from interface:DisposableDispose the resource, the operation should be idempotent.- Specified by:
disposein interfaceDisposable
-
add
boolean add(FlowableReplay.InnerSubscription<T> producer)
Atomically try adding a new InnerSubscription 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(FlowableReplay.InnerSubscription<T> p)
Atomically removes the given InnerSubscription from the subscribers array.- Parameters:
p- the InnerSubscription to remove
-
onSubscribe
public void onSubscribe(org.reactivestreams.Subscription p)
Description copied from interface:FlowableSubscriberImplementors of this method should make sure everything that needs to be visible inSubscriber.onNext(Object)is established before callingSubscription.request(long). In practice this means no initialization should happen after therequest()call and additional behavior is thread safe in respect toonNext.- Specified by:
onSubscribein interfaceFlowableSubscriber<T>- Specified by:
onSubscribein interfaceorg.reactivestreams.Subscriber<T>
-
onError
public void onError(java.lang.Throwable e)
- Specified by:
onErrorin interfaceorg.reactivestreams.Subscriber<T>
-
onComplete
public void onComplete()
- Specified by:
onCompletein interfaceorg.reactivestreams.Subscriber<T>
-
manageRequests
void manageRequests()
Coordinates the request amounts of various child Subscribers.
-
-