implement client C binding
This commit is contained in:
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user