|
lacteApp
C++17 service for Lacte hardware
|
ModelBusClient: собственный клиент Model на шине lacte - создаётся и принадлежит самому Model (см. More...
#include <Bus.hpp>#include <cstdint>#include <functional>#include <memory>#include <optional>#include <string>#include <utility>#include "bus/Envelopes.hpp"Go to the source code of this file.
Classes | |
| class | lacte::bus::ModelBusHandler |
| Серверный контракт: реализуйте эти методы, и ModelBusClient::ServeModel() будет их обслуживать. More... | |
| class | lacte::bus::CallbackModelBusHandler |
| ModelBusHandler, реализованный через пользовательские колбэки. More... | |
| class | lacte::bus::ModelBusClient |
Namespaces | |
| namespace | lacte |
| namespace | lacte::bus |
Variables | |
| constexpr uint32_t | lacte::bus::K_MODEL_BUS_ADDRESS = 1 |
| Предпочтительный адрес клиента Model (НЕ собственный own_address_ общей шины, который LacteApp выбирает отдельно) - не обязан быть уникальным в рамках всего приложения (insitech::bus::Hub разрешает конфликты в set_interfaces()), должен лишь отличаться от адресов других клиентов на той же общей шине. | |
ModelBusClient: собственный клиент Model на шине lacte - создаётся и принадлежит самому Model (см.
Model::ConnectBus()), а не передаётся ему LacteApp. LacteApp строит только ОДНУ общую шину insitech::bus::Hub<RX,TX> (см. AppContext::bus)
ModelBusClient ЯВЛЯЕТСЯ (is-a) insitech::bus::LocalClient (см. protolib's protocols/bus/Bus.hpp) - его типизированные Publish<Msg>/Subscribe<Msg>/Serve<Req,Reply>/Request<Req,Reply> приходят напрямую из базового класса. Что добавляется сверху - это обслуживание пяти запросных топиков бэкенда (ServeModel()) - Model-СТОРОНА проводного протокола. Отправка команд/снапшотов В UI - задача UiBusClient (см. UiBusClient::EnableUi()/DisableUi()/ PublishSnapshot()) - это знание UI-протокола, поэтому оно живёт в собственном классе клиента UI, а не здесь; Model держит второй экземпляр UiBusClient исключительно для их вызова (см. Model::ConnectBus()).
Строится через статическую фабрику Create(), а не через публичный конструктор: регистрация подкласса LocalClient на его хостовой шине (см. insitech::bus::IHub::register_local_client()) требует, чтобы объект уже был обёрнут в собственный владеющий shared_ptr, которого ещё не существует внутри тела конструктора - Create() выполняет оба шага в правильном порядке, точно так же как IHub::Connect() делает это для простого, неунаследованного LocalClient.
Definition in file ModelBusClient.hpp.