# Свой способ связи Связь устройства с приложением называется `Bridge` - мост, все встроенные способы связи являются такими мостами. Можно добавить свою реализацию для любого способа связи и переопределить системный. Например можно сделать работу через MQTT или WS с использованием любой другой библиотеки. Делается это следующим образом: 1. Создать свой класс на базе `gh::Bridge` с наследованием конструктора 2. Реализовать методы `begin()` (необязательно), `end()` (необязательно), `tick()`, `send(BridgeData& data)` 3. Поступающие данные отправлять в `parse(AnyText url)` или `parse(AnyText url, AnyText data)` 4. Создать объект этого класса 5. Передать его адрес в `hub.addBridge()` Теперь ваш мост работает наравне с системными! ### Возможности моста У моста можно узнать тип подключения, а также выключить и включить его - отключенный мост пропускает данные. У моста можно вручную проверить, подключен ли сейчас через него клиент. В ручной реализации для websocket желательно ставить фокус при подключении клиента и снимать при отключении. ```cpp Connection connection(); // тип подключения void enable(); // включить void disable(); // выключить bool state(); // статус включен или выключен void setFocus(); // установить focus void clearFocus(); // снять focus bool getFocus(); // получить focus ``` ## Пример с Serial ```cpp GyverHub hub; class HubSerial : public gh::Bridge { public: using gh::Bridge::Bridge; // наследуем конструктор void begin() { Serial.begin(115200); } void tick() { // приложение пришлёт строку команды, завершённую нулём // читем команду и отправляем в parse if (Serial.available()) { String str = Serial.readStringUntil('\0'); parse(str); } } // это обработчик отправки, библиотека отправит в него данные // gh::BridgeData см. документацию void send(gh::BridgeData& data) { Serial.print(data.text); } }; // наследованный конструктор требует указать экземпляр GyverHub, тип связи и функцию GyverHub::parseHook HubSerial serial(&hub, gh::Connection::Serial, GyverHub::parseHook); void setup() { hub.addBridge(&serial); // подключаем мост hub.begin(); } ``` Ещё несколько примеров есть во встроенных примерах к библиотеке в папке /manual