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

com.flash3388.flashlib.vision.SourceSinglePollTask Maven / Gradle / Ivy

package com.flash3388.flashlib.vision;

import com.flash3388.flashlib.time.Clock;
import com.flash3388.flashlib.time.Time;
import com.flash3388.flashlib.util.logging.Logging;
import org.slf4j.Logger;

public class SourceSinglePollTask implements Runnable {

    protected static final Logger LOGGER = Logging.getLogger("Vision", "SourcePollTask");

    private final Source mSource;
    private final Pipeline mPipeline;
    private final SourcePollingObserver mObserver;
    private final Clock mClock;

    public SourceSinglePollTask(Source source,
                                Pipeline pipeline,
                                SourcePollingObserver observer,
                                Clock clock) {
        mSource = source;
        mPipeline = pipeline;
        mObserver = observer;
        mClock = clock;
    }

    @Override
    public void run() {
        runOnce();
    }

    protected final Time runOnce() {
        Time startTime = mClock.currentTime();

        LOGGER.trace("Starting polling process");
        mObserver.onStartProcess();
        try {
            T data = mSource.get();
            mPipeline.process(data);
        } catch (Throwable t) {
            LOGGER.debug("Polling process encountered an error", t);
            mObserver.onErroredProcess(t);
        }

        Time endTime = mClock.currentTime();
        Time runTime = endTime.sub(startTime);

        LOGGER.trace("Finished iteration of polling process. runtime={}", runTime.valueAsMillis());
        mObserver.onEndProcess(runTime);

        return runTime;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy