From 4fc07d5d891c251a1fe09c17ee16467d961a8f74 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期三, 14 十二月 2022 15:31:12 +0800 Subject: [PATCH] add interface creg add topic and export symbols --- main.cpp | 25 +++++++----- message.cpp | 30 ++++++++++++++ message.h | 7 +++ exported_symbols | 31 ++++++++++----- cbhomeclient.cpp | 2 5 files changed, 71 insertions(+), 24 deletions(-) diff --git a/cbhomeclient.cpp b/cbhomeclient.cpp index 60140b2..1dac84e 100644 --- a/cbhomeclient.cpp +++ b/cbhomeclient.cpp @@ -194,7 +194,7 @@ 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); diff --git a/exported_symbols b/exported_symbols index 9f57710..653901c 100644 --- a/exported_symbols +++ b/exported_symbols @@ -8,21 +8,32 @@ 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; @@ -30,7 +41,7 @@ free_reqmsg_stackerr; get_reqmsg_stack; free_reqmsg_stack; - make_reply_msg_json; + make_reply_msg; free_reply_msg; diff --git a/main.cpp b/main.cpp index 84f63fb..35b6ddf 100644 --- a/main.cpp +++ b/main.cpp @@ -18,11 +18,11 @@ 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); @@ -49,11 +49,11 @@ 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); @@ -70,8 +70,7 @@ 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); @@ -96,10 +95,14 @@ 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); diff --git a/message.cpp b/message.cpp index 614018c..8766730 100644 --- a/message.cpp +++ b/message.cpp @@ -122,13 +122,38 @@ 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; @@ -590,9 +615,12 @@ } } +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); diff --git a/message.h b/message.h index aa5b703..258c135 100644 --- a/message.h +++ b/message.h @@ -180,12 +180,17 @@ 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); -- Gitblit v1.8.0