fix deadlock
This commit is contained in:
@@ -341,40 +341,6 @@ void my_rocketmq_send(queue_data_t& data,rocketmq::RocketMQProducer* producer)
|
||||
rocketmq_producer_send(producer,senddata,topic,tag,key);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////查找台账下标
|
||||
// 根据终端 ID 查找 terminal_devlist 中的索引,找不到返回 -1
|
||||
int find_dev_index_from_dev_id(const std::string& dev_id) {
|
||||
std::lock_guard<std::mutex> lock(ledgermtx);
|
||||
for (size_t i = 0; i < terminal_devlist.size(); ++i) {
|
||||
if (terminal_devlist[i].terminal_id == dev_id) {
|
||||
return static_cast<int>(i);
|
||||
}
|
||||
}
|
||||
return -1; // 未找到
|
||||
}
|
||||
|
||||
int find_mp_index_from_mp_id(const std::string& mp_id) {
|
||||
std::lock_guard<std::mutex> lock(ledgermtx);
|
||||
for (const auto& dev : terminal_devlist) {
|
||||
for (size_t j = 0; j < dev.line.size(); ++j) {
|
||||
if (dev.line[j].monitor_id == mp_id) {
|
||||
return static_cast<int>(j); // 返回 line[] 的下标
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1; // 未找到
|
||||
}
|
||||
|
||||
std::string find_guid_index_from_dev_id(const std::string& dev_id) {
|
||||
std::lock_guard<std::mutex> lock(ledgermtx);
|
||||
for (size_t i = 0; i < terminal_devlist.size(); ++i) {
|
||||
if (terminal_devlist[i].terminal_id == dev_id) {
|
||||
return terminal_devlist[i].guid;
|
||||
}
|
||||
}
|
||||
return ""; // 未找到
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////回调函数的json处理
|
||||
|
||||
bool parseJsonMessageRT(const std::string& body,std::string& devSeries,ushort& line,bool& realData,bool& soeData,int& limit){
|
||||
@@ -1489,7 +1455,7 @@ void rocketmq_test_rt(Front* front)//用来测试实时数据
|
||||
|
||||
queue_data_t data;
|
||||
data.monitor_no = 123;
|
||||
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_RT;
|
||||
data.strTopic = G_MQCONSUMER_TOPIC_RT;
|
||||
std::ifstream file("rt.txt"); // 文件中存储长字符串
|
||||
std::stringstream buffer;
|
||||
buffer << file.rdbuf(); // 读取整个文件内容
|
||||
@@ -1513,7 +1479,7 @@ void rocketmq_test_ud(Front* front)//用来测试台账更新
|
||||
|
||||
queue_data_t data;
|
||||
data.monitor_no = 123;
|
||||
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_UD;
|
||||
data.strTopic = G_MQCONSUMER_TOPIC_UD;
|
||||
std::ifstream file("ud.txt"); // 文件中存储长字符串
|
||||
std::stringstream buffer;
|
||||
buffer << file.rdbuf(); // 读取整个文件内容
|
||||
@@ -1537,7 +1503,7 @@ void rocketmq_test_set(Front* front)//用来测试进程控制脚本
|
||||
|
||||
queue_data_t data;
|
||||
data.monitor_no = 123;
|
||||
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_SET;
|
||||
data.strTopic = G_MQCONSUMER_TOPIC_SET;
|
||||
std::ifstream file("set.txt"); // 文件中存储长字符串
|
||||
std::stringstream buffer;
|
||||
buffer << file.rdbuf(); // 读取整个文件内容
|
||||
@@ -1561,7 +1527,7 @@ void rocketmq_test_rc(Front* front)//用来测试补招
|
||||
|
||||
queue_data_t data;
|
||||
data.monitor_no = 123;
|
||||
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_RC;
|
||||
data.strTopic = G_MQCONSUMER_TOPIC_RC;
|
||||
std::ifstream file("rc.txt"); // 文件中存储长字符串
|
||||
std::stringstream buffer;
|
||||
buffer << file.rdbuf(); // 读取整个文件内容
|
||||
@@ -1871,9 +1837,9 @@ bool parsemsg(const std::string& devid, const std::string& guid, const nlohmann:
|
||||
}
|
||||
|
||||
//心跳和其他响应
|
||||
void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type) {
|
||||
void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type, const std::string& guid, const std::string& mac) {
|
||||
try {
|
||||
std::string guid = find_guid_index_from_dev_id(dev_id);
|
||||
/*std::string guid = find_guid_index_from_dev_id(dev_id);*/
|
||||
if(guid == "")
|
||||
{
|
||||
std::cerr << "dev: " << dev_id << " guid not found" << std::endl;
|
||||
@@ -1887,8 +1853,8 @@ void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type) {
|
||||
obj["Node"] = g_front_seg_index;
|
||||
|
||||
// Dev_mac:从台账取 addr_str 并规范化
|
||||
std::string mac = get_mac_by_devid(dev_id);
|
||||
obj["Dev_mac"] = mac;
|
||||
//std::string mac = get_mac_by_devid(dev_id);
|
||||
obj["Dev_mac"] = normalize_mac(mac);
|
||||
|
||||
// ---- 构造 Detail ----
|
||||
nlohmann::json detail;
|
||||
|
||||
Reference in New Issue
Block a user