package reactor.core.scheduler;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import reactor.core.Disposable;
import reactor.core.Disposables;
import reactor.core.Scannable;
final class ExecutorServiceWorker implements Scheduler.Worker, Disposable, Scannable {
final ScheduledExecutorService exec;
final Composite tasks;
ExecutorServiceWorker(ScheduledExecutorService exec) {
this.exec = exec;
this.tasks = Disposables.composite();
}
@Override
public Disposable schedule(Runnable task) {
return Schedulers.workerSchedule(exec, tasks, task, 0L, TimeUnit.MILLISECONDS);
}
@Override
public Disposable schedule(Runnable task, long delay, TimeUnit unit) {
return Schedulers.workerSchedule(exec, tasks, task, delay, unit);
}
@Override
public Disposable schedulePeriodically(Runnable task,
long initialDelay,
long period,
TimeUnit unit) {
return Schedulers.workerSchedulePeriodically(exec,
tasks,
task,
initialDelay,
period,
unit);
}
@Override
public void dispose() {
tasks.dispose();
}
@Override
public boolean isDisposed() {
return tasks.isDisposed();
}
@Override
public Object scanUnsafe(Attr key) {
if (key == Attr.BUFFERED) return tasks.size();
if (key == Attr.TERMINATED || key == Attr.CANCELLED) return isDisposed();
if (key == Attr.NAME) return "ExecutorServiceWorker";
return Schedulers.scanExecutor(exec, key);
}
}