В планах попробовать добавить управление этими приставками
Все передаваемые сообщения являются JSON объектами.
-------------------------------------------------------
Клиентское приложение при нажатии на клавишу поиска устройств в сети начинает отправлять 1 раз в секунду broadcast message на порт(<указать порт>) на протяжении всего времени поиска.
Формат сообщения:
----------------------------------------------
BroadcastMSG
----------------------------------------------
{
"protocol":"remote_stb_1.0" //название протокола
"port":6777 //порт
}
В свою очередь приставка слушает <указать порт> в ожидании сообщения(BroadcastMSG)
После каждого полученного такого сообщения приставка отправляет сообщение с информацией о себе на клиентское приложение(смартфон) на указанный в BroadcastMSG порт.
Структура объекта DeviceInfo
----------------------------------------------
DeviceInfo
----------------------------------------------
{
"msgType": "Info"
"name":"My Device A20" //имя устройства
"type":"MAG260-A20", //тип\модель устройства
"port": 7776, //порт, на котором устройство готово принимать комманды
"serialNumber":"23436478", //серийный номер устройства
"screenHeight":720, //Размер разрешения изображения устройства по вертикали в пикселях
"screenWidth":1280, //Размер разрешения изображения устройства по горизонтали в пикселях
"modes":["TOUCHSCREEN", "MOUSE", "KEYBOARD"] //массив строк. Имена режимов управления в которых устройство может работать
"protocolVersion":"1.0" //строка. Номер версии протокола
}
После опроса сети на наличие готовых для работы устройств(приставок) в клиентском приложении формируется список(приставок).
У пользователя есть возможность выбрать для управления одну из приставок.
После того как пользователь выбрал конкретную приставку для удаленного управления происходит этап авторизации.
Авторизация происходит при помощи процедуры - ping.
Перед началом отправки команд мобильное приложение посылает pingRequest объект на приставку и ожидает pingResponse.
Если расшифровать pingResponse, который пришел с приставки на мобильное приложение удалось - авторизация прошла успешно. Если не удалось, то мобильное приложение уведомляет об этом пользователя и блокирует возможность работы с выбранным устройством(приставкой).
На любое сообщение которое приставка не смогла расшифровать отправляется зашифрованный объект pingResponse.
Шифрование производится по алгоритму AES-256-CBC.
Если пользователь ввел пароль меньше необходимой длины ключа(исходя из требований алгоритма), то все недостающие символы заполняются нулями(null).
----------------------------------------------
pingRequest
----------------------------------------------
{
"msgType": "pingRequest"
}
----------------------------------------------
pingResponse
----------------------------------------------
{
"msgType": "pingResponse"
}
В случае удачной авторизации пользовательское приложение получает возможность предоставить пользователю функционал по управлению устройством.
Управление устройством(приставкой) осуществляется при помощи команд. Каждая команда - объект.
Каждая команда шифруется!
Список команд:
----------------------------------------------
Commands
----------------------------------------------
КАЖДЫЙ объект должен обязательно содержать поле - msgType.
----------------------------------------------
mouseMove
----------------------------------------------
//х,у значения сдвига мышки по оси Х и У соответственно
{
"msgType": "mouseMove"
"y":0,
"x":-50
}
{"msgType": "mouseMove", "y":0, "x":-50}
----------------------------------------------
keyboardKey
----------------------------------------------
http://code.metager.de/source/xref/andr ... Event.java
{
"msgType": "keyboardKey"
"metaState":0, //битовая маска зажатых клавиш(например: SHIFT+CTRL)
"keycode":20, //код клавиши
"unicode": "f" //название клавиши
"action": "press", "release" //строка. нажата\отжата клавиша(тип события)
}
----------------------------------------------
motion
----------------------------------------------
{
"msgType": "motion"
"action":0, //http://code.metager.de/source/xref/andr ... Event.java
"y":430,
"x":910
}
----------------------------------------------
mouseClick
----------------------------------------------
{
"msgType": "mouseClick"
button : "left", "right" //имя кнопки
"action": "press", "release" //строка. тип события
}
----------------------------------------------
mouseRoll
----------------------------------------------
{
"msgType": "mouseRoll"
"value": 5 //число. значение на которое осуществили скролл
"orientation": "horizontal", "vertical" //строка. тип скролла.
}
Так же принимающее устройство может запросить вызов клавиатуры на клиентском устройстве при помощи команды :
Это нужно например при попадании курсора в поле ввода.
----------------------------------------------
keyboardRequest
----------------------------------------------
{
"msgType": "keyboardRequest";
}
На каждую полученную команду "pingRequest" (вне зависимости от стороны) необходимо ответить командой pingResponse.
----------------------------------------------
pingRequest
----------------------------------------------
{
"msgType": "pingRequest"
}
----------------------------------------------
pingResponse
----------------------------------------------
{
"msgType": "pingResponse"
}
Устройство(приставка) может запросить смену языка ввода на мобильном приложении отправкой команды "setLanguage".
Если на мобильном устройстве такого языка не окажется - приложение должно уведомить об этом пользователя диалоговым окном и предложить установить необходимый язык ввода в системе.(если возможно).
----------------------------------------------
setLanguage
----------------------------------------------
{
"msgType": "setLanguage"
"value": "EN" //Двухсимвольное обозначение языка
}