package com.vtence.molecule.session; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import static java.util.concurrent.TimeUnit.HOURS; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; public class PeriodicSessionHouseKeeping { private static final long EVERY_HOUR = HOURS.toSeconds(1); private final ScheduledExecutorService scheduler; private final SessionHouse sessions; private long choresInterval; private ScheduledFuture<?> chores; public PeriodicSessionHouseKeeping(ScheduledExecutorService scheduler, SessionHouse sessions) { this(scheduler, sessions, EVERY_HOUR, SECONDS); } public PeriodicSessionHouseKeeping(ScheduledExecutorService scheduler, SessionHouse sessions, long choresInterval, TimeUnit timeUnit) { this.scheduler = scheduler; this.sessions = sessions; this.choresInterval = MILLISECONDS.convert(choresInterval, timeUnit); } public void start() { chores = scheduler.scheduleWithFixedDelay(sessions::houseKeeping, choresInterval, choresInterval, MILLISECONDS); } public void stop() { chores.cancel(false); } }