#ifndef _c_bus_client_message_h_ #define _c_bus_client_message_h_ #include struct cstr{ char* str; size_t size; }; // 进程信息 struct cproc{ struct cstr name; struct cstr id; struct cstr info; }; struct cstrarr{ struct cstr* arr; size_t count; }; // 进程注册信息 struct creg{ struct cproc* pinfo; cstrarr channel; cstrarr topic_pub; cstrarr topic_sub; cstrarr topic_sub_net; }; // 其他进程信息 struct cclient{ struct creg* rinfo; int replykey; int hbcnt; int dcnt; int status; }; //TableChanged enum enum TableChanged { T_Camera = 0, //摄像机变化 T_CameraRule = 1, //摄像机任务参数变化 T_Sdk = 2, //sdk变化 T_CameraPolygon = 3, //摄像机多边形变化 T_TimeRule = 4, //时间规则变化 T_Server = 5, //服务器信息变化 T_PollConfig = 6, //轮询配置变化 T_File = 7, //本地文件变化 T_FileSetting = 8, //本地文件分析设置 T_SdkChanSet = 9, //算法通道设置变化 T_FileStack = 10, //数据栈变化 T_ResourceConfig = 11, //对外服务配置变化 T_CalculationPower = 12, //需要重新计算算力占用情况 T_EventPush = 13, //事件推送有变化 T_Cluster = 14, //集群创建、加入或退出 T_CameraPolygonRelation = 15, //摄像机区域的关联关系 T_Voice = 16, //报警声音发生变化 }; enum DbAction { Insert = 0, //Insert Update = 1, //Update Delete = 2, //Delete }; // 数据库变化信息 struct DbChangeMsg{ TableChanged table; //变化的表 struct cstr id; //变化数据id DbAction action; //action struct cstr info; //变化内容 }; // 订阅消息 struct csubmsg{ struct cstr topic; // private // enum MsgT {NONE=0, DB, PROCLIST} type; struct cstr msg; }; // 其他注册进程列表,如数据库进程需要启动再运行pollcontrol逻辑 struct cproclist{ struct cclient* cli; size_t clientsize; }; ////////////////////////////////////////// // request msg struct creqmsg{ struct cstr procid; struct cstr msg; }; // decode stack err msg struct cstackmsgerr{ struct cstr stackid; struct cstr fileid; }; // stack file struct cstackfile{ struct cstr id; struct cstr name; struct cstr path; int type; void* noused; }; // decode stack success msg struct cstackmsg{ int procnum; struct cstr stackid; struct cstr stackname; int type; int shmkey; int width; int height; int fps; struct cstackfile* files; size_t filescnt; }; // reply msg struct crepmsg{ int errcode; struct cstr errmsg; struct cstr data; }; #ifdef __cplusplus extern "C"{ #endif struct cstr cstr_new(const char* str, const size_t len); void cstr_free(struct cstr str); struct cstrarr cstr_arr_new(const size_t count); void cstr_arr_add(struct cstrarr* arr, const char* data, const size_t len, const size_t idx); void cstr_arr_free(struct cstrarr arr); void free_creg(struct creg* reg); struct cproc* clone_proc_info(struct cproc* pi); void free_proc_info(struct cproc* pi); // 订阅消息相关,订阅数据库db消息和进程列表proclist消息 struct csubmsg* to_submsg(const char* data, const size_t size); void free_submsg(struct csubmsg* msg); // db msg struct DbChangeMsg* get_submsg_db(struct csubmsg* msg); void free_submsg_db(struct DbChangeMsg* msg); // proclist msg struct cproclist* get_submsg_proclist(struct csubmsg* msg); void free_submsg_proclist(struct cproclist* ppl); // request msg struct creqmsg* to_reqmsg(const char* pid,const size_t pids,const char* data,const size_t size); struct creqmsg* make_req_msg(const char* topic, const size_t topics, const char* data, const size_t datal); void free_reqmsg(struct creqmsg* msg); // decode err msg struct cstackmsgerr* get_reqmsg_stackerr(struct creqmsg* msg); void free_reqmsg_stackerr(struct cstackmsgerr* msg); // decode success msg struct cstackmsg* get_reqmsg_stack(struct creqmsg* msg); void free_reqmsg_stack(struct cstackmsg* msg); // reply msg struct cstr make_reply_msg_json(const int success, const char* msg, const size_t msgl, const char* data, const size_t datal); struct crepmsg* make_reply_msg(const int errcode, const char* errmsg, const size_t emsgl, const char* data, const size_t datal); void free_reply_msg(struct crepmsg* msg); #ifdef __cplusplus } #endif #endif