
Добрый день, меня зовут Алексей, наша команда занимается разработкой игр и приложений.
Текущий год внес большие перемены в игровую индустрию.
Многие игровые компании покидают Россию, чтобы не лишиться заработков на
зарубежных площадках и, как следствие, своего бизнеса. Есть те, кто не планирует
уезжать из страны и подстраивается под текущие реалии, чтобы выжить. Мы относимся ко вторым. Об этом я хочу рассказать в данной статье и привести немного кода.
В одной из своих статей я уже вскользь упоминал о том, что наша игровая команда занимаемся проектом для бизнеса – системой бронирования переговорных комнат.
Изначально, этот проект позиционировался для нас как второстепенный, созданный под заказ, для одного из наших клиентов в начале 2020 года. Однако 2022 год заставил изменить к нему отношение.

Продажа лицензий позволяет нашей небольшой команде поддерживать положительный баланс, и продолжать работу над нашей текущей игрой Jaws & Claws.
Один из наших клиентов, обратился к нам с просьбой доработать систему, для ее взаимодействия с контурной подсветкой планшетов Philips 10BDL4151T.
Дорабатывать программное обеспечение под устаревшее оборудование бесперспективно и иногда требует больших трудозатрат. Но опыт работы в игровой индустрии, когда мы стараемся угодить нашим игрокам, сделал нас клиентоориентированной командой. Поэтому мы не хотели отказывать клиенту в выполнении данной работы.
Мы стали искать информацию, которая нам сможет помочь. Кроме примера работы с подсветкой на C#, мы дополнительно нашли документ, описывающий работу с устройствами Phillis через SICP протокол.
Этот документ развеял наши сомнения о том, что необходимо произвести данную доработку. Нет сомнений, что это поможет нам в дальнейшем при создании мультиплеера для нашей игры.
Когда я говорю знакомым, что доработка контурной подсветки поможет нам в работе над игрой, всегда слышу вопрос: «Что общего между лампочкой планшета и игрой в стиле файтинг-платформер?»
В последнее время мы всерьез задумались о необходимости добавить в игру режим мультиплеера. Он также будет использовать работу сокетами.
Для создания наших игр и приложений мы используем c++ и игровой движок cocos2d-x. Иногда это дает нам преимущество, иногда создает значительные ограничения и неудобства.
Теперь, когда описательная часть закончена, я предлагаю перейти к функциям, которые мы используем в нашем проекте для взаимодействия с контурной подсветкой планшетов Philips 10BDL4151T.
На текущей момент система использует пять вариантов подсветки:
выключено
красный
зеленый
желтый
серый
Цвет контурной подсветки устанавливается в функции по тегу.
// функция устанавливает цвет по тегу void CPhilipsLight::_setLedColorByTag(int colorTag) { if (!isAccess_ || colorTag_ == colorTag) return; colorTag_ = colorTag; switch (colorTag_) { case ColorTag::OFF: this->_setLedColor(Color3B::BLACK); break; case ColorTag::NOP: this->_setLedColor(Color3B(20, 20, 20)); break; case ColorTag::FREE: this->_setLedColor(Color3B::GREEN); break; case ColorTag::BUSY: this->_setLedColor(Color3B::RED); break; case ColorTag::DISCONNECT: this->_setLedColor(Color3B::YELLOW); break; default: break; } }
Далее, когда установлен код цвета по его тегу, необходимо генерировать набор данных для их последующей передачи, по примеру из документа компании Philips.

// функция устанавливает цвет контурной подсветки планшета void CPhilipsLight::_setLedColor(const Color3B &color) { char chechSum = 0x09 ^ 0x01 ^ 0x00 ^ 0xF3 ^ 0x01 ^ color.r ^ color.g ^ color.b; char sendData[SizeData]; sendData[0] = (char)0x09; sendData[1] = (char)0x01; sendData[2] = (char)0x00; sendData[3] = (char)0xF3; sendData[4] = (char)0x01; sendData[5] = (char)color.r; sendData[6] = (char)color.g; sendData[7] = (char)color.b; sendData[8] = chechSum; if (this->_setSendSoketDataLedColor(sendData, SizeData) < 0) isAccess_ = false; }
После того, как набор данных был сформирован их необходимо отправить на порт 5000 сетевого интерфейса планшета. (ServerPort = 5000, ServerUrl = 127.0.0.1)
// функция отправляет запрос для установки цвета контурной подсветки планшета int CPhilipsLight::_setSendSoketDataLedColor(const char *sendData, size_t len) { int result = 0; int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) return sockfd; struct sockaddr_in servaddr; bzero(&servaddr, sizeof(servaddr)); struct hostent *hostent1 = gethostbyname(ServerUrl); if(!hostent1) return -1; memcpy(&(servaddr.sin_addr), hostent1->h_addr_list[0], hostent1->h_length); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(ServerPort); if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) return -1; // отправка данных для изменения цвета result = send(sockfd, sendData, len, 0); close(sockfd); return result; }
Эта небольшая часть кода позволяет нам полноценно работать с контурной подсветкой планшета Philips.
Кроме этого, используя SICP протокол, можно менять настройки телевизоров Philips, например количество картинок в картинке. А также настройки другой техники от этого производителя. Я надеюсь, что приведенный мной код, кому-то в этом поможет.
В настоящее время, наша команда значительную часть времени тратит на работу с системой, именно по этой причине мы несколько раз уже переносили релиз нашей игры. Но нет никаких сомнений, что наш игровой проект, как и предыдущие проекты, будет доведен до релиза.
В завершение приведу ссылку на страницу нашей игры в Steam.
