Хорошо, у меня есть игровой сервер, работающий в Java/Hibernate/Spring/Quartz. Игровые часы тикают с помощью кварцевого таймера, и это прекрасно работает.
Однако у меня есть много других вещей, которые должны происходить через определенные промежутки времени (в игровом, а не в реальном времени).
Например, каждые 24 часа игрового времени (~ 47 минут реального времени, в зависимости от множителя часов сервера) происходит множество различных игровых действий один раз в день, таких как пополнение запасов или что-то еще.
Теперь текущая система довольно грубая, но работает — у меня есть таблица в базе данных, которая по сути является cron — строковым ключом, временем выполнения следующего события, а затем часами, минутами, секундами и днями до следующего после этого. . Тикер времени проверяет это, а затем запускает сообщение с этим кодом (ключ строки событий) в очередь, добавляя дни, минуты, секунды к текущему времени и устанавливая это как следующее время выполнения.
Прослушиватель сообщений — это неприятная часть — он включает клавишу и нажимает один из своих методов.
Теперь я понимаю, что это может работать очень хорошо, но это действительно не устраивает меня. Каким было бы ваше решение, чтобы каждый фрагмент кода был в своем маленьком классе? Какой шаблон проектирования охватывает это? (уверен, что есть). У меня есть несколько идей, но хотелось бы услышать мнения.