From 51d4a29b008f77bd8c86168b29d599af73486bc4 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 28 十二月 2022 11:51:14 +0800
Subject: [PATCH] restruct api

---
 main.cpp         |    2 
 message.cpp      |   41 +++++++++++++++-----
 message.h        |    4 ++
 exported_symbols |    4 +-
 cbhomeclient.cpp |    6 +-
 cbhomeclient.h   |    4 +-
 6 files changed, 42 insertions(+), 19 deletions(-)

diff --git a/cbhomeclient.cpp b/cbhomeclient.cpp
index b2d084a..3332ff7 100644
--- a/cbhomeclient.cpp
+++ b/cbhomeclient.cpp
@@ -332,7 +332,7 @@
     return false;
 }
 
-int bus_client_reply_msg(void* handle, void* src, const struct crepmsg* msg){
+int bus_client_reply(void* handle, void* src, const struct crepmsg* msg){
 
     MsgRequestTopicReply msgR;
     auto err = msgR.mutable_errmsg();
@@ -379,11 +379,11 @@
     pbmsg.set_topic(topic, topicl);
     pbmsg.set_data(data, size);
     auto pbstr = pbmsg.SerializeAsString();
-    return bus_client_pubmsg(handle, pbstr.data(), pbstr.size());
+    return bus_client_publish_msg(handle, pbstr.data(), pbstr.size());
 }
 
 // test
-int bus_client_pubmsg(void* handle, const char* data, const size_t size){
+int bus_client_publish_msg(void* handle, const char* data, const size_t size){
     client* cli = ptr(handle);
     return bus_publish(cli->bus, data, size, 100);
 }
diff --git a/cbhomeclient.h b/cbhomeclient.h
index c962cea..4c63efb 100644
--- a/cbhomeclient.h
+++ b/cbhomeclient.h
@@ -36,7 +36,7 @@
 /*
     鍙戝竷娑堟伅锛宒ata 鏄� MsgPublish protobuffer搴忓垪鍖栧悗鐨勬暟鎹�
 */
-int bus_client_pubmsg(void* handle, const char* data, const size_t size);
+int bus_client_publish_msg(void* handle, const char* data, const size_t size);
 /*
     鍙戝竷娑堟伅锛宼opic 鏄彂甯冧富棰橈紝 data 鏄彂甯冪殑娑堟伅浣�
 */
@@ -60,7 +60,7 @@
     閫氳繃 message.h 鐨� make_reply_msg 鍒涘缓鏃讹紝鏈夊唴瀛樻嫹璐濓紝蹇呴』閫氳繃 free_reply_msg 閲婃斁
     鎴栬�呴�氳繃濉厖 crepmsg 缁撴瀯浣撴瀯閫狅紝鐢辫皟鐢ㄨ�呮帶鍒跺彉閲忕殑鍐呭瓨鍜岀敓鍛藉懆鏈燂紝鍙兘涓嶄細鎷疯礉鍐呭瓨锛屾晥鐜囨洿楂�
 */
-int bus_client_reply_msg(void* handle, void* src, const struct crepmsg* msg);
+int bus_client_reply(void* handle, void* src, const struct crepmsg* msg);
 /*
     鍚屾鐨剅equest璇锋眰锛屽彂閫� creqmsg 鑾峰彇 crepmsg 鍥炲
     閫氳繃 message.h 鐨� make_req_msg 鍒涘缓 request 娑堟伅鏃讹紝蹇呴』璋冪敤 free_reqmsg 閲婃斁
diff --git a/exported_symbols b/exported_symbols
index aea51b5..e637bca 100644
--- a/exported_symbols
+++ b/exported_symbols
@@ -4,11 +4,11 @@
     bus_client_free;
     bus_client_get_submsg;
     bus_client_get_submsg_intime;
-    bus_client_pubmsg;
+    bus_client_publish_msg;
     bus_client_publish;
     bus_client_get_reqmsg;
     bus_client_get_reqmsg_intime;
-    bus_client_reply_msg;
+    bus_client_reply;
     bus_client_request;
 
     make_cproc;
diff --git a/main.cpp b/main.cpp
index 9f400b8..1196dfe 100644
--- a/main.cpp
+++ b/main.cpp
@@ -114,7 +114,7 @@
         void* src = NULL;
         auto msg = bus_client_get_reqmsg(handle, &src);
         auto repmsg = make_reply_msg(0, NULL, 0, "recv request", 12);
-        bus_client_reply_msg(handle, src, repmsg);
+        bus_client_reply(handle, src, repmsg);
         free_reply_msg(repmsg);
         printf("REPREQ msg [%s] \n", msg->msg);
 
diff --git a/message.cpp b/message.cpp
index f7f42f3..b37d0ae 100644
--- a/message.cpp
+++ b/message.cpp
@@ -493,6 +493,19 @@
 
     const auto& pbstr = msgRT.SerializeAsString();
     tie(msg->msg, msg->msgl) = copymemory(pbstr);
+    auto doc = yyjson_read(msg->msg, msg->msgl, 0);
+    yyjson_val* root = yyjson_doc_get_root(doc);
+
+    auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);};
+
+    auto jp = obj(root, "path");
+    auto jb = obj(root, "body");
+    if (jp && jb){
+        tie(msg->path, msg->pathl) = copymemory(yyjson_get_str(jp), yyjson_get_len(jp));
+        tie(msg->body, msg->bodyl) = copymemory(yyjson_get_str(jb), yyjson_get_len(jb));
+    }
+
+    yyjson_doc_free(doc);
 
     return msg;
 }
@@ -501,11 +514,15 @@
     if (msg){
         free(msg->procid);
         free(msg->msg);
+        free(msg->path);
+        free(msg->body);
         free(msg);
     }
 }
 
 static tuple<const char*, size_t> json2body(yyjson_doc* doc){
+    ignoreT(json2body);
+
     yyjson_val* root = yyjson_doc_get_root(doc);
 
     auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);};
@@ -514,15 +531,16 @@
     if (!jp) return make_tuple((const char*)NULL, 0);
     auto jb = obj(root, "body");
     if (!jb) return make_tuple((const char*)NULL, 0);
-    return make_tuple(yyjson_get_str(jb), yyjson_get_len(jp));
+    return make_tuple(yyjson_get_str(jb), yyjson_get_len(jb));
 }
 
 struct cstackmsgerr* get_reqmsg_stackerr(struct creqmsg* msg){
-    auto doc0 = yyjson_read(msg->msg, msg->msgl, 0);
-    auto tpbody = json2body(doc0);
-    if (!get<0>(tpbody)) return NULL;
+    // auto doc0 = yyjson_read(msg->msg, msg->msgl, 0);
+    // auto tpbody = json2body(doc0);
+    // if (!get<0>(tpbody)) return NULL;
+    // auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0);
 
-    auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0);
+    auto doc = yyjson_read(msg->body, msg->bodyl, 0);
     auto root = yyjson_doc_get_root(doc);
 
     auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);};
@@ -534,7 +552,7 @@
     tie(smsg->fileid, smsg->fileidl) = copymemory(yyjson_get_str(jfid), yyjson_get_len(jfid));
     yyjson_doc_free(doc);
 
-    yyjson_doc_free(doc0);
+    // yyjson_doc_free(doc0);
 
     return smsg;
 }
@@ -547,11 +565,12 @@
 }
 // decode success msg
 struct cstackmsg* get_reqmsg_stack(struct creqmsg* msg){
-    auto doc0 = yyjson_read(msg->msg, msg->msgl, 0);
-    auto tpbody = json2body(doc0);
-    if (!get<0>(tpbody)) return NULL;
+    // auto doc0 = yyjson_read(msg->msg, msg->msgl, 0);
+    // auto tpbody = json2body(doc0);
+    // if (!get<0>(tpbody)) return NULL;
+    // auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0);
 
-    auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0);
+    auto doc = yyjson_read(msg->body, msg->bodyl, 0);
     auto root = yyjson_doc_get_root(doc);
 
     auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);};
@@ -583,7 +602,7 @@
         smsg->files[i] = file;
     }
     yyjson_doc_free(doc);
-    yyjson_doc_free(doc0);
+    // yyjson_doc_free(doc0);
 
     return smsg;
 }
diff --git a/message.h b/message.h
index 88ac25f..7767d15 100644
--- a/message.h
+++ b/message.h
@@ -91,6 +91,10 @@
     size_t procidl;
     char* msg;        // request娑堟伅浣�
     size_t msgl;
+    char* path;
+    size_t pathl;
+    char* body;
+    size_t bodyl;
 };
 // decode stack err msg
 /*

--
Gitblit v1.8.0