This commit is contained in:
2026-10-17 18:25:04 +07:00
parent 701bca234e
commit d3683ac6cf
15 changed files with 124 additions and 691 deletions
+21 -24
View File
@@ -7,7 +7,8 @@
внешнем дисплее. Аудио, видео, изображения и выбранные музыкальные плейлисты
читаются с диска. Пульт переключает показ и управляет воспроизведением локально.
После подготовки потеря интернета не мешает локальному показу и таймеру.
Полный пульт телефона работает в доверенной локальной сети одновременно с пультом компьютера.
Телефон управляет через существующий сервер сайта; приложение экрана получает с сервера
обновления состояния. При потере интернета доступен локальный пульт компьютера.
«Все материалы» в первой версии — все ресурсы, необходимые окну показа:
вступление, закрывающее видео, обложка, фон, материалы шагов плана, выбранные
@@ -71,23 +72,20 @@ Linux проверяется на обоих указанных дистрибу
5. Сервер проверяет право организатора на скачивание материалов. Существующий
API используется где достаточно; манифест добавляется минимальным расширением.
Токены не записываются в пакет игры и логи.
6. После подготовки основной процесс — единственный источник состояния локального показа.
Команды пульта компьютера через IPC и телефона через WebSocket обрабатываются
последовательно; состояние с возрастающей ревизией рассылается обоим пультам.
Серверная синхронизация не задерживает команды. Команды сайта не управляют
desktop-показом; возврат интернета не повторяет старые серверные команды.
7. Приложение по явному действию оператора раздаёт мобильный Vue-пульт со встроенного
HTTP-сервера на выбранном IPv4-интерфейсе. Код сопряжения, подтверждение на
компьютере и временная HttpOnly-cookie ограничивают доступ. Сеансы только в памяти;
отключение пульта отзывает их. Рабочая сеть — своя Wi-Fi/LAN или точка доступа:
HTTP не шифрует трафик. Сертификаты и управление через интернет не входят в MVP.
В сетевом API нет произвольного доступа к диску, IPC и токенам сайта.
8. Телефон управляет всеми режимами показа, шагами, таймером, музыкой, громкостью
и перемоткой. Подготовка игры и дисплея остаётся на компьютере. Команды имеют
идентификаторы для дедупликации; после потери связи управление блокируется,
показ продолжается. Переподключение получает снимок состояния без повтора команд.
Vue-компоненты и типы пультов общие внутри screen, различается транспорт.
Общий пакет с сайтом заранее не выделяется.
6. После подготовки основной процесс применяет локальные команды пульта компьютера
через IPC без ожидания сервера. Материалы воспроизводятся с диска.
7. Телефон использует существующий пульт на сайте и отправляет команды серверу.
Приложение экрана подключается к серверу как экранная сессия и получает обновления
через существующий API CreateScreenSession/GetScreenState. Текущий браузерный
экран опрашивает состояние раз в 1000 мс; desktop использует тот же серверный поток.
HTTP-сервер, WebSocket-сервер, сопряжение и отдельный мобильный пульт в desktop не нужны.
8. Подключение игры, авторизация и получение серверных обновлений реализуются в SCREEN-006.
Серверные команды проходят через локальный контроллер и используют подготовленные
файлы. Одну версию команды нельзя применять повторно. При потере сети телефон
не управляет desktop; уже запущенное воспроизведение и локальный пульт продолжают
работать. При восстановлении сети необходимо сверить версии и не повторять
устаревшую команду поверх локальных действий; правила согласования проверяются
в SCREEN-006 на существующих ScreenState/ScreenCommand.
9. Текущие результаты игры загружаются онлайн с отметкой времени; офлайн доступны
только последние сохранённые данные с явным предупреждением оператору.
Серверная игра, ответы команд и вычисление новых результатов офлайн не работают.
@@ -113,15 +111,14 @@ Linux проверяется на обоих указанных дистрибу
## Порядок работ
1. SCREEN-001: проверить Electron на всех шести вариантах, два дисплея, локальное
медиа и задержки, техническое подключение телефона по LAN; порог задержки — на M1.
медиа и задержки; порог задержки — на M1.
2. SCREEN-002: получить полный и защищённый пакет материалов с сервера.
3. SCREEN-003: реализовать надёжную загрузку и локальное хранение пакетов.
4. SCREEN-004: реализовать локальный проигрыватель и команды, подготовку медиа.
5. SCREEN-005: собрать пульт, план показа и режимы экрана.
6. SCREEN-009: полный пульт телефона, сопряжение, общее состояние и восстановление связи.
7. SCREEN-006: добавить подключение игры и согласование с сервером.
8. SCREEN-007: обработать отключение дисплея, звук, сон и восстановление.
9. SCREEN-008: собрать артефакты для всех шести вариантов и провести приёмку на площадке.
6. SCREEN-006: добавить подключение игры, обновления экрана с сервера и управление с телефона через сайт.
7. SCREEN-007: обработать отключение дисплея, звук, сон и восстановление.
8. SCREEN-008: собрать артефакты для всех шести вариантов и провести приёмку на площадке.
После SCREEN-001 — решение о продолжении по результатам всей матрицы платформ.
Разработка на одной ОС не заменяет аппаратную проверку остальных ОС и архитектур,
@@ -139,7 +136,7 @@ Linux проверяется на обоих указанных дистрибу
- В SCREEN-001 для каждой тестовой конфигурации зафиксировать ОС, архитектуру,
CPU/RAM, проектор/переходник, аудиовыход, форматы, разрешение и размер медиа.
- Полное управление игрой, локальный Go-сервер/БД, редактирование сценария,
автообновления и управление desktop через интернет — за пределами MVP.
автообновления и прямое управление desktop с телефона по LAN — за пределами MVP.
- Подпись и notarization зависят от наличия Apple Developer; без них не обещать
установку без предупреждений Gatekeeper. Для Windows отдельно зафиксировать наличие сертификата подписи и
возможные предупреждения установки. Учётные данные не хранить в репозитории.