Пример messagebus
Пример демонстрирует использование компонента MessageBus в KasperskyOS.
В этом примере программы Publisher
, SubscriberA
и SubscriberB
используют компонент MessageBus
для обмена сообщениями:
Пример использования компонента MessageBus в решении на базе KasperskyOS
Компонент MessageBus
реализует шину сообщений, которая обеспечивает прием, распределение и доставку сообщений между программами. Использование шины сообщений в решениях на базе KasperskyOS позволяет, например, легко масштабировать рассылку сообщений для большего количества подписчиков. Шина сообщений может обрабатывать большие объемы сообщений и распределять их эффективно между получателями.
Уровень журналирования для компонента MessageBus
устанавливается переменной окружения LOG_LEVEL
, которая задана в файле ./einit/CMakeLists.txt
. Для этой переменной допустимы следующие значения:
- LOG_TRACE
- LOG_DEBUG
- LOG_INFO (значение по умолчанию)
- LOG_WARNING
- LOG_ERROR
- LOG_CRITICAL
- LOG_OFF
Программа Publisher
является издателем и передает сообщения в шину:
- Для получения интерфейса регистрации издателя в шине сообщений используется метод
IProviderFactory::CreateBusControl()
. - Для получения интерфейса, содержащего методы для отправки издателем сообщений в шину, используется метод
IProviderFactory::CreateBus()
. - Для регистрации издателя в шине сообщений используется метод
IProviderControl::RegisterPublisher()
. - Для оправки сообщений в шину используется метод
IProvider::Push()
. - Для дерегистрации издателя в шине сообщений используется метод
IProviderControl::UnregisterPublisher()
.
Программы SubscriberA
и SubscriberB
являются подписчиками и получают сообщения из шины:
- Для получения интерфейса регистрации подписчика в шине сообщений используется метод
IProviderFactory::CreateBusControl()
. - Для получения интерфейсов, содержащих методы для получения подписчиком сообщений из шины используется метод
IProviderFactory::CreateSubscriberRunner()
. - Для регистрации подписчика в шине сообщений используется метод
IProviderControl::RegisterSubscriber()
. - Чтобы перевести подписчика в режим ожидания сообщения от шины используется метод
ISubscriberRunner::Run()
. - При получении сообщения из шины вызывается метод
ISubscriber::OnMessage()
. - Для дерегистрации подписчика в шине сообщений используется метод
IProviderControl::UnregisterSubscriber()
.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется программа
VfsNet
. - Для работы с файловой системой используется программа
VfsSdCardFs
.
Программа kl.Ntpd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию ntp-клиента, который в фоновом режиме получает параметры времени от внешних ntp-серверов и передает их ядру KasperskyOS.
Программа kl.rump.Dhcpcd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию DHCP-клиента, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
Для корректной работы примера messagebus
на Raspberry Pi после сборки примера и подготовки загрузочной SD-карты требуется выполнить следующие действия:
- создать директорию
/lib
на загрузочной SD-карте, если этой директории не существует; - скопировать в директорию
/lib
на загрузочной SD-карте содержимое директорииbuild/hdd/lib
, которая генерируется во время сборки примера.