lacteApp
C++17 service for Lacte hardware
Loading...
Searching...
No Matches
ModelBusClient.hpp File Reference

ModelBusClient: собственный клиент Model на шине lacte - создаётся и принадлежит самому Model (см. More...

#include <Bus.hpp>
#include <cstdint>
#include <functional>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include "bus/Envelopes.hpp"
Include dependency graph for ModelBusClient.hpp:
This graph shows which files directly or indirectly include this file:

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()), должен лишь отличаться от адресов других клиентов на той же общей шине.

Detailed Description

ModelBusClient: собственный клиент Model на шине lacte - создаётся и принадлежит самому Model (см.

Model::ConnectBus()), а не передаётся ему LacteApp. LacteApp строит только ОДНУ общую шину insitech::bus::Hub<RX,TX> (см. AppContext::bus)

  • каждый участник (Model, UI - см. UiBusClient.hpp, БД
  • см. Libraries/sqlite/sqlite.hpp's ConnectExternalClient()) строит на ней СВОЙ СОБСТВЕННЫЙ клиент и реализует на нём свои подписки/публикации, вместо того чтобы один общий класс клиента разом знал протокол всех участников.

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.