zhangmeng
2022-12-27 cf0a3209b51babf72469d962914db0dac2e5f52c
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;
@@ -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;
@@ -244,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);
    };
@@ -449,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;
@@ -463,7 +491,7 @@
    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);
    return msg;
@@ -590,9 +618,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);
@@ -604,3 +635,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);
}