zhangmeng
2023-01-29 5fb901dd157b4a8bbfc3be916c6c1a9d02b5bfa6
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;
@@ -269,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);
    };
@@ -474,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;
@@ -488,8 +491,21 @@
    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);
    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;
}
@@ -498,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);};
@@ -511,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);};
@@ -531,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;
}
@@ -544,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);};
@@ -580,7 +602,7 @@
        smsg->files[i] = file;
    }
    yyjson_doc_free(doc);
    yyjson_doc_free(doc0);
    // yyjson_doc_free(doc0);
    return smsg;
}
@@ -632,3 +654,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);
}