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

---
 message.cpp |   41 ++++++++++++++++++++++++++++++-----------
 1 files changed, 30 insertions(+), 11 deletions(-)

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;
 }

--
Gitblit v1.8.0