4.2 KiB
4.2 KiB
Фаза 19. Присутствие на экране
Зависимости
Зачем
Школа впервые видна живой: в дереве идут числа, на перемене коридор наполняется, к звонку кабинеты сходятся обратно.
Задачи
- Новое сообщение присутствия, ~2 раза в секунду, только по открытой школе: узлы со счётчиками и люди с их узлом и состоянием
- Снимок карты становится статическим: люди и текущий урок уезжают в присутствие, структура уходит один раз при открытии. Пересылка на смене слота убирается
ProtocolCodec.cs,protocol.tsиdocs/protocol.mdправятся тем же коммитом, версия бумпится до 7- Справочник «id → имя» по HTTP: клиент забирает один раз при открытии школы и перечитывает, увидев незнакомый id. Имена в кадр присутствия не кладутся
- Дерево: число людей рядом с узлом, живое. Пустой узел остаётся без числа
- Панель локации: кто здесь сейчас, списком с именами; урок в комнате берётся из присутствия, а не из снимка
- Карточка человека: где он сейчас — узел, «в пути» или «вне школы»
- Присутствие приходит по всей школе, выбранный узел фильтрует клиент
- Кадр часов несёт разрешение на пропуск; клиент это разрешение не вычисляет
- Намерение «пропустить» — своё сообщение, как пауза и скорость. Сервер проверяет условия заново: кадр из браузера не доверенный
- Кнопка рядом с паузой и скоростями: появляется только когда сервер разрешил, подписана датой, к которой перенесёт
- Строки через
t(...), обе локали
Тесты, без которых фаза не закрыта
- Байтовая раскладка присутствия сходится с обеих сторон
- Круговой прогон сообщения: сервер → клиент → те же значения
- Снимок карты больше не содержит людей и урока
- Кадр часов с разрешением на пропуск читается обеими сторонами одинаково
- Пропуск, присланный в учебное время, сервер отбрасывает, а не исполняет
Критерий готовности
- Открыть школу в 8:25 и увидеть, как двор и вестибюль пустеют, а кабинеты наполняются
- На перемене коридор — самый людный узел дерева
- В каникулы дерево без чисел, а карточки говорят «вне школы»
- В пятницу после уроков дождаться, пока школа опустеет, нажать «пропустить» и оказаться в понедельник в 6:00; вечером буднего дня та же кнопка ведёт в завтрашнее утро
dotnet test,npm testиnpm run buildпроходят
Стоп
Не рисовать перемещение анимацией. Не заводить серверный OpenLocation. Не добавлять нужды и
действия.