zhangmeng
2022-12-28 51d4a29b008f77bd8c86168b29d599af73486bc4
restruct api
6个文件已修改
61 ■■■■■ 已修改文件
cbhomeclient.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cbhomeclient.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exported_symbols 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
message.cpp 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
message.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
}
cbhomeclient.h
@@ -36,7 +36,7 @@
/*
    发布消息,data 是 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);
/*
    发布消息,topic 是发布主题, 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);
/*
    同步的request请求,发送 creqmsg 获取 crepmsg 回复
    通过 message.h 的 make_req_msg 创建 request 消息时,必须调用 free_reqmsg 释放
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;
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);
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;
}
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
/*