All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.zella.rxprocess2.AsStdOut Maven / Gradle / Ivy

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