package freenet.support;
import freenet.client.async.ClientContext;
import freenet.client.async.PersistentJob;
import freenet.client.async.PersistentJobRunner;
import freenet.client.async.PersistentJobRunnerImpl;
import freenet.node.PrioRunnable;
import freenet.support.io.NativeThread;
/** A PersistentJobRunner that isn't persistent. Convenient for transient requests, code doesn't
* need messy if(persistent) everywhere. */
public class DummyJobRunner implements PersistentJobRunner {
private static volatile boolean logMINOR;
static {
Logger.registerClass(DummyJobRunner.class);
}
final Executor executor;
final ClientContext context;
public DummyJobRunner(Executor executor, ClientContext context) {
this.executor = executor;
this.context = context;
}
@Override
public void queue(final PersistentJob job, final int priority) {
if(logMINOR) Logger.minor(this, "Running job off thread: "+job);
executor.execute(new PrioRunnable() {
@Override
public void run() {
if(logMINOR) Logger.minor(this, "Starting job "+job);
job.run(context);
}
@Override
public int getPriority() {
return priority;
}
});
}
@Override
public void queueNormalOrDrop(PersistentJob job) {
queue(job, NativeThread.NORM_PRIORITY);
}
@Override
public void setCheckpointASAP() {
// Ignore.
}
@Override
public boolean hasLoaded() {
return true;
}
@Override
public void queueInternal(PersistentJob job, int threadPriority) {
queue(job, threadPriority);
}
@Override
public void queueInternal(PersistentJob job) {
queueInternal(job, NativeThread.NORM_PRIORITY);
}
@Override
public CheckpointLock lock() {
return new CheckpointLock() {
@Override
public void unlock(boolean forceWrite, int threadPriority) {
// Do nothing.
}
};
}
@Override
public boolean newSalt() {
return false;
}
@Override
public boolean shuttingDown() {
return false;
}
}