/** * 子线程中执行 * @param tag * @param rxBusResult */ public void toObserverableChildThread(final String tag, final RxBusResult rxBusResult) { _bus.observeOn(Schedulers.io()).subscribe(new Action1<Object>() { @Override public void call(Object o) { if (tags.containsKey(tag)) { rxBusResult.onRxBusResult(o); } } }); }
/** * 主线程中执行 * @param tag * @param rxBusResult */ public void toObserverableOnMainThread(final String tag, final RxBusResult rxBusResult) { _bus.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() { @Override public void call(Object o) { if (tags.containsKey(tag)) { rxBusResult.onRxBusResult(o); } } }); }
/** * Creates a subject whose client observers will observe events * propagated through the given wrapped subject. * @param <T> the element type * @param subject the subject to wrap * @param scheduler the target scheduler * @return the created subject */ public static <T> Subject<T, T> createScheduledSubject(Subject<T, T> subject, Scheduler scheduler) { final Observable<T> observedOn = subject.observeOn(scheduler); SubjectWrapper<T> s = new SubjectWrapper<T>(new OnSubscribe<T>() { @Override public void call(Subscriber<? super T> o) { subscriberOf(observedOn).call(o); } }, subject); return s; }
@Override @SuppressWarnings("unchecked") public <R extends CouchbaseResponse> Observable<R> send(CouchbaseRequest request) { if (request instanceof InternalRequest) { handleInternalRequest(request); return (Observable<R>) request.observable().observeOn(environment.scheduler()); } else if (request instanceof ClusterRequest) { handleClusterRequest(request); return (Observable<R>) request.observable().observeOn(environment.scheduler()); } else { RingBufferMonitor ringBufferMonitor = RingBufferMonitor.instance(); ringBufferMonitor.addRequest(request); if (coreSendHook == null) { boolean published = requestRingBuffer.tryPublishEvent(REQUEST_TRANSLATOR, request); if (!published) { request.observable().onError(ringBufferMonitor.createException()); } return (Observable<R>) request.observable(); } else { Subject<CouchbaseResponse, CouchbaseResponse> response = request.observable(); Tuple2<CouchbaseRequest, Observable<CouchbaseResponse>> hook = coreSendHook .beforeSend(request, response); boolean published = requestRingBuffer.tryPublishEvent(REQUEST_TRANSLATOR, hook.value1()); if (!published) { response.onError(ringBufferMonitor.createException()); } return (Observable<R>) hook.value2(); } } }
@Override @SuppressWarnings("unchecked") public <R extends CouchbaseResponse> Observable<R> send(CouchbaseRequest request) { if (request instanceof InternalRequest) { handleInternalRequest(request); return (Observable<R>) request.observable().observeOn(environment.scheduler()); } else if (request instanceof ClusterRequest) { handleClusterRequest(request); return (Observable<R>) request.observable().observeOn(environment.scheduler()); } else { RingBufferMonitor ringBufferMonitor = RingBufferMonitor.instance(); ringBufferMonitor.addRequest(request); if (coreSendHook == null) { boolean published = requestRingBuffer.tryPublishEvent(REQUEST_TRANSLATOR, request); if (!published) { request.observable().onError(ringBufferMonitor.createException()); } return (Observable<R>) request.observable(); } else { Subject<CouchbaseResponse, CouchbaseResponse> response = request.observable(); Tuple2<CouchbaseRequest, Observable<CouchbaseResponse>> hook = coreSendHook .beforeSend(request, response); boolean published = requestRingBuffer.tryPublishEvent(REQUEST_TRANSLATOR, hook.value1()); if (!published) { response.onError(ringBufferMonitor.createException()); } return (Observable<R>) hook.value2(); } } }