up
This commit is contained in:
@@ -107,3 +107,70 @@
|
||||
Инструкция ручной проверки — docs/SCREEN-005_ACCEPTANCE.md, запуск npm run acceptance.
|
||||
- Следующий шаг: SCREEN-006 — существующая авторизация, выбор игры/скачивание
|
||||
через интерфейс, снимок результатов и получение команд существующего сервера.
|
||||
|
||||
## SCREEN-006 — Подключение игры и синхронизация с сервером
|
||||
|
||||
- Статус: `DONE`
|
||||
- Зависимости: SCREEN-002, SCREEN-005 (DONE, см. COMPLETED_TASKS.md).
|
||||
- Цель: выбирать доступную организатору игру онлайн и сохранять автономность показа.
|
||||
- Объём: существующая авторизация, список игр, загрузка пакета, снимок результатов,
|
||||
индикатор связи, проверка новой версии материалов, синхронизация статуса показа.
|
||||
Телефон отправляет команды существующему серверу сайта; desktop получает
|
||||
обновления через экранную сессию и GetScreenState (существующий polling 1000 мс).
|
||||
Серверные команды применяются локальным контроллером к подготовленным файлам;
|
||||
повторная версия не применяется дважды. Прямого подключения телефона к desktop нет.
|
||||
Уточнить минимальный серверный контракт по фактической реализации.
|
||||
- Готовность: готовая игра открывается после перезапуска офлайн; секреты хранятся
|
||||
средствами ОС, не в пакете; истечение сессии не обрывает уже подготовленный
|
||||
локальный показ; обновления активируются явно. Результаты имеют время снимка.
|
||||
Возврат сети не повторяет устаревшие команды поверх локальных действий.
|
||||
При доступном сервере телефон управляет показом через существующий сайт; без сети
|
||||
воспроизведение и пульт компьютера продолжают работать.
|
||||
- Проверка: сценарии offline/reconnect/истёкшей сессии/обновления игры; проверки
|
||||
затронутых репозиториев; существующий браузерный экран продолжает работать.
|
||||
- Не входит: полноценная офлайн-игра, LAN-сервер и отдельный мобильный пульт desktop.
|
||||
- Дата: 2026-10-17. Реализация только screen; бэкенд, сайт и protobuf не менялись.
|
||||
- Результат: вход по email/паролю, проверка существующих прав, список игр,
|
||||
единое обновление JWT для конкурентных запросов, выход без прерывания показа.
|
||||
Токены и экранная сессия остаются в main; сохранение через safeStorage отдельно
|
||||
от пакетов. При недоступном шифровании ОС (включая Linux basic_text) вход только
|
||||
в памяти. Пароль не сохраняется, отказ в правах удаляет сохранённый вход.
|
||||
- Материалы: загрузка/прогресс/отмена/проверка описания/повторная загрузка/удаление
|
||||
через существующий PackageStore. Выбранная игра обновляется только при закрытом
|
||||
показе; на время подготовки запрещены её открытие и смена выбора. Ошибка/отмена
|
||||
сохраняют прежний пакет; новая версия включается остановленной. Ключ выбранного
|
||||
пакета сохраняется, после перезапуска проверенная игра доступна офлайн без
|
||||
автоматического открытия окна и звука. Снимок результатов сохраняется отдельно
|
||||
по ключу пакета, содержит только поля таблицы и время получения; ошибка API
|
||||
оставляет последний успешный снимок. Сервер выдаёт результаты после finish.
|
||||
- Управление: по выбору владельца общий пульт телефона и компьютера. Создание и
|
||||
привязка экранной сессии существующим API; GetScreenState раз в 1000 мс только
|
||||
при открытом показе, без параллельных запросов. Первая версия при подключении,
|
||||
повторном открытии и восстановлении сети — исходная отметка без старых команд.
|
||||
Локальные действия немедленны и не рассылаются другим экранам. Версии int64
|
||||
сравниваются без потери точности, повторы и откат версии не повторяют команды;
|
||||
устаревшие ответы от другого окна/пакета/сессии отклоняются. Звук учитывается
|
||||
независимо от версии, первоначальное назначение звука не запускает медиа.
|
||||
Неподготовленные плейлисты не стримятся; переход музыки локальный, серверный
|
||||
AdvanceScreenMusic вызывается однократно только для соответствующего трека.
|
||||
- Контракт: сервер не принимает точные подтверждения проигрывания/ошибки от экрана.
|
||||
На сайте сохраняется существующий heartbeat connected/disconnected; фактические
|
||||
подтверждения видны в desktop. Последнее состояние может объединять несколько
|
||||
команд между опросами. metadataVersion не обнаруживает замену байтов по тому же
|
||||
URL, для этого нужна повторная загрузка. После неопределённого исхода перехода
|
||||
музыки повторного POST нет. Права и публичная выдача файлов остались прежними.
|
||||
- Проверки: type-check, ESLint, Stylelint, 63 теста (17 новых), сборка и GUI smoke —
|
||||
PASS. GUI с реальным тестовым HTTP-сервером проверил форму входа, загрузку,
|
||||
привязку, серверный play локального WAV, запрет обновления во время показа,
|
||||
локальную паузу при повторном опросе, offline/reconnect без старого STOP,
|
||||
новую команду после reconnect, результаты/выход и запреты IPC для окна показа.
|
||||
Старые сценарии всех восьми режимов, медиа, Range и preview также прошли.
|
||||
git diff --check — PASS; новые зависимости не добавлены, commit/push не выполнялись.
|
||||
- Ограничения: тестовый сервер воспроизводит текущий JSON-контракт; рабочий сервер,
|
||||
реальные игровые файлы и прежний браузерный экран вручную не проверялись.
|
||||
GUI выполнен на Linux x64 с синтетическим внешним дисплеем и тестовыми флагами
|
||||
no-sandbox/mute-audio/disable-gpu. Хранилища секретов остальных ОС, физический
|
||||
звук/проектор и матрица платформ остаются для ручной приёмки; релизные архивы
|
||||
не пересобирались. SCREEN-001/SCREEN-004 сохраняют IN_PROGRESS.
|
||||
- Инструкция: docs/SCREEN-006_ACCEPTANCE.md. Следующий этап: SCREEN-007 —
|
||||
устойчивость при отключении дисплея, управление сном и восстановление окон.
|
||||
|
||||
Reference in New Issue
Block a user