提交 44d47f55 authored 作者: blu's avatar blu

big refacting of communitation architect

上级 d7b14c51
...@@ -44,6 +44,29 @@ private: ...@@ -44,6 +44,29 @@ private:
mutex eventQLock; mutex eventQLock;
thread thMsgProcessor; thread thMsgProcessor;
int sendConfig(json &config_, string sn) {
int ret = 0;
string cfg = config_.dump();
json j;
j["type"] = EV_MSG_META_CONFIG;
string meta = j.dump();
vector<vector<uint8_t> > v = {str2body(sn), str2body(devSn), str2body(meta), str2body(cfg)};
if(peerData["status"].count(sn) == 0||peerData["status"][sn] == 0) {
spdlog::warn("evcloudsvc {} cached config to {}", devSn, sn);
lock_guard<mutex> lock(cacheLock);
cachedMsg[sn].push(v);
if(cachedMsg[sn].size() > EV_NUM_CACHE_PERPEER) {
cachedMsg[sn].pop();
}
}else{
ret = z_send_multiple(pRouter, v);
spdlog::info("evcloudsvc config sent to {}: {}", sn, cfg);
}
return ret;
}
json config(json &newConfig) json config(json &newConfig)
{ {
json ret; json ret;
...@@ -151,11 +174,15 @@ private: ...@@ -151,11 +174,15 @@ private:
ret["code"] = iret; ret["code"] = iret;
ret["msg"] = msg; ret["msg"] = msg;
} }
// update in memory peerData // update in memory peerData
if(this->peerData["config"].count(k) != 0) { if(this->peerData["config"].count(k) != 0) {
json diff = json::diff(this->peerData["config"][k], v); json diff = json::diff(this->peerData["config"][k], v);
spdlog::info("evcloudsvc peer {} config diff:\n{}\n\norigin:\n{}\n\n\nnew:\n{}", k, diff.dump(4), this->peerData["config"][k].dump(4), v.dump(4)); spdlog::info("evcloudsvc peer {} config diff:\n{}\n\norigin:\n{}", k, diff.dump(), this->peerData["config"][k].dump());
if(diff.size()!=0) {
// send config
sendConfig(v, k);
}
}else{ }else{
this->peerData["config"][k] = v; this->peerData["config"][k] = v;
} }
...@@ -204,14 +231,9 @@ private: ...@@ -204,14 +231,9 @@ private:
peerData["status"][selfId] = chrono::duration_cast<chrono::seconds>(chrono::system_clock::now().time_since_epoch()).count(); peerData["status"][selfId] = chrono::duration_cast<chrono::seconds>(chrono::system_clock::now().time_since_epoch()).count();
spdlog::info("evcloudsvc {} peer connected: {}", devSn, selfId); spdlog::info("evcloudsvc {} peer connected: {}", devSn, selfId);
eventConn = true; eventConn = true;
spdlog::debug("evcloudsvc {} update status of {} to 1 and send config", devSn, selfId); spdlog::debug("evcloudsvc update status of {} to 1 and send config", selfId);
string cfg = peerData["config"][selfId].dump(); //
json j; sendConfig(peerData["config"][selfId], selfId);
j["type"] = EV_MSG_META_CONFIG;
string meta = j.dump();
vector<vector<uint8_t> > v = {str2body(selfId), str2body(devSn), str2body(meta), str2body(cfg)};
z_send_multiple(pRouter, v);
spdlog::info("evcloudsvc config sent to {}: {}", selfId, cfg);
} }
else { else {
peerData["status"][selfId] = 0; peerData["status"][selfId] = 0;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论