33 lines
1.1 KiB
Java
33 lines
1.1 KiB
Java
|
|
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;
|
||
|
|
}
|
||
|
|
}
|