zhangmeng
2022-12-12 66904a369b51e4be25e81ecc1f6bfd8818d6baa6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#ifndef _c_bus_client_message_h_
#define _c_bus_client_message_h_
 
#include <stddef.h>
 
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