package io.kaif.mobile.event;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.subjects.PublishSubject;
public class EventPublishSubject<T> {
private final PublishSubject<T> subject;
public EventPublishSubject() {
this.subject = PublishSubject.create();
}
public Observable<T> getSubject(Class<?>... classes) {
return subject.asObservable().filter(event -> {
for (Class<?> clazz : classes) {
if (clazz.isInstance(event)) {
return true;
}
}
return false;
}).observeOn(AndroidSchedulers.mainThread());
}
public <E extends T> Observable<E> getSubject(Class<E> clazz) {
return subject.asObservable()
.filter(clazz::isInstance)
.cast(clazz)
.observeOn(AndroidSchedulers.mainThread());
}
public <E extends T> void onNext(E event) {
subject.onNext(event);
}
}