Чтобы реализовать клиентскую программу, вызывающую метод службы, предоставляемой серверной программой, необходимо:
*.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()
.)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-файлов.
ServeStaticChannel()
.Функция принимает имя IPC-канала (из файла init.yaml) и структуру, созданную на шаге 5.
kosipc::EventLoop
, вызвав функцию MakeEventLoop()
.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();
В начало