package app.playmancala.game; import app.playmancala.loop.Cancellable; import app.playmancala.loop.Scheduler; // The scheduled service that ends games whose running clock has reached zero, also when nobody is connected // (docs/specs/game-clock, R2.2). A move that arrives late is refused by GameManager itself, so how often this runs // only decides how soon the end is announced, never who wins. public class GameClockScheduler { public static final long CLOCK_CHECK_INTERVAL_MS = 1_000; private final Runnable endGamesOutOfTime; private final Scheduler scheduler; private final long intervalMs; private Cancellable timer; public GameClockScheduler(Runnable endGamesOutOfTime, Scheduler scheduler, long intervalMs) { this.endGamesOutOfTime = endGamesOutOfTime; this.scheduler = scheduler; this.intervalMs = intervalMs; } public void start() { if (timer != null) return; timer = scheduler.scheduleAtFixedRate(endGamesOutOfTime, intervalMs); } public void stop() { if (timer != null) timer.cancel(); timer = null; } }