
com.github.zella.rxprocess2.AsStdOut Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rx-process2_2.12 Show documentation
Show all versions of rx-process2_2.12 Show documentation
rx-java2 wrapper for NuProcess
The newest version!
package com.github.zella.rxprocess2;
import com.github.zella.rxprocess2.errors.ProcessException;
import com.github.zella.rxprocess2.errors.ProcessTimeoutException;
import com.zaxxer.nuprocess.NuProcess;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import java.util.concurrent.TimeUnit;
class AsStdOut {
private final RxNuProcessBuilder pb;
AsStdOut(RxNuProcessBuilder pb) {
this.pb = pb;
}
Observable create(long timeout, TimeUnit timeUnit) {
return Observable.create((ObservableOnSubscribe) emitter -> {
ColdStdoutHandler handler = new ColdStdoutHandler(emitter);
pb.builder.setProcessListener(handler);
NuProcess process = pb.builder.start();
emitter.setCancellable(() -> process.destroy(true));
}).takeUntil(Observable.timer(timeout, timeUnit).map(bytes -> {
throw new ProcessTimeoutException(Integer.MIN_VALUE);//like nuprocess
}));
}
static class ColdStdoutHandler extends BaseRxHandler {
final ObservableEmitter rxOut;
ColdStdoutHandler(ObservableEmitter rxOut) {
this.rxOut = rxOut;
}
@Override
void onNext(byte[] value) {
rxOut.onNext(value);
}
@Override
void onError(ProcessException error) {
if (!rxOut.isDisposed()) rxOut.onError(error);
}
@Override
void onComplete() {
rxOut.onComplete();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy