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 Classes Modifier and Type Class Description (package private) static class
FlowableReplay.BoundedReplayBuffer<T>
Base class for bounded buffering with options to specify an enter and leave transforms and custom truncation behavior.(package private) static class
FlowableReplay.DefaultUnboundedFactory
(package private) static class
FlowableReplay.InnerSubscription<T>
A Subscription that manages the request and cancellation state of a child subscriber in thread-safe manner.(package private) static class
FlowableReplay.MulticastFlowable<R,U>
(package private) static class
FlowableReplay.Node
Represents a node in a bounded replay buffer's linked list.(package private) static interface
FlowableReplay.ReplayBuffer<T>
The interface for interacting with various buffering logic.(package private) static class
FlowableReplay.ReplayBufferSupplier<T>
(package private) static class
FlowableReplay.ReplayPublisher<T>
(package private) static class
FlowableReplay.ReplaySubscriber<T>
(package private) static class
FlowableReplay.ScheduledReplayBufferSupplier<T>
(package private) static class
FlowableReplay.SizeAndTimeBoundReplayBuffer<T>
Size and time bound replay buffer.(package private) static class
FlowableReplay.SizeBoundReplayBuffer<T>
A bounded replay buffer implementation with size limit only.(package private) static class
FlowableReplay.UnboundedReplayBuffer<T>
Holds an unbounded list of events.
-
Field Summary
Fields Modifier and Type Field Description (package private) Supplier<? extends FlowableReplay.ReplayBuffer<T>>
bufferFactory
A factory that creates the appropriate buffer for the ReplaySubscriber.(package private) java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>>
current
Holds the current subscriber that is, will be or just was subscribed to the source observable.(package private) static Supplier
DEFAULT_UNBOUNDED_FACTORY
(package private) org.reactivestreams.Publisher<T>
onSubscribe
(package private) Flowable<T>
source
The source observable.
-
Constructor Summary
Constructors Modifier Constructor Description private
FlowableReplay(org.reactivestreams.Publisher<T> onSubscribe, Flowable<T> source, java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>> current, Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
connect(Consumer<? super Disposable> connection)
Instructs theConnectableFlowable
to begin emitting the items from its underlyingFlowable
to itsSubscriber
s.static <T> ConnectableFlowable<T>
create(Flowable<T> source, int bufferSize, boolean eagerTruncate)
Creates a replaying ConnectableObservable with a size bound buffer.static <T> ConnectableFlowable<T>
create(Flowable<T> source, long maxAge, java.util.concurrent.TimeUnit unit, Scheduler scheduler, boolean eagerTruncate)
Creates a replaying ConnectableObservable with a time bound buffer.static <T> ConnectableFlowable<T>
create(Flowable<T> source, long maxAge, java.util.concurrent.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 Detail
-
current
final java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>> current
Holds the current subscriber that is, will be or just was subscribed to the source observable.
-
bufferFactory
final Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory
A factory that creates the appropriate buffer for the ReplaySubscriber.
-
onSubscribe
final org.reactivestreams.Publisher<T> onSubscribe
-
DEFAULT_UNBOUNDED_FACTORY
static final Supplier DEFAULT_UNBOUNDED_FACTORY
-
-
Constructor Detail
-
FlowableReplay
private FlowableReplay(org.reactivestreams.Publisher<T> onSubscribe, Flowable<T> source, java.util.concurrent.atomic.AtomicReference<FlowableReplay.ReplaySubscriber<T>> current, Supplier<? extends FlowableReplay.ReplayBuffer<T>> bufferFactory)
-
-
Method Detail
-
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
public static <T> ConnectableFlowable<T> createFrom(Flowable<? extends T> source)
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, java.util.concurrent.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, java.util.concurrent.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
public org.reactivestreams.Publisher<T> 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
protected void subscribeActual(org.reactivestreams.Subscriber<? super T> s)
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
public void connect(Consumer<? super Disposable> connection)
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:
- ReactiveX documentation: Connect
-
-