package com.openfarmanager.android.core.bus;
import rx.Observable;
import rx.functions.Func1;
import rx.subjects.PublishSubject;
import rx.subjects.SerializedSubject;
import rx.subjects.Subject;
/**
* Rx Java EventBus implementation
*
* @author Vlad Namashko
*/
public class RxBus {
private RxBus() {}
private static RxBus sInstance;
public static RxBus getInstance() {
if (sInstance == null) {
sInstance = new RxBus();
}
return sInstance;
}
private final Subject<BusEvent, BusEvent> mBus = new SerializedSubject<>(PublishSubject.create());
public void postEvent(BusEvent event) {
mBus.onNext(event);
}
public<E extends PanelEvent> Observable<E> observerFor(Class<E> eventClass, int panelLocation) {
return mBus.ofType(eventClass).filter(e -> e.getPanelLocation() == panelLocation);
}
public<E extends BusEvent> Observable<E> observerFor(Class<E> eventClass) {
return mBus.ofType(eventClass);
}
}