Until you plan to use it events null, I think this can be achieved quite easily.
, BehaviorSubject sticky, removeStickyEvent bus, null ( "" subject).
- ( - , , Object -event):
public class RxEventBus {
PublishSubject<Object> eventsSubject = PublishSubject.create();
BehaviorSubject<Object> stickyEventsSubject = BehaviorSubject.create();
public RxEventBus() {
}
public Observable<Object> asObservable() {
return eventsSubject;
}
public Observable<Object> asStickyObservable() {
return stickyEventsSubject.filter(new Func1<Object, Boolean>() {
@Override
public Boolean call(Object o) {
return o != null;
}
});
}
public void postEvent(@NonNull Object event) {
eventsSubject.onNext(event);
}
public void postStickyEvent(@NonNull Object stickyEvent) {
stickyEventsSubject.onNext(stickyEvent);
}
public void removeStickyEvent(){
stickyEventsSubject.onNext(null);
}
}