add interface creg add topic and export symbols
| | |
| | | return tmp;
|
| | | };
|
| | | size_t tpcc = 0, pubc = 0;
|
| | | char** tpc = creg_rep_topic(rinfo, &tpcc);
|
| | | char** tpc = creg_reply_topic(rinfo, &tpcc);
|
| | | char** pub = creg_pub_topic(rinfo, &pubc);
|
| | | auto tmparr = shallowMerge(tpc, tpcc, pub, pubc);
|
| | | auto tpcmsg = to_topic(cli, bus_register_topics, tmparr, tpcc + pubc);
|
| | |
| | | bus_client_get_reqmsg; |
| | | bus_client_reply_msg; |
| | | bus_client_request; |
| | | cstr_new; |
| | | cstr_free; |
| | | cstr_arr_new; |
| | | cstr_arr_add; |
| | | cstr_arr_free; |
| | | make_proc_info; |
| | | clone_proc_info; |
| | | free_proc_info; |
| | | free_creg; |
| | | |
| | | make_cproc; |
| | | cproc_name; |
| | | cproc_id; |
| | | cproc_free; |
| | | |
| | | make_creg; |
| | | make_creg_from_cproc; |
| | | creg_add_topic_reply; |
| | | creg_add_topic_pub; |
| | | creg_add_topic_sub; |
| | | creg_add_topic_subnet; |
| | | creg_proc; |
| | | creg_reply_topic; |
| | | creg_pub_topic; |
| | | creg_sub_topic; |
| | | creg_subnet_topic; |
| | | creg_free; |
| | | |
| | | to_submsg; |
| | | free_submsg; |
| | | get_submsg_db; |
| | | free_submsg_db; |
| | | get_submsg_proclist; |
| | | free_submsg_proclist; |
| | | |
| | | to_reqmsg; |
| | | make_req_msg; |
| | | free_reqmsg; |
| | |
| | | free_reqmsg_stackerr; |
| | | get_reqmsg_stack; |
| | | free_reqmsg_stack; |
| | | make_reply_msg_json; |
| | | |
| | | make_reply_msg; |
| | | free_reply_msg; |
| | | |
| | |
| | | static void pub(const vector<string>& topics){ |
| | | ignoref(pub); |
| | | |
| | | vector<const char*> pubtpc; |
| | | for(auto& t : topics) pubtpc.push_back(t.c_str()); |
| | | vector<const char*> tpc; |
| | | for(auto& t : topics) tpc.push_back(t.c_str()); |
| | | |
| | | creg* reg = make_creg(make_cproc("pub", "pubid"), |
| | | NULL, 0, &pubtpc[0], pubtpc.size(), NULL, 0, NULL, 0); |
| | | NULL, 0, &tpc[0], tpc.size(), NULL, 0, NULL, 0); |
| | | |
| | | void* handle = bus_client_init(NULL, 0, reg); |
| | | creg_free(reg); |
| | |
| | | static void sub(const vector<string>& topics){ |
| | | ignoref(sub); |
| | | |
| | | vector<const char*> pubtpc; |
| | | for(auto& t : topics) pubtpc.push_back(t.c_str()); |
| | | vector<const char*> tpc; |
| | | for(auto& t : topics) tpc.push_back(t.c_str()); |
| | | |
| | | creg* reg = make_creg(make_cproc("sub", "subid"), |
| | | NULL, 0, NULL, 0, &pubtpc[0], pubtpc.size(), NULL, 0); |
| | | NULL, 0, NULL, 0, &tpc[0], tpc.size(), NULL, 0); |
| | | |
| | | void* handle = bus_client_init(NULL, 0, reg); |
| | | creg_free(reg); |
| | |
| | | ignoref(req); |
| | | |
| | | const auto topicl = strlen(topic); |
| | | creg* reg = make_creg(make_cproc("request", "requestid"), |
| | | NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| | | creg* reg = make_creg_from_cproc(make_cproc("request", "requestid")); |
| | | |
| | | void* handle = bus_client_init(NULL, 0, reg); |
| | | creg_free(reg); |
| | |
| | | ignoref(reply); |
| | | |
| | | const auto topicl = strlen(topic); |
| | | vector<const char*> pubtpc{topic}; |
| | | vector<const char*> tpc{topic}; |
| | | |
| | | creg* reg = make_creg(make_cproc("reply", "replyid"), |
| | | &pubtpc[0], pubtpc.size(), &pubtpc[0], pubtpc.size(), NULL, 0, NULL, 0); |
| | | // creg* reg = make_creg(make_cproc("reply", "replyid"), |
| | | // &tpc[0], tpc.size(), &tpc[0], tpc.size(), NULL, 0, NULL, 0); |
| | | |
| | | creg* reg = make_creg_from_cproc(make_cproc("reply", "replyid")); |
| | | creg_add_topic_reply(reg, tpc.data(), tpc.size()); |
| | | creg_add_topic_pub(reg, tpc.data(), tpc.size()); |
| | | |
| | | void* handle = bus_client_init(NULL, 0, reg); |
| | | creg_free(reg); |
| | |
| | | reg->sub_net_count = subnetcnt; |
| | | return reg; |
| | | } |
| | | creg* make_creg_from_cproc(const cproc* proc){ |
| | | auto reg = ptrT<struct creg>(); |
| | | reg->proc = rmConst(proc); |
| | | return reg; |
| | | } |
| | | |
| | | static inline void creg_add_topic(char*** dst, size_t* dstC, const char** src, const size_t srcC){ |
| | | *dst = rmConst(src); |
| | | *dstC = srcC; |
| | | } |
| | | void creg_add_topic_reply(creg* reg, const char** topic, const size_t count){ |
| | | creg_add_topic(®->channel, ®->channel_count, topic, count); |
| | | } |
| | | |
| | | void creg_add_topic_pub(creg* reg, const char** topic, const size_t count){ |
| | | creg_add_topic(®->pub, ®->pub_count, topic, count); |
| | | } |
| | | |
| | | void creg_add_topic_sub(creg* reg, const char** topic, const size_t count){ |
| | | creg_add_topic(®->sub, ®->sub_count, topic, count); |
| | | } |
| | | |
| | | void creg_add_topic_subnet(creg* reg, const char** topic, const size_t count){ |
| | | creg_add_topic(®->sub_net, ®->sub_net_count, topic, count); |
| | | } |
| | | |
| | | const cproc* creg_proc(const creg* reg){ |
| | | if (!reg) return NULL; |
| | | return reg->proc; |
| | | } |
| | | |
| | | char** creg_rep_topic(const creg* reg, size_t* count){ |
| | | char** creg_reply_topic(const creg* reg, size_t* count){ |
| | | if (!reg) return NULL; |
| | | *count = reg->channel_count; |
| | | return reg->channel; |
| | |
| | | } |
| | | } |
| | | |
| | | template <class F> void ignoref(F&& f){} |
| | | static struct cstr make_reply_msg_json(const int success, const char* msg, const size_t msgl, |
| | | const char* data, const size_t datal) |
| | | { |
| | | ignoref(make_reply_msg_json); |
| | | |
| | | auto doc = yyjson_mut_doc_new(NULL); |
| | | auto root = yyjson_mut_obj(doc); |
| | | yyjson_mut_obj_add_bool(doc, root, "success", !!success); |
| | |
| | | const char** pub, const size_t pubcnt, |
| | | const char** sub, const size_t subcnt, |
| | | const char** subnet, const size_t subnetcnt); |
| | | creg* make_creg_from_cproc(const cproc* proc); |
| | | void creg_add_topic_reply(creg* reg, const char** topic, const size_t count); |
| | | void creg_add_topic_pub(creg* reg, const char** topic, const size_t count); |
| | | void creg_add_topic_sub(creg* reg, const char** topic, const size_t count); |
| | | void creg_add_topic_subnet(creg* reg, const char** topic, const size_t count); |
| | | /* |
| | | 获取已存在的 creg 中的 cproc 或者注册的主题,无需释放 |
| | | 生命周期 < creg |
| | | */ |
| | | const cproc* creg_proc(const creg* reg); |
| | | char** creg_rep_topic(const creg* reg, size_t* count); |
| | | char** creg_reply_topic(const creg* reg, size_t* count); |
| | | char** creg_pub_topic(const creg* reg, size_t* count); |
| | | char** creg_sub_topic(const creg* reg, size_t* count); |
| | | char** creg_subnet_topic(const creg* reg, size_t* count); |