Package discord4j.core.event
Class ReplayingEventDispatcher.Builder
- java.lang.Object
-
- discord4j.core.event.DefaultEventDispatcher.Builder
-
- discord4j.core.event.ReplayingEventDispatcher.Builder
-
- All Implemented Interfaces:
EventDispatcher.Builder
- Enclosing class:
- ReplayingEventDispatcher
public static class ReplayingEventDispatcher.Builder extends DefaultEventDispatcher.Builder
A builder to createEventDispatcherinstances.
-
-
Field Summary
Fields Modifier and Type Field Description protected Predicate<Event>replayEventFilterprotected FluxSink.OverflowStrategyreplayEventOverflowStrategyprotected ReplayProcessor<Event>replayEventProcessorprotected Publisher<?>stopReplayingTriggerprotected SchedulertimedTaskScheduler-
Fields inherited from class discord4j.core.event.DefaultEventDispatcher.Builder
eventProcessor, eventScheduler, overflowStrategy
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedBuilder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description EventDispatcherbuild()Create theEventDispatcherReplayingEventDispatcher.BuildereventProcessor(FluxProcessor<Event,Event> eventProcessor)Set the underlyingFluxProcessorthe dispatcher will use to queue and distribute events.ReplayingEventDispatcher.BuildereventScheduler(Scheduler eventScheduler)Set theSchedulerthis dispatcher should use to publish events to its subscribers.ReplayingEventDispatcher.BuilderoverflowStrategy(FluxSink.OverflowStrategy overflowStrategy)Set theFluxSink.OverflowStrategyfor dealing with overflow scenarios where too many events are being published.ReplayingEventDispatcher.BuilderreplayEventFilter(Predicate<Event> replayEventFilter)Set a filter used to determine whether an incomingEventshould be stored for replay.ReplayingEventDispatcher.BuilderreplayEventOverflowStrategy(FluxSink.OverflowStrategy replayEventOverflowStrategy)Set an overflow strategy while pushing events to the replay processor.ReplayingEventDispatcher.BuilderreplayEventProcessor(ReplayProcessor<Event> replayEventProcessor)Set a processor used to store events while no subscribers are connected and will be forwarded to all late subscribers.ReplayingEventDispatcher.BuilderstopReplayingTrigger(Publisher<?> stopReplayingTrigger)Set a triggerPublisherthat is subscribed upon the first subscriber connects to this dispatcher.ReplayingEventDispatcher.BuildertimedTaskScheduler(Scheduler timedTaskScheduler)Set a time-capableSchedulerused to detect whether all events have replayed to a subscriber.-
Methods inherited from class discord4j.core.event.DefaultEventDispatcher.Builder
eventSink
-
-
-
-
Field Detail
-
timedTaskScheduler
protected Scheduler timedTaskScheduler
-
replayEventProcessor
protected ReplayProcessor<Event> replayEventProcessor
-
replayEventOverflowStrategy
protected FluxSink.OverflowStrategy replayEventOverflowStrategy
-
stopReplayingTrigger
protected Publisher<?> stopReplayingTrigger
-
-
Method Detail
-
eventProcessor
public ReplayingEventDispatcher.Builder eventProcessor(FluxProcessor<Event,Event> eventProcessor)
Description copied from interface:EventDispatcher.BuilderSet the underlyingFluxProcessorthe dispatcher will use to queue and distribute events. Defaults to using anEmitterProcessor.Using
EmitterProcessoronly emits events since a subscriber has subscribed to the processor (except for the first one which receives all queued signals until that point), and it allows you to configure the backing queue size while allowing you to use operators likeFlux.repeat()andFlux.retry()to drop the triggering signal.- Specified by:
eventProcessorin interfaceEventDispatcher.Builder- Overrides:
eventProcessorin classDefaultEventDispatcher.Builder- Parameters:
eventProcessor- the custom processor for events- Returns:
- this builder
-
overflowStrategy
public ReplayingEventDispatcher.Builder overflowStrategy(FluxSink.OverflowStrategy overflowStrategy)
Description copied from interface:EventDispatcher.BuilderSet theFluxSink.OverflowStrategyfor dealing with overflow scenarios where too many events are being published. Defaults to usingFluxSink.OverflowStrategy.BUFFERto ensure all events are delivered at the cost of higher memory footprint and potentialOutOfMemoryErrorscenarios.To only keep the earliest events you can use
FluxSink.OverflowStrategy.DROP, and to only keep the most recent events, useFluxSink.OverflowStrategy.LATEST. The number of events that can be queued until this strategy is applied depends on the underlying processor implementation.- Specified by:
overflowStrategyin interfaceEventDispatcher.Builder- Overrides:
overflowStrategyin classDefaultEventDispatcher.Builder- Parameters:
overflowStrategy- the custom backpressure strategy- Returns:
- this builder
-
eventScheduler
public ReplayingEventDispatcher.Builder eventScheduler(Scheduler eventScheduler)
Description copied from interface:EventDispatcher.BuilderSet theSchedulerthis dispatcher should use to publish events to its subscribers. Using a bounded elastic/blocking-capable one is recommended for general workloads that may have blocking sequences.- Specified by:
eventSchedulerin interfaceEventDispatcher.Builder- Overrides:
eventSchedulerin classDefaultEventDispatcher.Builder- Parameters:
eventScheduler- a customSchedulerto publish events- Returns:
- this builder
-
replayEventProcessor
public ReplayingEventDispatcher.Builder replayEventProcessor(ReplayProcessor<Event> replayEventProcessor)
Set a processor used to store events while no subscribers are connected and will be forwarded to all late subscribers.- Parameters:
replayEventProcessor- the replay processor to use as backend- Returns:
- this builder
-
replayEventOverflowStrategy
public ReplayingEventDispatcher.Builder replayEventOverflowStrategy(FluxSink.OverflowStrategy replayEventOverflowStrategy)
Set an overflow strategy while pushing events to the replay processor.- Parameters:
replayEventOverflowStrategy- the strategy to use when pushing values to the replay processor- Returns:
- this builder
-
replayEventFilter
public ReplayingEventDispatcher.Builder replayEventFilter(Predicate<Event> replayEventFilter)
Set a filter used to determine whether an incomingEventshould be stored for replay.- Parameters:
replayEventFilter- the filter for events that can be replayed- Returns:
- this builder
-
timedTaskScheduler
public ReplayingEventDispatcher.Builder timedTaskScheduler(Scheduler timedTaskScheduler)
Set a time-capableSchedulerused to detect whether all events have replayed to a subscriber.- Parameters:
timedTaskScheduler- the scheduler to detect no more events can be replayed- Returns:
- this builder
-
stopReplayingTrigger
public ReplayingEventDispatcher.Builder stopReplayingTrigger(Publisher<?> stopReplayingTrigger)
Set a triggerPublisherthat is subscribed upon the first subscriber connects to this dispatcher. Upon completion, error or cancellation, the replaying window will be closed until all subscribers have disconnected.- Parameters:
stopReplayingTrigger- the sequence to signal that no more events should be replayed. Can be subscribed to multiple times as subscribers disconnect.- Returns:
- this builder
-
build
public EventDispatcher build()
Description copied from interface:EventDispatcher.BuilderCreate theEventDispatcher- Specified by:
buildin interfaceEventDispatcher.Builder- Overrides:
buildin classDefaultEventDispatcher.Builder- Returns:
- an
EventDispatcherwith the configured parameters.
-
-