KasperskyOS Community Edition 1.3

Пример messagebus

Пример демонстрирует использование компонента MessageBus в KasperskyOS.

В этом примере программы Publisher, SubscriberA и SubscriberB используют компонент MessageBus для обмена сообщениями:

messagebus_example

Пример использования компонента 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 является издателем и передает сообщения в шину:

  1. Для получения интерфейса регистрации издателя в шине сообщений используется метод IProviderFactory::CreateBusControl().
  2. Для получения интерфейса, содержащего методы для отправки издателем сообщений в шину, используется метод IProviderFactory::CreateBus().
  3. Для регистрации издателя в шине сообщений используется метод IProviderControl::RegisterPublisher().
  4. Для оправки сообщений в шину используется метод IProvider::Push().
  5. Для дерегистрации издателя в шине сообщений используется метод IProviderControl::UnregisterPublisher().

Программы SubscriberA и SubscriberB являются подписчиками и получают сообщения из шины:

  1. Для получения интерфейса регистрации подписчика в шине сообщений используется метод IProviderFactory::CreateBusControl().
  2. Для получения интерфейсов, содержащих методы для получения подписчиком сообщений из шины используется метод IProviderFactory::CreateSubscriberRunner().
  3. Для регистрации подписчика в шине сообщений используется метод IProviderControl::RegisterSubscriber().
  4. Чтобы перевести подписчика в режим ожидания сообщения от шины используется метод ISubscriberRunner::Run().
  5. При получении сообщения из шины вызывается метод ISubscriber::OnMessage().
  6. Для дерегистрации подписчика в шине сообщений используется метод 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, которая генерируется во время сборки примера.