2.2 KiB
2.2 KiB
Фаза 2. Работник школы и диск
Зависимости
Нет по коду клиента. Ломает текущий общий GameLoopService.
Зачем
Основа среза: каждая школа — свой поток, свой Arch World, свой файл. Пока ещё можно обойтись
часами без карты — сейв расширится в фазе 3, формат закладывать расширяемым.
Задачи
- Супервизор держит ящики
id →очередь; не трогаетWorld - У школы выделенный поток (
LongRunning), свой таймер фиксированного шага, свойWorld - Команды create/delete/open/close/running/speed идут в ящик, не в общий цикл
- Меню читает опубликованные снимки, как сейчас, без блокировки работника
- Кадры часов по-прежнему из работника в outbox соединения
- Сейв на диск: имя, id, часы, running, speedIndex; запись при create/delete, shutdown, редкий снимок часов (не 20 Гц)
- Старт процесса поднимает школы с диска
- Обновить инвариант в
AGENTS.md: трогает школу только её работник - Тесты AppHost: create → рестарт хоста (или явный reload) → школа на месте с тем же временем с разумной погрешностью снимка
Критерий готовности
dotnet testпроходит- Две школы тикают независимо (пауза одной не останавливает часы другой — уже так по симуляции; поток не должен это ломать)
- После перезапуска сервера список школ не пустой, если их создали
Стоп
Не грузить defs в этой фазе. Не писать файл каждый тик.