Class FlowableReplay<T>
java.lang.Object
io.reactivex.rxjava3.core.Flowable<T>
io.reactivex.rxjava3.flowables.ConnectableFlowable<T>
io.reactivex.rxjava3.internal.operators.flowable.FlowableReplay<T>
- All Implemented Interfaces:
HasUpstreamPublisher<T>
,org.reactivestreams.Publisher<T>
public final class FlowableReplay<T>
extends ConnectableFlowable<T>
implements HasUpstreamPublisher<T>
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static class
Base class for bounded buffering with options to specify an enter and leave transforms and custom truncation behavior.(package private) static final class
(package private) static final class
A Subscription that manages the request and cancellation state of a child subscriber in thread-safe manner.(package private) static final class
(package private) static final class
Represents a node in a bounded replay buffer's linked list.(package private) static interface
The interface for interacting with various buffering logic.(package private) static final class
(package private) static final class
(package private) static final class
(package private) static final class
(package private) static final class
Size and time bound replay buffer.(package private) static final class
A bounded replay buffer implementation with size limit only.(package private) static final class
Holds an unbounded list of events. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final Supplier
<? extends FlowableReplay.ReplayBuffer<T>> A factory that creates the appropriate buffer for the ReplaySubscriber.(package private) final AtomicReference
<FlowableReplay.ReplaySubscriber<T>> Holds the current subscriber that is, will be or just was subscribed to the source observable.(package private) static final Supplier
(package private) final org.reactivestreams.Publisher
<T> The source observable. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivate
FlowableReplay
(org.reactivestreams.Publisher<T> onSubscribe, Flowable<T> source, AtomicReference<FlowableReplay.ReplaySubscriber<T>> current, Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory) -
Method Summary
Modifier and TypeMethodDescriptionvoid
connect
(Consumer<? super Disposable> connection) Instructs theConnectableFlowable
to begin emitting the items from its underlyingFlowable
to itsSubscriber
s.static <T> ConnectableFlowable
<T> Creates a replaying ConnectableObservable with a size bound buffer.static <T> ConnectableFlowable
<T> Creates a replaying ConnectableObservable with a time bound buffer.static <T> ConnectableFlowable
<T> create
(Flowable<T> source, long maxAge, TimeUnit unit, Scheduler scheduler, int bufferSize, boolean eagerTruncate) Creates a replaying ConnectableObservable with a size and time bound buffer.(package private) static <T> ConnectableFlowable
<T> create
(Flowable<T> source, Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory) Creates a OperatorReplay instance to replay values of the given sourceFlowable
.static <T> ConnectableFlowable
<T> createFrom
(Flowable<? extends T> source) Creates a replaying ConnectableObservable with an unbounded buffer.static <U,
R> Flowable <R> multicastSelector
(Supplier<? extends ConnectableFlowable<U>> connectableFactory, Function<? super Flowable<U>, ? extends org.reactivestreams.Publisher<R>> selector) Given a connectable observable factory, it multicasts over the generated ConnectableObservable via a selector function.void
reset()
Resets thisConnectableFlowable
into its fresh state if it has terminated.org.reactivestreams.Publisher
<T> source()
Returns the source Publisher.protected void
subscribeActual
(org.reactivestreams.Subscriber<? super T> s) Operator implementations (both source and intermediate) should implement this method that performs the necessary business logic and handles the incomingSubscriber
s.Methods inherited from class io.reactivex.rxjava3.flowables.ConnectableFlowable
autoConnect, autoConnect, autoConnect, connect, refCount, refCount, refCount, refCount, refCount, refCount
Methods inherited from class io.reactivex.rxjava3.core.Flowable
all, amb, ambArray, ambWith, any, blockingFirst, blockingFirst, blockingForEach, blockingForEach, blockingIterable, blockingIterable, blockingLast, blockingLast, blockingLatest, blockingMostRecent, blockingNext, blockingSingle, blockingSingle, blockingStream, blockingStream, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, bufferSize, cache, cacheWithInitialCapacity, cast, collect, collect, collectInto, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatestArray, combineLatestArray, combineLatestArrayDelayError, combineLatestArrayDelayError, combineLatestDelayError, combineLatestDelayError, compose, concat, concat, concat, concat, concat, concat, concatArray, concatArrayDelayError, concatArrayEager, concatArrayEager, concatArrayEagerDelayError, concatArrayEagerDelayError, concatDelayError, concatDelayError, concatDelayError, concatEager, concatEager, concatEager, concatEager, concatEagerDelayError, concatEagerDelayError, concatEagerDelayError, concatEagerDelayError, concatMap, concatMap, concatMap, concatMapCompletable, concatMapCompletable, concatMapCompletableDelayError, concatMapCompletableDelayError, concatMapCompletableDelayError, concatMapDelayError, concatMapDelayError, concatMapDelayError, concatMapEager, concatMapEager, concatMapEagerDelayError, concatMapEagerDelayError, concatMapIterable, concatMapIterable, concatMapMaybe, concatMapMaybe, concatMapMaybeDelayError, concatMapMaybeDelayError, concatMapMaybeDelayError, concatMapSingle, concatMapSingle, concatMapSingleDelayError, concatMapSingleDelayError, concatMapSingleDelayError, concatMapStream, concatMapStream, concatWith, concatWith, concatWith, concatWith, contains, count, create, debounce, debounce, debounce, debounce, defaultIfEmpty, defer, delay, delay, delay, delay, delay, delay, delaySubscription, delaySubscription, delaySubscription, dematerialize, distinct, distinct, distinct, distinctUntilChanged, distinctUntilChanged, distinctUntilChanged, doAfterNext, doAfterTerminate, doFinally, doOnCancel, doOnComplete, doOnEach, doOnEach, doOnError, doOnLifecycle, doOnNext, doOnRequest, doOnSubscribe, doOnTerminate, elementAt, elementAt, elementAtOrError, empty, error, error, filter, first, firstElement, firstOrError, firstOrErrorStage, firstStage, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMapCompletable, flatMapCompletable, flatMapIterable, flatMapIterable, flatMapIterable, flatMapIterable, flatMapMaybe, flatMapMaybe, flatMapSingle, flatMapSingle, flatMapStream, flatMapStream, forEach, forEachWhile, forEachWhile, forEachWhile, fromAction, fromArray, fromCallable, fromCompletable, fromCompletionStage, fromFuture, fromFuture, fromIterable, fromMaybe, fromObservable, fromOptional, fromPublisher, fromRunnable, fromSingle, fromStream, fromSupplier, generate, generate, generate, generate, generate, groupBy, groupBy, groupBy, groupBy, groupBy, groupBy, groupJoin, hide, ignoreElements, interval, interval, interval, interval, intervalRange, intervalRange, isEmpty, join, just, just, just, just, just, just, just, just, just, just, last, lastElement, lastOrError, lastOrErrorStage, lastStage, lift, map, mapOptional, materialize, merge, merge, merge, merge, merge, merge, merge, merge, mergeArray, mergeArray, mergeArrayDelayError, mergeArrayDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeWith, mergeWith, mergeWith, mergeWith, never, observeOn, observeOn, observeOn, ofType, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureDrop, onBackpressureDrop, onBackpressureLatest, onBackpressureLatest, onBackpressureReduce, onBackpressureReduce, onErrorComplete, onErrorComplete, onErrorResumeNext, onErrorResumeWith, onErrorReturn, onErrorReturnItem, onTerminateDetach, parallel, parallel, parallel, publish, publish, publish, publish, range, rangeLong, rebatchRequests, reduce, reduce, reduceWith, repeat, repeat, repeatUntil, repeatWhen, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, retry, retry, retry, retry, retry, retryUntil, retryWhen, safeSubscribe, sample, sample, sample, sample, sample, sample, sample, scan, scan, scanWith, sequenceEqual, sequenceEqual, sequenceEqual, sequenceEqual, serialize, share, single, singleElement, singleOrError, singleOrErrorStage, singleStage, skip, skip, skip, skipLast, skipLast, skipLast, skipLast, skipLast, skipLast, skipUntil, skipWhile, sorted, sorted, startWith, startWith, startWith, startWith, startWithArray, startWithItem, startWithIterable, subscribe, subscribe, subscribe, subscribe, subscribe, subscribe, subscribe, subscribeOn, subscribeOn, subscribeWith, switchIfEmpty, switchMap, switchMap, switchMapCompletable, switchMapCompletableDelayError, switchMapDelayError, switchMapDelayError, switchMapMaybe, switchMapMaybeDelayError, switchMapSingle, switchMapSingleDelayError, switchOnNext, switchOnNext, switchOnNextDelayError, switchOnNextDelayError, take, take, take, takeLast, takeLast, takeLast, takeLast, takeLast, takeLast, takeLast, takeLast, takeLast, takeUntil, takeUntil, takeWhile, test, test, test, throttleFirst, throttleFirst, throttleFirst, throttleLast, throttleLast, throttleLast, throttleLatest, throttleLatest, throttleLatest, throttleLatest, throttleLatest, throttleWithTimeout, throttleWithTimeout, throttleWithTimeout, timeInterval, timeInterval, timeInterval, timeInterval, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timer, timer, timestamp, timestamp, timestamp, timestamp, to, toFuture, toList, toList, toList, toMap, toMap, toMap, toMultimap, toMultimap, toMultimap, toMultimap, toObservable, toSortedList, toSortedList, toSortedList, toSortedList, unsafeCreate, unsubscribeOn, using, using, window, window, window, window, window, window, window, window, window, window, window, window, window, window, window, window, window, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, zip, zip, zip, zip, zip, zip, zip, zip, zip, zip, zip, zip, zipArray, zipWith, zipWith, zipWith, zipWith
-
Field Details
-
source
The source observable. -
current
Holds the current subscriber that is, will be or just was subscribed to the source observable. -
bufferFactory
A factory that creates the appropriate buffer for the ReplaySubscriber. -
onSubscribe
-
DEFAULT_UNBOUNDED_FACTORY
-
-
Constructor Details
-
FlowableReplay
private FlowableReplay(org.reactivestreams.Publisher<T> onSubscribe, Flowable<T> source, AtomicReference<FlowableReplay.ReplaySubscriber<T>> current, Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory)
-
-
Method Details
-
multicastSelector
public static <U,R> Flowable<R> multicastSelector(Supplier<? extends ConnectableFlowable<U>> connectableFactory, Function<? super Flowable<U>, ? extends org.reactivestreams.Publisher<R>> selector) Given a connectable observable factory, it multicasts over the generated ConnectableObservable via a selector function.- Type Parameters:
U
- the connectable observable typeR
- the result type- Parameters:
connectableFactory
- the factory that returns a ConnectableFlowable for each individual subscriberselector
- the function that receives a Flowable and should return another Flowable that will be subscribed to- Returns:
- the new Observable instance
-
createFrom
Creates a replaying ConnectableObservable with an unbounded buffer.- Type Parameters:
T
- the value type- Parameters:
source
- the source Publisher to use- Returns:
- the new ConnectableObservable instance
-
create
public static <T> ConnectableFlowable<T> create(Flowable<T> source, int bufferSize, boolean eagerTruncate) Creates a replaying ConnectableObservable with a size bound buffer.- Type Parameters:
T
- the value type- Parameters:
source
- the source Flowable to usebufferSize
- the maximum number of elements to holdeagerTruncate
- if true, the head reference is refreshed to avoid unwanted item retention- Returns:
- the new ConnectableObservable instance
-
create
public static <T> ConnectableFlowable<T> create(Flowable<T> source, long maxAge, TimeUnit unit, Scheduler scheduler, boolean eagerTruncate) Creates a replaying ConnectableObservable with a time bound buffer.- Type Parameters:
T
- the value type- Parameters:
source
- the source Flowable to usemaxAge
- the maximum age of entriesunit
- the unit of measure of the age amountscheduler
- the target scheduler providing the current timeeagerTruncate
- if true, the head reference is refreshed to avoid unwanted item retention- Returns:
- the new ConnectableObservable instance
-
create
public static <T> ConnectableFlowable<T> create(Flowable<T> source, long maxAge, TimeUnit unit, Scheduler scheduler, int bufferSize, boolean eagerTruncate) Creates a replaying ConnectableObservable with a size and time bound buffer.- Type Parameters:
T
- the value type- Parameters:
source
- the source Flowable to usemaxAge
- the maximum age of entriesunit
- the unit of measure of the age amountscheduler
- the target scheduler providing the current timebufferSize
- the maximum number of elements to holdeagerTruncate
- if true, the head reference is refreshed to avoid unwanted item retention- Returns:
- the new ConnectableFlowable instance
-
create
static <T> ConnectableFlowable<T> create(Flowable<T> source, Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory) Creates a OperatorReplay instance to replay values of the given sourceFlowable
.- Type Parameters:
T
- the value type- Parameters:
source
- the sourceFlowable
to usebufferFactory
- the factory to instantiate the appropriate buffer when theFlowable
becomes active- Returns:
- the
ConnectableFlowable
instance
-
source
Description copied from interface:HasUpstreamPublisher
Returns the source Publisher.This method is intended to discover the assembly graph of sequences.
- Specified by:
source
in interfaceHasUpstreamPublisher<T>
- Returns:
- the source Publisher
-
subscribeActual
Description copied from class:Flowable
Operator implementations (both source and intermediate) should implement this method that performs the necessary business logic and handles the incomingSubscriber
s.There is no need to call any of the plugin hooks on the current
Flowable
instance or theSubscriber
; all hooks and basic safeguards have been applied byFlowable.subscribe(Subscriber)
before this method gets called.- Specified by:
subscribeActual
in classFlowable<T>
- Parameters:
s
- the incomingSubscriber
, nevernull
-
reset
public void reset()Description copied from class:ConnectableFlowable
Resets thisConnectableFlowable
into its fresh state if it has terminated.Calling this method on a fresh or active
ConnectableFlowable
has no effect.- Scheduler:
- The behavior is determined by the implementor of this abstract class.
- Specified by:
reset
in classConnectableFlowable<T>
-
connect
Description copied from class:ConnectableFlowable
Instructs theConnectableFlowable
to begin emitting the items from its underlyingFlowable
to itsSubscriber
s.- Scheduler:
- The behavior is determined by the implementor of this abstract class.
- Specified by:
connect
in classConnectableFlowable<T>
- Parameters:
connection
- the action that receives the connection subscription before the subscription to source happens allowing the caller to synchronously disconnect a synchronous source- See Also:
-