54 lines
3.9 KiB
Markdown
54 lines
3.9 KiB
Markdown
# Нарезка проектов (целевая)
|
||
|
||
Сейчас в коде: `Protocol ← Server → Simulation`. Этого мало, когда появятся defs, карта и моды.
|
||
Класть каталог в Simulation (рядом с Arch) или в Server (рядом с Kestrel) — оба варианта смешают
|
||
слои. Ниже — куда что идёт в этом срезе. `architecture.md` правится, когда код так и станет.
|
||
|
||
## Зависимости
|
||
|
||
```
|
||
Protocol — ни на кого из игровых проектов (только байты)
|
||
Content — ни на Protocol, ни на Simulation, ни на ASP.NET
|
||
Simulation → Content (каталог и раскладка, без файловых путей хоста)
|
||
Server → Protocol, Simulation, Content
|
||
Client — своя сторона Protocol (TS) + HTTP
|
||
```
|
||
|
||
Клиент по-прежнему не ссылается на C#-проекты.
|
||
|
||
## Кто чем владеет
|
||
|
||
| Проект | Да | Нет |
|
||
| --- | --- | --- |
|
||
| **HSchool.Content** (новый) | Типы def, JSONC-загрузчик, наследование, патчи, слияние локалей, граф карты, валидация связности | Arch, часы, HTTP, потоки, пути `mods/` с диска хоста |
|
||
| **HSchool.Simulation** | `School`, `GameClock`, Arch `World`, тик, применение раскладки к миру | Kestrel, сокеты, `Directory.Enumerate`, сейв-файлы |
|
||
| **HSchool.Server** | Хост, супервизор, работник-поток, `mods/` и `saves/` из конфига, HTTP/WS, DTO запросов | Правила «комната должна быть связана», схема Chair |
|
||
| **HSchool.Protocol** | Кадры сокета, в том числе снимок карты и locale в Hello | Имена комнат, JSONC |
|
||
| **HSchool.Client** | DOM, `t()` для хрома, рисует снимок | Файлы модов, симуляция |
|
||
|
||
Content принимает уже открытые потоки или список документов (сервер прочитал папки и отдал
|
||
байты/пути через узкий порт вроде «вот корневые каталоги этих id»). Тогда тесты Content кормят
|
||
фикстурами из `tests/`, без `appsettings`.
|
||
|
||
Сейв: **форма** (часы + id модов + раскладка) собирается из типов Simulation/Content; **запись
|
||
файла** — Server, и только с потока работника.
|
||
|
||
## Зачем не сваливать в Simulation
|
||
|
||
Arch и фиксированный тик — про живую школу. Парсер JSONC, `defName` и проверка графа не знают,
|
||
что такое tick. Их гоняют сотни раз в юните без мира. Если загрузчик сидит в Simulation, любой
|
||
тест каталога тащит ECS и наоборот.
|
||
|
||
## Зачем не сваливать в Server
|
||
|
||
Иначе связность карты и last-wins нельзя проверить без Aspire. Хост должен быть тонким:
|
||
найти папки, сериализовать HTTP, крутить потоки.
|
||
|
||
## Тесты
|
||
|
||
- `tests/HSchool.Content.Tests` — фикстуры JSONC, коллизии имён, дырявый граф, двор обязателен.
|
||
- `HSchool.Simulation.Tests` — часы, тик, «школа с таким каталогом живёт».
|
||
- `HSchool.AppHost.Tests` — create с картой, рестарт, сейв на диске.
|
||
|
||
Ориентир в `AGENTS.md` обновить в фазе, которая заводит проект (сейчас это фаза 3).
|