implement client C binding

This commit is contained in:
2026-01-25 13:16:29 +07:00
parent 168b5fdfea
commit f261621c68
9 changed files with 403 additions and 21 deletions
+33
View File
@@ -0,0 +1,33 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
// Непрозрачный тип для RPC клиента (обёртка над IpcPipeChannel)
typedef struct RpcClient RpcClient;
// Непрозрачный тип для маршаллера (обёртка над IpcMarshaller)
typedef struct IpcMarshallerHandle IpcMarshallerHandle;
// Создание RPC клиента
// read_pipe - путь к FIFO для чтения ответов
// write_pipe - путь к FIFO для отправки запросов
// Возвращает указатель на клиент или NULL при ошибке
RpcClient* rpc_client_create(const char* read_pipe, const char* write_pipe);
// Уничтожение RPC клиента
void rpc_client_destroy(RpcClient* client);
// Создание маршаллера для конкретного объекта
// client - RPC клиент
// object_id - идентификатор удалённого объекта
// Возвращает указатель на маршаллер или NULL при ошибке
IpcMarshallerHandle* rpc_client_create_marshaller(RpcClient* client, int object_id);
// Уничтожение маршаллера
void rpc_marshaller_destroy(IpcMarshallerHandle* marshaller);
#ifdef __cplusplus
}
#endif
+25
View File
@@ -0,0 +1,25 @@
#pragma once
// Внутренний заголовок для C++ файлов, использующих C-биндинги
// Не должен включаться в C файлы
#include "ipc/IpcMarshaller.h"
#include "ipc/IpcPipeChannel.h"
struct RpcClient {
IpcPipeChannel* channel;
RpcClient(IpcPipeChannel* ch) : channel(ch) {}
~RpcClient() {
delete channel;
}
};
struct IpcMarshallerHandle {
IpcMarshaller* marshaller;
IpcMarshallerHandle(IpcMarshaller* m) : marshaller(m) {}
~IpcMarshallerHandle() {
delete marshaller;
}
};