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>
buffer
Holds notifications from upstream.(package private) java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>>
current
The current connection.(package private) boolean
done
Indicates this Subscriber received a terminal event.(package private) static FlowableReplay.InnerSubscription[]
EMPTY
Indicates an empty array of inner subscriptions.(package private) java.util.concurrent.atomic.AtomicInteger
management
(package private) long
requestedFromUpstream
Tracks the amount already requested from the upstream.private static long
serialVersionUID
(package private) 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.(package private) java.util.concurrent.atomic.AtomicReference<FlowableReplay.InnerSubscription<T>[]>
subscribers
Tracks the subscribed InnerSubscriptions.(package private) static FlowableReplay.InnerSubscription[]
TERMINATED
Indicates 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) boolean
add(FlowableReplay.InnerSubscription<T> producer)
Atomically try adding a new InnerSubscription to this Subscriber or return false if this Subscriber was terminated.void
dispose()
Dispose the resource, the operation should be idempotent.boolean
isDisposed()
Returns true if this resource has been disposed.(package private) void
manageRequests()
Coordinates the request amounts of various child Subscribers.void
onComplete()
void
onError(java.lang.Throwable e)
void
onNext(T t)
void
onSubscribe(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) void
remove(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:Disposable
Returns true if this resource has been disposed.- Specified by:
isDisposed
in interfaceDisposable
- Returns:
- true if this resource has been disposed
-
dispose
public void dispose()
Description copied from interface:Disposable
Dispose the resource, the operation should be idempotent.- Specified by:
dispose
in 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:FlowableSubscriber
Implementors 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:
onSubscribe
in interfaceFlowableSubscriber<T>
- Specified by:
onSubscribe
in interfaceorg.reactivestreams.Subscriber<T>
-
onError
public void onError(java.lang.Throwable e)
- Specified by:
onError
in interfaceorg.reactivestreams.Subscriber<T>
-
onComplete
public void onComplete()
- Specified by:
onComplete
in interfaceorg.reactivestreams.Subscriber<T>
-
manageRequests
void manageRequests()
Coordinates the request amounts of various child Subscribers.
-
-