package j4ckall.rxflux.lib.flux; import java.util.Objects; import io.reactivex.Observable; import io.reactivex.functions.Consumer; import io.reactivex.subjects.PublishSubject; import io.reactivex.subjects.Subject; /** * ActionをトリガーにしてdispatcherSubjectを購読しているStoreにデータを流す * * @author matsumoto_k */ public class Dispatcher { private final Subject<Action> dispatcherSubject = PublishSubject.<Action>create().toSerialized(); public Dispatcher() { } /** * dispatcherSubjectを購読する * * @param key * @param subscriber * @return */ final Observable<Action> on(Action.Key key, Consumer<Action> subscriber) { return dispatcherSubject.filter(fluxAction -> Objects.equals(fluxAction.key, key)) .doOnNext(subscriber); } /** * dispatcherSubjectを購読しているStoreにデータを流す * * @param fluxAction */ final void dispatch(Action fluxAction) { dispatcherSubject.onNext(fluxAction); } }