#ifndef WXD_IPC_H
#define WXD_IPC_H
#include "../wxd_types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct wxd_IPCConnection_t wxd_IPCConnection_t;
typedef struct wxd_IPCServer_t wxd_IPCServer_t;
typedef struct wxd_IPCClient_t wxd_IPCClient_t;
typedef enum {
WXD_IPC_TEXT = 1, WXD_IPC_BITMAP = 2, WXD_IPC_METAFILE = 3, WXD_IPC_UNICODETEXT = 13, WXD_IPC_UTF8TEXT = 14, WXD_IPC_PRIVATE = 20 } wxd_IPCFormat;
typedef bool (*wxd_IPC_OnExecute_Callback)(
void* user_data,
const char* topic,
const void* data,
size_t size,
wxd_IPCFormat format
);
typedef const void* (*wxd_IPC_OnRequest_Callback)(
void* user_data,
const char* topic,
const char* item,
size_t* out_size,
wxd_IPCFormat format
);
typedef bool (*wxd_IPC_OnPoke_Callback)(
void* user_data,
const char* topic,
const char* item,
const void* data,
size_t size,
wxd_IPCFormat format
);
typedef bool (*wxd_IPC_OnStartAdvise_Callback)(
void* user_data,
const char* topic,
const char* item
);
typedef bool (*wxd_IPC_OnStopAdvise_Callback)(
void* user_data,
const char* topic,
const char* item
);
typedef bool (*wxd_IPC_OnAdvise_Callback)(
void* user_data,
const char* topic,
const char* item,
const void* data,
size_t size,
wxd_IPCFormat format
);
typedef bool (*wxd_IPC_OnDisconnect_Callback)(void* user_data);
typedef void (*wxd_IPC_FreeUserData_Callback)(void* user_data);
typedef wxd_IPCConnection_t* (*wxd_IPC_OnAcceptConnection_Callback)(
void* user_data,
const char* topic
);
WXD_EXPORTED wxd_IPCConnection_t*
wxd_IPCConnection_Create(
void* user_data,
wxd_IPC_OnExecute_Callback on_execute,
wxd_IPC_OnRequest_Callback on_request,
wxd_IPC_OnPoke_Callback on_poke,
wxd_IPC_OnStartAdvise_Callback on_start_advise,
wxd_IPC_OnStopAdvise_Callback on_stop_advise,
wxd_IPC_OnAdvise_Callback on_advise,
wxd_IPC_OnDisconnect_Callback on_disconnect,
wxd_IPC_FreeUserData_Callback free_user_data
);
WXD_EXPORTED void
wxd_IPCConnection_Destroy(wxd_IPCConnection_t* conn);
WXD_EXPORTED bool
wxd_IPCConnection_Execute(
wxd_IPCConnection_t* conn,
const void* data,
size_t size,
wxd_IPCFormat format
);
WXD_EXPORTED bool
wxd_IPCConnection_ExecuteString(
wxd_IPCConnection_t* conn,
const char* data
);
WXD_EXPORTED const void*
wxd_IPCConnection_Request(
wxd_IPCConnection_t* conn,
const char* item,
size_t* out_size,
wxd_IPCFormat format
);
WXD_EXPORTED bool
wxd_IPCConnection_Poke(
wxd_IPCConnection_t* conn,
const char* item,
const void* data,
size_t size,
wxd_IPCFormat format
);
WXD_EXPORTED bool
wxd_IPCConnection_StartAdvise(wxd_IPCConnection_t* conn, const char* item);
WXD_EXPORTED bool
wxd_IPCConnection_StopAdvise(wxd_IPCConnection_t* conn, const char* item);
WXD_EXPORTED bool
wxd_IPCConnection_Advise(
wxd_IPCConnection_t* conn,
const char* item,
const void* data,
size_t size,
wxd_IPCFormat format
);
WXD_EXPORTED bool
wxd_IPCConnection_Disconnect(wxd_IPCConnection_t* conn);
WXD_EXPORTED size_t
wxd_IPCConnection_GetTopic(wxd_IPCConnection_t* conn, char* buffer, size_t buffer_size);
WXD_EXPORTED bool
wxd_IPCConnection_IsConnected(wxd_IPCConnection_t* conn);
WXD_EXPORTED wxd_IPCServer_t*
wxd_IPCServer_Create(
void* user_data,
wxd_IPC_OnAcceptConnection_Callback on_accept_connection,
wxd_IPC_FreeUserData_Callback free_user_data
);
WXD_EXPORTED bool
wxd_IPCServer_Create_Service(wxd_IPCServer_t* server, const char* service);
WXD_EXPORTED void
wxd_IPCServer_Destroy(wxd_IPCServer_t* server);
WXD_EXPORTED wxd_IPCClient_t*
wxd_IPCClient_Create(void);
WXD_EXPORTED wxd_IPCConnection_t*
wxd_IPCClient_MakeConnection(
wxd_IPCClient_t* client,
const char* host,
const char* service,
const char* topic,
void* user_data,
wxd_IPC_OnExecute_Callback on_execute,
wxd_IPC_OnRequest_Callback on_request,
wxd_IPC_OnPoke_Callback on_poke,
wxd_IPC_OnStartAdvise_Callback on_start_advise,
wxd_IPC_OnStopAdvise_Callback on_stop_advise,
wxd_IPC_OnAdvise_Callback on_advise,
wxd_IPC_OnDisconnect_Callback on_disconnect,
wxd_IPC_FreeUserData_Callback free_user_data
);
WXD_EXPORTED void
wxd_IPCClient_Destroy(wxd_IPCClient_t* client);
WXD_EXPORTED void
wxd_IPC_CleanupAll(void);
#ifdef __cplusplus
}
#endif
#endif