KasperskyOS Community Edition 1.2
Статическое создание IPC-каналов при разработке на языке C++
Чтобы реализовать клиентскую программу, вызывающую метод службы, предоставляемой серверной программой, необходимо:
- Подключить сгенерированный заголовочный файл описания (
*.edl.cpp.h
) клиентской программы. - Подключить сгенерированные заголовочные файлы описаний используемых интерфейсов (
*.idl.cpp.h
). - Подключить заголовочные файлы:
/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/kosipc/application.h
/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/kosipc/api.h
/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/kosipc/connect_static_channel.h
- Инициализировать объект приложения, вызвав функцию
kosipc::MakeApplicationAutodetect()
. (Также можно использовать функцииkosipc::MakeApplication()
иkosipc::MakeApplicationPureClient()
.) - Получить клиентский IPC-дескриптор канала и идентификатор службы (
riid
) вызвав функциюkosipc::ConnectStaticChannel()
.Функция принимает имя IPC-канала (из файла init.yaml) и квалифицированное имя службы (из CDL- и EDL-описаний компонента решения).
- Инициализировать прокси-объект для используемой службы, вызвав функцию
MakeProxy()
.
Пример
// Создание и инициализация объекта приложения
kosipc::Application app = kosipc::MakeApplicationAutodetect();
// Создание и инициализация прокси-объекта
auto proxy = app.MakeProxy<IDLInterface>(
kosipc::ConnectStaticChannel(channelName, endpointName))
// Вызов метода требуемой службы
proxy->DoSomeWork();
Чтобы реализовать серверную программу, предоставляющую службы другим программам, необходимо:
- Подключить сгенерированный заголовочный файл
*.edl.cpp.h
, содержащий описание компонентной структуры программы, включая все предоставляемые службы. - Подключить заголовочные файлы:
/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/kosipc/event_loop.h
/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/kosipc/api.h
/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/kosipc/serve_static_channel.h
- Создать классы, содержащие реализации интерфейсов, которые данная программа и её компоненты предоставляют в виде служб.
- Инициализировать объект приложения, вызвав функцию
kosipc::MakeApplicationAutodetect()
. - Инициализировать структуру
kosipc::components::Root
, которая описывает компонентную структуру программы и описания интерфейсов всех предоставляемых программой служб. - Связать поля структуры
kosipc::components::Root
с объектами, реализующими соответствующие службы.Поля структуры
Root
повторяют иерархию компонентов и служб, заданную совокупностью CDL- и EDL-файлов. - Получить серверный IPC-дескриптор канала, вызвав функцию
ServeStaticChannel()
.Функция принимает имя IPC-канала (из файла init.yaml) и структуру, созданную на шаге 5.
- Создать объект
kosipc::EventLoop
, вызвав функциюMakeEventLoop()
. - Запустить цикл диспетчеризации входящих IPC-сообщений, вызвав метод
Run()
объектаkosipc::EventLoop
.
Пример
// Создание объектов классов, которые реализуют интерфейсы,
// предоставляемые сервером в виде служб
MyIDLInterfaceImp_1 impl_1;
MyIDLInterfaceImp_2 impl_2;
// Создание и инициализация объекта приложения
kosipc::Application app = kosipc::MakeApplicationAutodetect();
// Создание и инициализация объекта root, описывающего
// компоненты и службы сервера
kosipc::components::Root root;
// Связывание объекта root с объектами классов, реализующими службы сервера
root.component1.endpoint1 = &impl_1;
root.component2.endpoint2 = &impl_2;
// Создание и инициализация объекта, который реализует
// цикл диспетчеризации входящих IPC-сообщений
kosipc::EventLoop loop = app.MakeEventLoop(ServeStaticChannel(channelName, root));
// Запуск цикла в текущем потоке
loop.Run();
Идентификатор статьи: static_IPC_kosipc, Последнее изменение: 21 мая 2024 г.