package tellh.com.gitclub.presentation.contract.bus;
import rx.Observable;
import rx.subjects.PublishSubject;
import rx.subjects.SerializedSubject;
import rx.subjects.Subject;
/**
* Created by tlh on 2016/9/3 :)
*/
public class RxBus {
private static volatile RxBus defaultInstance;
private final Subject<Object, Object> bus;
public RxBus() {
bus = new SerializedSubject<>(PublishSubject.create());
}
// singleton
public static RxBus getDefault() {
if (defaultInstance == null) {
synchronized (RxBus.class) {
if (defaultInstance == null) {
defaultInstance = new RxBus();
}
}
}
return defaultInstance;
}
// send a new event
public void post(Object o) {
bus.onNext(o);
}
// filter event type,post the specific event object to observable.
public <T> Observable<T> toObservable(Class<T> eventType) {
return bus.ofType(eventType);
}
}