Пример 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.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/messagebus
Сборка и запуск примера
См. "Сборка и запуск примеров".
Для корректной работы примера messagebus на Raspberry Pi после сборки примера и подготовки загрузочной SD-карты требуется выполнить следующие действия:
- создать директорию
/libна загрузочной SD-карте, если этой директории не существует; - скопировать в директорию
/libна загрузочной SD-карте содержимое директорииbuild/hdd/lib, которая генерируется во время сборки примера.