#ifndef _c_bus_client_h_ #define _c_bus_client_h_ #include #include #include "message.h" #ifdef __cplusplus extern "C"{ #endif /* 配合 message.h[cpp] 使用 */ /* 初始化 bus client,srvid 表明当前机器的 srvid 用于远程通信,目前没用 rinfo 是注册进程的消息,单进程多次调用,需要使用不同的rinfo */ void* bus_client_init(const char* srvid, const size_t sidsize, const creg* rinfo); /* 释放 bus client */ void bus_client_free(void* handle); /* 获取订阅的消息,订阅消息通过线程不停读取,此处从缓存中读取 可通过 message.h 对应的 get_submsg_db get_submsg_proclist 获取对应的消息 */ struct csubmsg* bus_client_get_submsg(void* handle); /* 发布消息,data 是 MsgPublish protobuffer序列化后的数据 */ int bus_client_pubmsg(void* handle, const char* data, const size_t size); /* 发布消息,topic 是发布主题, data 是发布的消息体 */ int bus_client_publish(void* handle, const char* topic, const size_t topicl, const char* data, const size_t size); /* 获取 request 消息,通过线程读取,此处从缓存中读取 可通过 message.h 的 get_reqmsg_stackerr get_reqmsg_stack 获取对应的消息 src 是哪一个进程请求的标识符 可以响应多个request发送的消息,同时需要满足异步响应,使用 src 进行区分 类似与tcp/ip的socket,标识一个连接 */ struct creqmsg* bus_client_get_reqmsg(void* handle, void** src); /* 响应消息回复,src是连接标识符,msg是需要回复的消息 通过 message.h 的 make_reply_msg 创建 */ int bus_client_reply_msg(void* handle, void* src, const struct crepmsg* msg); /* 同步的request请求,发送 creqmsg 获取 crepmsg 回复 通过 message.h 的 make_req_msg 创建 request 消息 获取的 crepmsg 回复消息,需要使用 free_reply_msg 释放 */ int bus_client_request(void* handle, struct creqmsg* msg, struct crepmsg** repmsg); #ifdef __cplusplus } #endif #endif