Требуется написать управляемый по сети фонарь. Команды управления фонарь принимает от сервера фонаря. Необходимо реализовать простой сервер, который может отдавать команды фонарю и сам фонарь в виде клиентского приложения. Фонарь и сервер общаются по Протоколу Управления Фонарем, работающему поверх соединения TCP. Протокол Управления Фонарем (ПУФ) устроен следующим образом. Для изменения состояния фонаря сервер передает ему команду управления. Все команды кодируются в виде TLV (http://en.wikipedia.org/wiki/Type-length-value), при этом поле type имеет размер 1 байт, поле length — 2 байта и поле value — length байт. Все данные передаются по сети в Big Endian.
ПУФ версии 1 описывает три команды:
- ON (включить фонарь): type = 0x12, length = 0
- OFF (выключить фонарь): type = 0x13, length = 0
- COLOR (сменить цвет): type = 0x20, length = 3, value интерпретируется как новый цвет фонаря в RGB.
Предполагается, что в будущих версиях ПУФ могут появляться новые команды, однако структура TLV останется неизменной.
Реализация фонаря должна удовлетворять следующим требованиям:
- При запуске через командную строку передаются хост и порт (по умолчанию хост 127.0.0.1, порт 9999), подсоединяться по TCP и после этого начать отрабатывать протокол управления.
- При получении данных от сервера фонарь собирает целые команды (type + length + value) и, если type известен, обрабатывает команду, иначе молча ее игнорирует.
- При получении команды ON фонарь включается (отрисовку фонаря оставляем на ваше усмотрение).
- При получении команды OFF фонарь выключается.
- При получении команды COLOR фонарь меняет цвет.
- При завершении работы фонарь корректно закрывает соединение с сервером.
- Реализация фонаря позволяет легко добавлять любые новые команды.
Проработанность обработки исключительных ситуаций (ошибки установления соединения, обрывы соединения) — на ваше усмотрение.
Технологические требования:
- Задание принимается в виде исходников, готовых к сборке с помощью cmake под Linux.
- Репозиторий с кодом должен быть доступен на Bitbucket или Github.
Для сборки программы выполните следующие команды:
mkdir build
cd build
cmake ..
cmake --build .В отдельных эмуляторах терминалов запустите сервер фонаря (./LampServer) и несколько фонарей (./Lamp). Наберите на сервере команду и нажмите Enter.
Формат команды имеет следующий вид: <Номер фонаря> <Имя команды> <Аргументы команды>. Например:
- 1 on
- 1 off
- 2 color red
- 1 color blue
- 3 color green