You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
3.4 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Свой способ связи
Связь устройства с приложением называется `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