package com.lambdaworks.redis.event; import rx.Observable; import rx.Scheduler; import rx.subjects.PublishSubject; import rx.subjects.Subject; /** * Default implementation for an {@link EventBus}. Events are published using a {@link Scheduler}. * * @author Mark Paluch * @since 3.4 */ public class DefaultEventBus implements EventBus { private final Subject<Event, Event> bus; private final Scheduler scheduler; public DefaultEventBus(Scheduler scheduler) { this.bus = PublishSubject.<Event> create().toSerialized(); this.scheduler = scheduler; } @Override public Observable<Event> get() { return bus.onBackpressureDrop().observeOn(scheduler); } @Override public void publish(Event event) { if (bus.hasObservers()) { bus.onNext(event); } } }