Files
h-school/docs/phases/02-school-worker.md
T

33 lines
2.2 KiB
Markdown

# Фаза 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 в этой фазе. Не писать файл каждый тик.