提交 26e473c5 authored 作者: blu's avatar blu

init

上级 db665d73
...@@ -2,10 +2,11 @@ ...@@ -2,10 +2,11 @@
"time":0, "time":0,
"code":0, "code":0,
"data":{ "data":{
"evmgr":{ "ILSEVMGR1":{
"sn":"ILSEVMGR1", "sn":"ILSEVMGR1",
"addr":"172.31.0.76", "addr":"172.31.0.76",
"addr-cloud":"172.31.0.76", "addr-cloud":"172.31.0.76",
"proto": "zmq",
"port-cloud":5556, "port-cloud":5556,
"port-router":5550, "port-router":5550,
"status":1, "status":1,
......
...@@ -24,29 +24,137 @@ using namespace std; ...@@ -24,29 +24,137 @@ using namespace std;
* functions: * functions:
* app update * app update
* control msg * control msg
* *
**/ **/
class EvMgr:public TinyThread { class EvMgr:public TinyThread {
private: private:
void *pRouterCtx = NULL; void *pRouterCtx = NULL;
void *pRouter = NULL; void *pRouter = NULL;
json config;
string devSn;
void init(){ void init()
{
int ret;
bool inited = false;
// TODO: load config from local db
devSn = "ILSEVMGR1";
while(!inited) {
try {
config = json::parse(cloudutils::config);
spdlog::info("config dumps: \n{}", config.dump());
// TODO: verify sn
json jmgr = config["data"][devSn];
string proto = jmgr["proto"];
string addr;
if(proto != "zmq"){
spdlog::error("evmgr {} unsupported protocol: {}, try fallback to zmq instead now...", devSn, proto);
}
addr = "tcp://" + jmgr["addr"].get<string>() + ":" + to_string(jmgr["port-router"]);
// setup zmq
// TODO: connect to cloud
// router service
pRouterCtx = zmq_ctx_new();
pRouter = zmq_socket(pRouterCtx, ZMQ_ROUTER);
ret = zmq_bind(pRouter, addr.c_str());
if(ret < 0) {
spdlog::error("evmgr {} failed to bind zmq at {} for reason: {}, retrying load configuration...", devSn, addr, zmq_strerror(zmq_errno()));
this_thread::sleep_for(chrono::seconds(3));
continue;
}
inited = true;
}
catch(exception &e) {
spdlog::error("evmgr {} exception on init() for: {}, retrying load configuration...", devSn, e.what());
this_thread::sleep_for(chrono::seconds(3));
continue;
}
}
spdlog::info("evmgr {} successfuly inited", devSn);
} }
protected:
public: int mqErrorMsg(string cls, string devSn, string extraInfo, int ret) {
EvMgr() { if(ret < 0) {
init(); spdlog::error("{} {} {}:{} ", cls, devSn, extraInfo, zmq_strerror(zmq_errno()));
}
return ret;
} }
~EvMgr(){
void handleMsg(string body[]) {
zmq_msg_t msg;
if(body[0] != devSn) {
for(int i =0; i < 3; i++) {
spdlog::info("evmgr {}, msg idRcv is {}, forwarding...", devSn, body[0]);
zmq_msg_init(&msg);
zmq_msg_init_data(&msg, (void*)body[0].c_str(), body[0].size(), NULL, NULL);
mqErrorMsg("evmgr", devSn, "failed to send zmq msg", zmq_send_const(pRouter, zmq_msg_data(&msg), body[0].size(), i ==2?0:ZMQ_SNDMORE));
zmq_msg_close(&msg);
}
}else{
// TODO: report msg
spdlog::info("evmgr {} subsystem report msg received: {} {} {}", devSn, body[0], body[1], body[2]);
}
} }
}; protected:
void run(){
bool bStopSig = false;
int ret = 0;
zmq_msg_t msg;
while (true) {
if(checkStop() == true) {
bStopSig = true;
break;
}
string msgBody[3];
int64_t more = 0;
// business logic
int i = 0;
for(; i < 3; i++) {
mqErrorMsg("evmgr", devSn, "failed to init zmq msg", zmq_msg_init(&msg));
mqErrorMsg("evmgr", devSn, "failed to recv zmq msg", zmq_recvmsg(pRouter, &msg, 0));
msgBody[i] = string((char *)zmq_msg_data(&msg));
zmq_msg_close(&msg);
spdlog::debug("evmgr {} received[{}]: {} ", devSn, i, msgBody[i]);
size_t more_size = sizeof (more);
mqErrorMsg("evmgr", devSn, "failed to get zmq sockopt", zmq_getsockopt(pRouter, ZMQ_RCVMORE, &more, &more_size));
if(!more) {
break;
}
}
if(i >= 3 ) {
// full proto msg received.
handleMsg(msgBody);
}else{
spdlog::warn("partial msg recved, maybe hello msg: {}, {}, {}", msgBody[0], msgBody[1], msgBody[2]);
}
}
}
public:
EvMgr()
{
init();
}
~EvMgr()
{
if(pRouter != NULL) {
zmq_close(pRouter);
pRouter = NULL;
}
if(pRouterCtx != NULL){
zmq_ctx_destroy(pRouterCtx);
pRouterCtx = NULL;
}
}
};
int main(int argc, const char *argv[]){ int main(int argc, const char *argv[])
{
EvMgr mgr;
mgr.join();
return 0; return 0;
} }
\ No newline at end of file
...@@ -292,10 +292,11 @@ namespace cloudutils ...@@ -292,10 +292,11 @@ namespace cloudutils
"time":0, "time":0,
"code":0, "code":0,
"data":{ "data":{
"evmgr":{ "ILSEVMGR1":{
"sn":"ILSEVMGR1", "sn":"ILSEVMGR1",
"addr":"172.31.0.76", "addr":"172.31.0.76",
"addr-cloud":"172.31.0.76", "addr-cloud":"172.31.0.76",
"proto":"zmq",
"port-cloud":5556, "port-cloud":5556,
"port-router":5550, "port-router":5550,
"status":1, "status":1,
...@@ -312,7 +313,7 @@ namespace cloudutils ...@@ -312,7 +313,7 @@ namespace cloudutils
"sn":"ILSEVPULLER1", "sn":"ILSEVPULLER1",
"addr":"172.31.0.76", "addr":"172.31.0.76",
"iid":1, "iid":1,
"port-pub":"5556", "port-pub":5556,
"status":1 "status":1
} }
], ],
...@@ -355,7 +356,7 @@ namespace cloudutils ...@@ -355,7 +356,7 @@ namespace cloudutils
} }
} }
*/ */
const char *config = "{\"time\":0,\"code\":0,\"data\":{\"evmgr\":{\"sn\":\"ILSEVMGR1\",\"addr\":\"172.31.0.76\",\"addr-cloud\":\"172.31.0.76\",\"port-cloud\":5556,\"port-router\":5550,\"status\":1,\"ipcs\":[{\"addr\":\"172.31.0.51\",\"proto\":\"rtsp\",\"user\":\"admin\",\"password\":\"FWBWTU\",\"status\":1,\"modules\":{\"evpuller\":[{\"sn\":\"ILSEVPULLER1\",\"addr\":\"172.31.0.76\",\"iid\":1,\"port-pub\":\"5556\",\"status\":1}],\"evpusher\":[{\"sn\":\"ILSEVPUSHER1\",\"iid\":1,\"proto\":\"rtsp\",\"addrDest\":\"40.73.41.176\",\"portDest\":554,\"user\":\"\",\"password\":\"\",\"token\":\"\",\"enabled\":1,\"status\":1}],\"evslicer\":[{\"sn\":\"ILSEVSLICER1\",\"iid\":1,\"path\":\"slices\",\"enabled\":1,\"status\":1}],\"evml\":[{\"type\":\"motion\",\"sn\":\"ILSEVMLMOTION1\",\"iid\":1,\"enabled\":1,\"status\":1}]}}]}}}"; const char *config = "{\"time\":0,\"code\":0,\"data\":{\"ILSEVMGR1\":{\"sn\":\"ILSEVMGR1\",\"addr\":\"172.31.0.76\",\"addr-cloud\":\"172.31.0.76\",\"proto\":\"zmq\",\"port-cloud\":5556,\"port-router\":5550,\"status\":1,\"ipcs\":[{\"addr\":\"172.31.0.51\",\"proto\":\"rtsp\",\"user\":\"admin\",\"password\":\"FWBWTU\",\"status\":1,\"modules\":{\"evpuller\":[{\"sn\":\"ILSEVPULLER1\",\"addr\":\"172.31.0.76\",\"iid\":1,\"port-pub\":5556,\"status\":1}],\"evpusher\":[{\"sn\":\"ILSEVPUSHER1\",\"iid\":1,\"proto\":\"rtsp\",\"addrDest\":\"40.73.41.176\",\"portDest\":554,\"user\":\"\",\"password\":\"\",\"token\":\"\",\"enabled\":1,\"status\":1}],\"evslicer\":[{\"sn\":\"ILSEVSLICER1\",\"iid\":1,\"path\":\"slices\",\"enabled\":1,\"status\":1}],\"evml\":[{\"type\":\"motion\",\"sn\":\"ILSEVMLMOTION1\",\"iid\":1,\"enabled\":1,\"status\":1}]}}]}}}";
json registry(const char *sn, const char *scn, int iid) json registry(const char *sn, const char *scn, int iid)
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论