From cf0a3209b51babf72469d962914db0dac2e5f52c Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 27 十二月 2022 14:13:30 +0800 Subject: [PATCH] add get msg timeout --- message.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 44 insertions(+), 6 deletions(-) diff --git a/message.cpp b/message.cpp index 614018c..f7f42f3 100644 --- a/message.cpp +++ b/message.cpp @@ -13,7 +13,7 @@ #include "google/protobuf/dynamic_message.h" #include "google/protobuf/compiler/importer.h" -#include "3dparty/yyjson/yyjson.h" +#include "3rdparty/yyjson/yyjson.h" #include "bhome_msg_api.pb.h" using namespace bhome_msg; @@ -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; @@ -244,8 +269,7 @@ char* entry = NULL; size_t entry_size = 0; json2str(sv, &entry, &entry_size); - arr[i] = ptrT<char>(entry_size+1); - memcpy(arr[i], entry, entry_size); + arr[i] = entry; } return make_tuple(arr, count); }; @@ -449,7 +473,11 @@ tie(msg->procid, msg->procidl) = copymemory(pid, pids); MsgRequestTopic msgRT; - if (!msgRT.ParseFromArray(data, size)) return NULL; + if (!msgRT.ParseFromArray(data, size)) { + free(msg->procid); + free(msg); + return NULL; + } tie(msg->msg, msg->msgl) = copymemory(msgRT.data()); return msg; @@ -463,7 +491,7 @@ msgRT.set_topic(topic, topicl); msgRT.set_data(data, datal); - auto pbstr = msgRT.SerializeAsString(); + const auto& pbstr = msgRT.SerializeAsString(); tie(msg->msg, msg->msgl) = copymemory(pbstr); return msg; @@ -590,9 +618,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); @@ -604,3 +635,10 @@ yyjson_mut_doc_free(doc); return cstr_ref(json, jsonl); } + +void free_query_procs(struct cqueryprocs* procs, const size_t count){ + for(size_t i = 0; i < count; i++){ + free(procs[i].id); + } + free(procs); +} -- Gitblit v1.8.0