zhangmeng
2022-12-14 4fc07d5d891c251a1fe09c17ee16467d961a8f74
add interface creg add topic and export symbols
5个文件已修改
95 ■■■■ 已修改文件
cbhomeclient.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
exported_symbols 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.cpp 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
message.cpp 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
message.h 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cbhomeclient.cpp
@@ -194,7 +194,7 @@
        return tmp;
    };
    size_t tpcc = 0, pubc = 0;
    char** tpc = creg_rep_topic(rinfo, &tpcc);
    char** tpc = creg_reply_topic(rinfo, &tpcc);
    char** pub = creg_pub_topic(rinfo, &pubc);
    auto tmparr = shallowMerge(tpc, tpcc, pub, pubc);
    auto tpcmsg = to_topic(cli, bus_register_topics, tmparr, tpcc + pubc);
exported_symbols
@@ -8,21 +8,32 @@
    bus_client_get_reqmsg;
    bus_client_reply_msg;
    bus_client_request;
    cstr_new;
    cstr_free;
    cstr_arr_new;
    cstr_arr_add;
    cstr_arr_free;
    make_proc_info;
    clone_proc_info;
    free_proc_info;
    free_creg;
    make_cproc;
    cproc_name;
    cproc_id;
    cproc_free;
    make_creg;
    make_creg_from_cproc;
    creg_add_topic_reply;
    creg_add_topic_pub;
    creg_add_topic_sub;
    creg_add_topic_subnet;
    creg_proc;
    creg_reply_topic;
    creg_pub_topic;
    creg_sub_topic;
    creg_subnet_topic;
    creg_free;
    to_submsg;
    free_submsg;
    get_submsg_db;
    free_submsg_db;
    get_submsg_proclist;
    free_submsg_proclist;
    to_reqmsg;
    make_req_msg;
    free_reqmsg;
@@ -30,7 +41,7 @@
    free_reqmsg_stackerr;
    get_reqmsg_stack;
    free_reqmsg_stack;
    make_reply_msg_json;
    make_reply_msg;
    free_reply_msg;
main.cpp
@@ -18,11 +18,11 @@
static void pub(const vector<string>& topics){
    ignoref(pub);
    vector<const char*> pubtpc;
    for(auto& t : topics) pubtpc.push_back(t.c_str());
    vector<const char*> tpc;
    for(auto& t : topics) tpc.push_back(t.c_str());
    creg* reg = make_creg(make_cproc("pub", "pubid"),
        NULL, 0, &pubtpc[0], pubtpc.size(), NULL, 0, NULL, 0);
        NULL, 0, &tpc[0], tpc.size(), NULL, 0, NULL, 0);
    void* handle = bus_client_init(NULL, 0, reg);
    creg_free(reg);
@@ -49,11 +49,11 @@
static void sub(const vector<string>& topics){
    ignoref(sub);
    vector<const char*> pubtpc;
    for(auto& t : topics) pubtpc.push_back(t.c_str());
    vector<const char*> tpc;
    for(auto& t : topics) tpc.push_back(t.c_str());
    creg* reg = make_creg(make_cproc("sub", "subid"),
        NULL, 0, NULL, 0, &pubtpc[0], pubtpc.size(), NULL, 0);
        NULL, 0, NULL, 0, &tpc[0], tpc.size(), NULL, 0);
    void* handle = bus_client_init(NULL, 0, reg);
    creg_free(reg);
@@ -70,8 +70,7 @@
    ignoref(req);
    const auto topicl = strlen(topic);
    creg* reg = make_creg(make_cproc("request", "requestid"),
        NULL, 0, NULL, 0, NULL, 0, NULL, 0);
    creg* reg = make_creg_from_cproc(make_cproc("request", "requestid"));
    void* handle = bus_client_init(NULL, 0, reg);
    creg_free(reg);
@@ -96,10 +95,14 @@
    ignoref(reply);
    const auto topicl = strlen(topic);
    vector<const char*> pubtpc{topic};
    vector<const char*> tpc{topic};
    creg* reg = make_creg(make_cproc("reply", "replyid"),
        &pubtpc[0], pubtpc.size(), &pubtpc[0], pubtpc.size(), NULL, 0, NULL, 0);
    // creg* reg = make_creg(make_cproc("reply", "replyid"),
    //     &tpc[0], tpc.size(), &tpc[0], tpc.size(), NULL, 0, NULL, 0);
    creg* reg = make_creg_from_cproc(make_cproc("reply", "replyid"));
    creg_add_topic_reply(reg, tpc.data(), tpc.size());
    creg_add_topic_pub(reg, tpc.data(), tpc.size());
    void* handle = bus_client_init(NULL, 0, reg);
    creg_free(reg);
message.cpp
@@ -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(&reg->channel, &reg->channel_count, topic, count);
}
void creg_add_topic_pub(creg* reg, const char** topic, const size_t count){
    creg_add_topic(&reg->pub, &reg->pub_count, topic, count);
}
void creg_add_topic_sub(creg* reg, const char** topic, const size_t count){
    creg_add_topic(&reg->sub, &reg->sub_count, topic, count);
}
void creg_add_topic_subnet(creg* reg, const char** topic, const size_t count){
    creg_add_topic(&reg->sub_net, &reg->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;
@@ -590,9 +615,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);
message.h
@@ -180,12 +180,17 @@
                                    const char** pub, const size_t pubcnt,
                                    const char** sub, const size_t subcnt,
                                    const char** subnet, const size_t subnetcnt);
creg* make_creg_from_cproc(const cproc* proc);
void creg_add_topic_reply(creg* reg, const char** topic, const size_t count);
void creg_add_topic_pub(creg* reg, const char** topic, const size_t count);
void creg_add_topic_sub(creg* reg, const char** topic, const size_t count);
void creg_add_topic_subnet(creg* reg, const char** topic, const size_t count);
/*
    获取已存在的 creg 中的 cproc 或者注册的主题,无需释放
    生命周期 < creg
*/
const cproc* creg_proc(const creg* reg);
char** creg_rep_topic(const creg* reg, size_t* count);
char** creg_reply_topic(const creg* reg, size_t* count);
char** creg_pub_topic(const creg* reg, size_t* count);
char** creg_sub_topic(const creg* reg, size_t* count);
char** creg_subnet_topic(const creg* reg, size_t* count);