提交 2c64ffbb authored 作者: blu's avatar blu

init

上级 befc898d
/* /*
module: evmgr module: evmgr
description: description:
author: Bruce.Lu <lzbgt@icloud.com> author: Bruce.Lu <lzbgt@icloud.com>
update: 2019/08/23 update: 2019/08/23
*/ */
...@@ -49,6 +49,8 @@ private: ...@@ -49,6 +49,8 @@ private:
bool inited = false; bool inited = false;
// TODO: load config from local db // TODO: load config from local db
devSn = "ILSEVMGR1"; devSn = "ILSEVMGR1";
int opt_notify = ZMQ_NOTIFY_DISCONNECT|ZMQ_NOTIFY_CONNECT;
string proto, addr;
while(!inited) { while(!inited) {
try { try {
config = json::parse(cloudutils::config); config = json::parse(cloudutils::config);
...@@ -56,32 +58,40 @@ private: ...@@ -56,32 +58,40 @@ private:
// TODO: verify sn // TODO: verify sn
if(!config.count("data")||!config["data"].count(devSn)||!config["data"][devSn].count("ipcs")) { if(!config.count("data")||!config["data"].count(devSn)||!config["data"][devSn].count("ipcs")) {
spdlog::error("evmgr {} invalid config. reload now...", devSn); spdlog::error("evmgr {} invalid config. reload now...", devSn);
this_thread::sleep_for(chrono::seconds(3)); goto togo_sleep_continue;
continue;
} }
jmgr = config["data"][devSn]; jmgr = config["data"][devSn];
string proto = jmgr["proto"];
string addr;
if(proto != "zmq") { if(proto != "zmq") {
spdlog::error("evmgr {} unsupported protocol: {}, try fallback to zmq instead now...", devSn, proto); spdlog::warn("evmgr {} unsupported protocol: {}, try fallback to zmq instead now...", devSn, proto);
} }
addr = "tcp://" + jmgr["addr"].get<string>() + ":" + to_string(jmgr["port-router"]);
//
if(jmgr["addr"].get<string>() == "*" || jmgr["addr"].get<string>() == "0.0.0.0") {
spdlog::error("invalid mgr address: {} in config:\n{}", jmgr["addr"].get<string>(), jmgr.dump());
goto togo_sleep_continue;
}
//addr = "tcp://" + jmgr["addr"].get<string>() + ":" + to_string(jmgr["port-router"]);
addr = "tcp://*:" + to_string(jmgr["port-router"]);
// setup zmq // setup zmq
// TODO: connect to cloud // TODO: connect to cloud
// router service // router service
pRouterCtx = zmq_ctx_new(); pRouterCtx = zmq_ctx_new();
pRouter = zmq_socket(pRouterCtx, ZMQ_ROUTER); pRouter = zmq_socket(pRouterCtx, ZMQ_ROUTER);
int opt_notify = ZMQ_NOTIFY_DISCONNECT|ZMQ_NOTIFY_CONNECT;
zmq_setsockopt (pRouter, ZMQ_ROUTER_NOTIFY, &opt_notify, sizeof (opt_notify)); zmq_setsockopt (pRouter, ZMQ_ROUTER_NOTIFY, &opt_notify, sizeof (opt_notify));
ret = zmq_bind(pRouter, addr.c_str()); ret = zmq_bind(pRouter, addr.c_str());
if(ret < 0) { if(ret < 0) {
spdlog::error("evmgr {} failed to bind zmq at {} for reason: {}, retrying load configuration...", devSn, addr, zmq_strerror(zmq_errno())); 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)); goto togo_sleep_continue;
continue;
} }
inited = true; inited = true;
break;
togo_sleep_continue:
this_thread::sleep_for(chrono::seconds(3));
continue;
} }
catch(exception &e) { catch(exception &e) {
spdlog::error("evmgr {} exception on init() for: {}, retrying load configuration...", devSn, e.what()); spdlog::error("evmgr {} exception on init() for: {}, retrying load configuration...", devSn, e.what());
...@@ -212,35 +222,6 @@ private: ...@@ -212,35 +222,6 @@ private:
return ret; return ret;
} }
int get_monitor_event (void *monitor, int *value, char **address)
{
// First frame in message contains event number and value
zmq_msg_t msg;
zmq_msg_init (&msg);
if (zmq_msg_recv (&msg, monitor, 0) == -1)
return -1; // Interrupted, presumably
assert (zmq_msg_more (&msg));
uint8_t *data = (uint8_t *) zmq_msg_data (&msg);
uint16_t event = *(uint16_t *) (data);
if (value)
*value = *(uint32_t *) (data + 2);
// Second frame in message contains event address
zmq_msg_init (&msg);
if (zmq_msg_recv (&msg, monitor, 0) == -1)
return -1; // Interrupted, presumably
assert (!zmq_msg_more (&msg));
if (address) {
uint8_t *data = (uint8_t *) zmq_msg_data (&msg);
size_t size = zmq_msg_size (&msg);
*address = (char *) malloc (size + 1);
memcpy (*address, data, size);
(*address)[size] = 0;
}
return event;
}
protected: protected:
void run() void run()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论