Skip to content

Commit 4dac14b

Browse files
committed
chore: ensure GameScheduler schedules repeating tasks only once
- Added a `scheduled` flag to prevent multiple invocations of `scheduleRepeatingTask`. - Updated `schedule` methods to check and update the `scheduled` state before scheduling.
1 parent c437b34 commit 4dac14b

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

core/src/main/java/org/readutf/engine/task/GameScheduler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public class GameScheduler {
1919
private final GameSchedulerPlatform platform;
2020
private final Map<UUID, List<GameTask>> pendingTasks = new HashMap<>();
2121
private final Map<@NotNull UUID, @NotNull List<@NotNull GameTask>> gameTasks = new HashMap<>();
22+
private boolean scheduled = false;
2223

23-
public GameScheduler(GameSchedulerPlatform platform) {
24+
public GameScheduler(@NotNull GameSchedulerPlatform platform) {
2425
this.platform = platform;
25-
platform.scheduleRepeatingTask(this::tick);
2626
}
2727

2828
public void tick() {
@@ -69,6 +69,8 @@ public void tick() {
6969
* @param gameTask the task to schedule
7070
*/
7171
public void schedule(@NotNull Game<?, ?, ?> game, @NotNull GameTask gameTask) {
72+
if(!scheduled) platform.scheduleRepeatingTask(this::tick);
73+
7274
platform.executeTask(() -> {
7375
logger.info("Scheduling task {} for game {}", gameTask, game.getId());
7476
List<@NotNull GameTask> tasks = pendingTasks.getOrDefault(game.getId(), new ArrayList<>());
@@ -84,6 +86,8 @@ public void schedule(@NotNull Game<?, ?, ?> game, @NotNull GameTask gameTask) {
8486
* @param gameTask the task to execute
8587
*/
8688
public void schedule(@NotNull Stage<?, ?, ?> stage, @NotNull GameTask gameTask) {
89+
if(!scheduled) platform.scheduleRepeatingTask(this::tick);
90+
8791
GameTask wrapped = new GameTask() {
8892
@Override
8993
public void tick() {

0 commit comments

Comments
 (0)