Интерфейс IProviderFactory
23 января 2025
ID messagebus_component_iproviderfactory
Интерфейс IProviderFactory предоставляет фабричные методы для получения интерфейсов, необходимых для работы с программой MessageBus.
Описание интерфейса IProviderFactory представлено в файле /opt/KasperskyOS-SDK-KISG-Platform-<version>/sysroot-*-kos/include/messagebus/i_messagebus_control.h.
Для получения экземпляра интерфейса IProviderFactory используется свободная функция InitConnection(), которая принимает имя IPC-канала вашей программы с программой MessageBus и тип подключения – ConnectionType::Static (по умолчанию) или ConnectionType::Dynamic. В случае использования динамического подключения, вы можете явно не указывать имя IPC-канала связи, оставив параметр пустым ("",...). В случае успешного подключения выходной параметр содержит указатель на интерфейс IProviderFactory.
- Для получения интерфейса регистрации и дерегистрации (см. "Интерфейс IProviderControl") издателей и подписчиков в шине сообщений используется метод
IProviderFactory::CreateBusControl(). - Для получения интерфейса, содержащего методы для отправки издателем сообщений в шину (см. "Интерфейс IProvider (программа MessageBus)"), используется метод
IProviderFactory::CreateBus(). - Для получения интерфейсов, содержащих методы для получения подписчиком сообщений из шины (см. "Интерфейсы ISubscriber, IWaiter и ISubscriberRunner"), используются методы
IProviderFactory::CreateCallbackWaiter()иIProviderFactory::CreateSubscriberRunner().Мы не рекомендуем использовать интерфейс
IWaiter, поскольку вызов метода этого интерфейса является блокирующим.
i_messagebus_control.h (фрагмент)
class IProviderFactory
{
...
virtual fdn::ResultCode CreateBusControl(IProviderControlPtr& controlPtr) = 0;
virtual fdn::ResultCode CreateBus(IProviderPtr& busPtr) = 0;
virtual fdn::ResultCode CreateCallbackWaiter(IWaiterPtr& waiterPtr) = 0;
virtual fdn::ResultCode CreateSubscriberRunner(ISubscriberRunnerPtr& runnerPtr) = 0;
...
};
...
fdn::ResultCode InitConnection(const std::string& connectionId, IProviderFactoryPtr& busFactoryPtr, ConnectionType connType = ConnectionType::Static);