Описание протокола OXD_TCP

Цель протокола

Организовать двустороннюю передачу данных между приложением на базе игрового движка (ниже, условно называем как клиент) и приложением, которое управляет динамической платформой (далее условно называем как сервер). 

Обмен данных осуществляется по средствам TCP протокола. Адрес и порт соединения должен быть настраиваемый. По умолчанию используется IP 127.0.0.1 и порт 8800.

Протокол состоит из набора сообщений, которые могут распознаются как команды, отчеты, поток данных.

 Команды получаемые клиентом

 Управление основным треком анимации (камера или транспорт)
 Управление уровнями
 Управление экраном
Справочная информация
Настройки клиента
Настройка режима STREAM
Управление локальным многопользовательским режимом

Ответы клиента


Данные в режиме SYNCH_FRAME

Данные отправляются клиентом через промежуток времени, установленный при помощи TIMER_SET.

Передача начинается после отправки команды START и заканчивается после передачи команд STOP, PAUSE

Клиент отправляет серверу строку: {F:[int],DT:[float],T:[float]} 

Это набор величин в формате JSON*, где:

  • F – номер кадра (frame)
  • DT – промежуток времени между пред идущим вызовом (delta time) в секундах.
  • T – общее время с момента запуска проигрывания в секундах

Пример: {F:125,DT:1.002856,T:5.678946}

Данные в режиме STREAM

Данные отправляются клиентом через промежуток времени, установленный при помощи TIMER_SET.

Передача начинается после отправки команды START и заканчивается после передачи команд STOP, PAUSE

Клиент отправляет серверу строку: {DT:[float],T:[float],X:[float],Y:[float],Z:[float],R:[float],P:[float],W:[float]}

Это набор величин в формате JSON*, где по умолчанию:

  • DT – промежуток времени между предидущим вызовом (delta time),
    DT напрямую зависит от FPS и установленного параметра TIMER. Например если TIMER установлен на 1.0000 сек, DT может отличаться в небольших пределах. Это связано с производительностью. DT является фактическим значением, которое высчитывается между вызовами.
  • T – общее время с момента запуска проигрывания в секундах
  • X – изменение координаты X за промежуток DT
  • Y – изменение координаты Y за промежуток DT
  • Z – изменение координаты Z за промежуток DT
  • R – текущее значение Roll в градусах
  • P - текущее значение Pitch в градусах
  • W – текущее значение Yaw в градусах

Пример: {DT:1.005895,X:1.556446,Y:0.523495,Z:0.413259,R:5.123495,P:20.493178,W:1.379545}

см. выше, как перенастроить вывод для STREAM

Управление эффектами

Данные отправляются клиентом в те моменты, которые прописаны сценарием приложения.

Передача возможна только после отправки команды START и заканчивается после передачи команд STOP, PAUSE

{FX:[string],P:[float]:,T:[float],ID:[int]}

Строка в формате JSON*, где:

  • FX — имя эффекта
    • WIND (ветер)
    • LIGHT (стробоскоп)
    • SPRAY (брызги)
    • SMOKE (дым)
    • SNAKE (змеи, «мышиные хвостики»)
    • SOAP (пузыри)
    • SNOW (снег)
    • SHAK (вибрация)
    • CUSTOM_1 (свободный не зарезервированный эффект №1)
    • CUSTOM_10 (свободный не зарезервированный эффект №10)
  • P — мощность (от 0 до 1)
  • T — промежуток времени (секунды) в котором работает эффект
  • ID - идентификатор эффектора в сцене 

Пример.
По пути следования попадаем в водопад, тригеры расставленные в приложении срабатывают и отправляют серверу строку: {FX:3,P:1.0:T:3.0}

Что должно интерпретироваться сервером как: «Включить эффект брызги на 3 секунды на полной мощности».

Если устройство создающее эффекты, не управляет мощностью, то поступить можно несколькими способами:

  1. Игнорировать мощность.
  2. Использовать дискредитацию, давать серию импульсов с определенной длительностью и частотой.

 

О формате JSON в протоколе


JSON BASIC
В протоколе OXD_TCP, JSON используется в слегка видоизмененном состоянии (облегченная версия, мы называем её JSON BASIC).
Отсутствуют любые кавычки, лишние пробелы, знаки переносов строки.
Предполагается использование встроенного разбора строк. Наличие фигурных скобок говорит о начале или завершении сообщения JSON, запятые разделяют пары «параметр:значение».
Двоеточие отделяет параметр от значения.
Упрощенный формат JSON, не содержит вложенных структур, как правило это всегда небольшие массивы состоящие из пар ИМЯ_КЛЮЧА:ЗНАЧЕНИЕ.

Развитие протокола OXD_TCP


Куда идем
Мы уже заложили в протокол максимум возможностей, но если этого не достаточно, то вы всегда можете обратиться к нам и мы расширим спецификацию.
Основной смысл развития заключается в том, что мы нечего не перечеркиваем.
Это означает, что разработчикам XD оборудования, если они уже выбрали для себя решение, не придется перестраиваться под каждое обновление протокола.
Все старые версии будут поддерживаться. Новые будут идти просто как дополнение.
Хотите - осваивайте и предлагайте. Ну если не хотите, то и не будем ничего добавлять.