Update wire protocol to version 7 and enhance presence management features
ci / server (push) Failing after 3m44s
ci / client (push) Successful in 15s

- Bumped the wire protocol version to 7, reflecting significant changes in the communication structure.
- Introduced a new presence message type for real-time occupancy updates, including node activity and individual presence states.
- Updated the API to include a directory endpoint for fetching short id→name mappings, improving client-side name resolution.
- Revised the map snapshot structure to be static, with people and current lessons now handled through the presence stream.
- Enhanced client-side handling of presence updates, including UI adjustments to display live occupancy and activity.
- Updated documentation to reflect the new protocol features and changes in presence management.
- Added tests to validate the new presence functionalities and ensure robust handling of real-time data.
This commit is contained in:
Leonid Pershin
2026-08-19 17:00:53 +03:00
parent 4137400621
commit 3c54f981b7
31 changed files with 1025 additions and 373 deletions
+17 -17
View File
@@ -12,33 +12,33 @@
## Задачи
- [ ] Новое сообщение присутствия, ~2 раза в секунду, только по открытой школе: узлы со
- [x] Новое сообщение присутствия, ~2 раза в секунду, только по открытой школе: узлы со
счётчиками и люди с их узлом и состоянием
- [ ] Снимок карты становится **статическим**: люди и текущий урок уезжают в присутствие,
- [x] Снимок карты становится **статическим**: люди и текущий урок уезжают в присутствие,
структура уходит один раз при открытии. Пересылка на смене слота убирается
- [ ] `ProtocolCodec.cs`, `protocol.ts` и `docs/protocol.md` правятся тем же коммитом, версия
- [x] `ProtocolCodec.cs`, `protocol.ts` и `docs/protocol.md` правятся тем же коммитом, версия
бумпится до 7
- [ ] Справочник «id → имя» по HTTP: клиент забирает один раз при открытии школы и перечитывает,
- [x] Справочник «id → имя» по HTTP: клиент забирает один раз при открытии школы и перечитывает,
увидев незнакомый id. Имена в кадр присутствия не кладутся
- [ ] Дерево: число людей рядом с узлом, живое. Пустой узел остаётся без числа
- [ ] Панель локации: кто здесь сейчас, списком с именами; урок в комнате берётся из присутствия,
- [x] Дерево: число людей рядом с узлом, живое. Пустой узел остаётся без числа
- [x] Панель локации: кто здесь сейчас, списком с именами; урок в комнате берётся из присутствия,
а не из снимка
- [ ] Карточка человека: где он сейчас — узел, «в пути» или «вне школы»
- [ ] Присутствие приходит по всей школе, выбранный узел фильтрует клиент
- [ ] Кадр часов несёт разрешение на пропуск; клиент это разрешение **не вычисляет**
- [ ] Намерение «пропустить» — своё сообщение, как пауза и скорость. Сервер проверяет условия
- [x] Карточка человека: где он сейчас — узел, «в пути» или «вне школы»
- [x] Присутствие приходит по всей школе, выбранный узел фильтрует клиент
- [x] Кадр часов несёт разрешение на пропуск; клиент это разрешение **не вычисляет**
- [x] Намерение «пропустить» — своё сообщение, как пауза и скорость. Сервер проверяет условия
заново: кадр из браузера не доверенный
- [ ] Кнопка рядом с паузой и скоростями: появляется только когда сервер разрешил, подписана
- [x] Кнопка рядом с паузой и скоростями: появляется только когда сервер разрешил, подписана
датой, к которой перенесёт
- [ ] Строки через `t(...)`, обе локали
- [x] Строки через `t(...)`, обе локали
## Тесты, без которых фаза не закрыта
- [ ] Байтовая раскладка присутствия сходится с обеих сторон
- [ ] Круговой прогон сообщения: сервер → клиент → те же значения
- [ ] Снимок карты больше не содержит людей и урока
- [ ] Кадр часов с разрешением на пропуск читается обеими сторонами одинаково
- [ ] Пропуск, присланный в учебное время, сервер отбрасывает, а не исполняет
- [x] Байтовая раскладка присутствия сходится с обеих сторон
- [x] Круговой прогон сообщения: сервер → клиент → те же значения
- [x] Снимок карты больше не содержит людей и урока
- [x] Кадр часов с разрешением на пропуск читается обеими сторонами одинаково
- [x] Пропуск, присланный в учебное время, сервер отбрасывает, а не исполняет
## Критерий готовности
+1 -1
View File
@@ -83,7 +83,7 @@
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [18. Присутствие и ходьба](18-presence-walking.md) | ✅ | `HSchool.Ai`, место человека, маршруты, приход и уход |
| [19. Присутствие на экране](19-presence-screen.md) | | Своё сообщение ~2 Гц, числа в дереве, статический снимок карты, пропуск пустого времени |
| [19. Присутствие на экране](19-presence-screen.md) | | Своё сообщение ~2 Гц, числа в дереве, статический снимок карты, пропуск пустого времени |
**Этап B — поведение.** Появляются нужды, действия и выбор между ними и обязанностью.