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

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