modify for ledgerupdate

This commit is contained in:
lnk
2025-02-10 17:03:15 +08:00
parent 3a37ce9c5b
commit faaef4f166
6 changed files with 185 additions and 28 deletions

View File

@@ -142,6 +142,9 @@ public:
char port[64]; char port[64];
char timestamp[64]; char timestamp[64];
//lnk20250210<31><30><EFBFBD>ӽ<EFBFBD><D3BD>̺<EFBFBD>
char processNo[64];
ledger_monitor line[10]; ledger_monitor line[10];
char count_cfg[64]; //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char count_cfg[64]; //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -4117,6 +4120,7 @@ void parse_terminal_from_data(trigger_update_xml_t* trigger_update_xml, const st
strcpy(work_terminal.dev_type, extract_value(data, "devType").c_str()); strcpy(work_terminal.dev_type, extract_value(data, "devType").c_str());
strcpy(work_terminal.dev_key, extract_value(data, "devKey").c_str()); strcpy(work_terminal.dev_key, extract_value(data, "devKey").c_str());
strcpy(work_terminal.dev_series, extract_value(data, "series").c_str()); strcpy(work_terminal.dev_series, extract_value(data, "series").c_str());
strcpy(work_terminal.processNo, extract_value(data, "processNo").c_str());
strcpy(work_terminal.addr_str, extract_value(data, "ip").c_str()); strcpy(work_terminal.addr_str, extract_value(data, "ip").c_str());
strcpy(work_terminal.port, extract_value(data, "port").c_str()); strcpy(work_terminal.port, extract_value(data, "port").c_str());
strcpy(work_terminal.timestamp, extract_value(data, "updateTime").c_str()); strcpy(work_terminal.timestamp, extract_value(data, "updateTime").c_str());
@@ -11526,6 +11530,7 @@ void printTerminalDevMap(const QMap<QString, terminal_dev*>& terminal_dev_map) {
<< ", Device Type:" << QString(dev->dev_type) << ", Device Type:" << QString(dev->dev_type)
<< ", Device Key:" << QString(dev->dev_key) << ", Device Key:" << QString(dev->dev_key)
<< ", Device Series:" << QString(dev->dev_series) << ", Device Series:" << QString(dev->dev_series)
<< ", Device processNo:" << QString(dev->processNo)
<< ", Address:" << QString(dev->addr_str) << ", Address:" << QString(dev->addr_str)
<< ", Port:" << QString(dev->port) << ", Port:" << QString(dev->port)
<< ", Timestamp:" << QString(dev->timestamp); << ", Timestamp:" << QString(dev->timestamp);
@@ -11636,6 +11641,7 @@ void printLedgerinshell(const ied_usr_t& ied_usr, QIODevice* outputDevice) {
outputDevice->write("|-- dev_type: " + QByteArray(ied_usr.dev_type) + "\n"); outputDevice->write("|-- dev_type: " + QByteArray(ied_usr.dev_type) + "\n");
outputDevice->write("|-- dev_key: " + QByteArray(ied_usr.dev_key) + "\n"); outputDevice->write("|-- dev_key: " + QByteArray(ied_usr.dev_key) + "\n");
outputDevice->write("|-- dev_series: " + QByteArray(ied_usr.dev_series) + "\n"); outputDevice->write("|-- dev_series: " + QByteArray(ied_usr.dev_series) + "\n");
outputDevice->write("|-- dev_processNo: " + QByteArray(ied_usr.processNo) + "\n");
outputDevice->write("|-- dev_flag: " + QByteArray::number(ied_usr.dev_flag) + "\n"); outputDevice->write("|-- dev_flag: " + QByteArray::number(ied_usr.dev_flag) + "\n");
outputDevice->write("|-- last_call_wavelist_time: " + QByteArray::number(ied_usr.last_call_wavelist_time) + "\n"); outputDevice->write("|-- last_call_wavelist_time: " + QByteArray::number(ied_usr.last_call_wavelist_time) + "\n");
@@ -11745,6 +11751,28 @@ void ledger(const char* terminal_id, QIODevice* outputDevice) {
} }
pthread_mutex_unlock(&mtx); pthread_mutex_unlock(&mtx);
} }
//lnk20250210<31><30>ӡָ<D3A1><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
void value_print(const char *variableName, QTcpSocket *clientSocket) {
char buffer[256]; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>ֵ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>ֵ
if (strcmp(variableName, "frontindex") == 0) {
sprintf(buffer, "frontindex = %d", g_front_seg_index); // <20><> int ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
clientSocket->write(buffer); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
} else if (strcmp(variableName, "iedcount") == 0) {
sprintf(buffer, "g_node->n_clients = %d, ied config count = %d", IED_COUNT);
clientSocket->write(buffer);
} else if (strcmp(variableName, "frontfun") == 0) {
sprintf(buffer, "frontfun = %s", subdir);
clientSocket->write(buffer);
} else {
clientSocket->write("Unknown variable name\n> ");
}
clientSocket->flush();
}
////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> JSON <20>ĺ<EFBFBD><C4BA><EFBFBD> <20><>ǰ<EFBFBD>ö<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD> JSON <20>ĺ<EFBFBD><C4BA><EFBFBD> <20><>ǰ<EFBFBD>ö<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map, int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
@@ -11854,6 +11882,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
} }
//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>index<65><78><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>پ<EFBFBD><D9BE>֣<EFBFBD><D6A3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2>жϽ<D0B6><CFBD>̺<EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>index<65><78><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>پ<EFBFBD><D9BE>֣<EFBFBD><D6A3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2>жϽ<D0B6><CFBD>̺<EFBFBD>
#if 0
int base_size = 0; int base_size = 0;
int remainder = 0; int remainder = 0;
int start_index = 0; int start_index = 0;
@@ -11873,6 +11902,9 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
end_index = data_size; end_index = data_size;
} }
} }
#endif
int start_index = 0;
int end_index = data_size;
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA> // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
for (int i = start_index; i < end_index; ++i) { for (int i = start_index; i < end_index; ++i) {
@@ -11930,6 +11962,11 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
if (series && series->type == cJSON_String) strncpy(dev->dev_series, series->valuestring, sizeof(dev->dev_series) - 1); if (series && series->type == cJSON_String) strncpy(dev->dev_series, series->valuestring, sizeof(dev->dev_series) - 1);
else strncpy(dev->dev_series, "N/A", sizeof(dev->dev_series) - 1); else strncpy(dev->dev_series, "N/A", sizeof(dev->dev_series) - 1);
//lnk20250210̨<30>˽<EFBFBD><CBBD>̺<EFBFBD>
cJSON* processNo = cJSON_GetObjectItem(item, "processNo"); // processNoתΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
if (processNo && processNo->type == cJSON_Number) snprintf(dev->processNo, sizeof(dev->processNo), "%d", processNo->valueint);
else strncpy(dev->processNo, "N/A", sizeof(dev->processNo) - 1);
cJSON* port = cJSON_GetObjectItem(item, "port"); // port cJSON* port = cJSON_GetObjectItem(item, "port"); // port
if (port && port->type == cJSON_String) strncpy(dev->port, port->valuestring, sizeof(dev->port) - 1); if (port && port->type == cJSON_String) strncpy(dev->port, port->valuestring, sizeof(dev->port) - 1);
else strncpy(dev->port, "N/A", sizeof(dev->port) - 1); else strncpy(dev->port, "N/A", sizeof(dev->port) - 1);
@@ -11992,10 +12029,16 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
terminal_dev_map->remove(key); terminal_dev_map->remove(key);
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD>
terminal_dev_map->insert(key, dev);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊֻ<EFBFBD>н<EFBFBD><EFBFBD>̺<EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>index<EFBFBD><EFBFBD>¼<EFBFBD>뵱ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(atoi(dev->processNo) == g_front_seg_index){//lnk20250210ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout<< "process num match" << std::endl;
terminal_dev_map->insert(key, dev);}//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊֻ<CEAA>н<EFBFBD><D0BD>̺<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>index<65><78>¼<EFBFBD>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD>
} else { } else {
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD>
terminal_dev_map->insert(key, dev);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊֻ<EFBFBD>н<EFBFBD><EFBFBD>̺<EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>index<EFBFBD><EFBFBD>¼<EFBFBD>뵱ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(atoi(dev->processNo) == g_front_seg_index){//lnk20250210ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout<< "process num match" << std::endl;
terminal_dev_map->insert(key, dev);}//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊֻ<CEAA>н<EFBFBD><D0BD>̺<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>index<65><78>¼<EFBFBD>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//std::cout << "i = " << i << std::endl; //std::cout << "i = " << i << std::endl;
//std::cout << "terminal_dev_map.size:" << terminal_dev_map->size() << std::endl; //std::cout << "terminal_dev_map.size:" << terminal_dev_map->size() << std::endl;
@@ -12186,6 +12229,10 @@ int parse_device_cfg_web()
char dev_series[255]; char dev_series[255];
char addr_str[64]; char addr_str[64];
char port_char[64]; char port_char[64];
//lnk20250210<31><30><EFBFBD>ӽ<EFBFBD><D3BD>̺<EFBFBD>
char processNo[64];
otl_datetime timestamp; otl_datetime timestamp;
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -12208,6 +12255,7 @@ int parse_device_cfg_web()
strncpy(dev_series, value->dev_series, sizeof(dev_series) - 1); strncpy(dev_series, value->dev_series, sizeof(dev_series) - 1);
strncpy(addr_str, value->addr_str, sizeof(addr_str) - 1); strncpy(addr_str, value->addr_str, sizeof(addr_str) - 1);
strncpy(port_char, value->port, sizeof(port_char) - 1); strncpy(port_char, value->port, sizeof(port_char) - 1);
strncpy(processNo, value->processNo, sizeof(processNo) - 1);//<2F><><EFBFBD>̺<EFBFBD>
timestamp = parseTimestamp(value->timestamp); timestamp = parseTimestamp(value->timestamp);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8> //<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>
@@ -12270,6 +12318,13 @@ int parse_device_cfg_web()
apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", dev_type);//dev_type apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", dev_type);//dev_type
cout << "ied_usr->dev_type:" << ied_usr->dev_type << endl; cout << "ied_usr->dev_type:" << ied_usr->dev_type << endl;
} }
//lnk20250210̨<30>˽<EFBFBD><CBBD>̺<EFBFBD>
if (processNo != NULL) {
apr_snprintf(ied_usr->processNo, sizeof(ied_usr->processNo), "%s", processNo);//processNo
cout << "ied_usr->processNo:" << ied_usr->processNo << endl;
}
if (dev_series != NULL) { if (dev_series != NULL) {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", dev_series);//DEV_Series apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", dev_series);//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl; cout << "defalut dev_series:" << ied_usr->dev_series << endl;
@@ -14454,18 +14509,11 @@ int parse_rpt_log_ini_one(ied_t* ied)
} else {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD><EFBFBD>ԭ<EFBFBD>пռ<D0BF><D5BC>ϸ<EFBFBD><CFB8><EFBFBD> } else {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD><EFBFBD>ԭ<EFBFBD>пռ<D0BF><D5BC>ϸ<EFBFBD><CFB8><EFBFBD>
//lnk20250208<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "cpuno:" << cpuno << "apr_cpystrn" <<std::endl;
// ȷ<><C8B7>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9BB>
std::cout << "strlen(str):" << strlen(str) << "strlen(ied_usr->LD_info[cpuno].LD_name)" << strlen(ied_usr->LD_info[cpuno].LD_name) <<std::endl; std::cout << "strlen(str):" << strlen(str) << "strlen(ied_usr->LD_info[cpuno].LD_name)" << strlen(ied_usr->LD_info[cpuno].LD_name) <<std::endl;
if (strlen(str) < strlen(ied_usr->LD_info[cpuno].LD_name)) { apr_cpystrn(ied_usr->LD_info[cpuno].LD_name, str, 256);//apr_palloc ֻ<>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><E9A3AC>û<EFBFBD><C3BB><EFBFBD>ṩֱ<E1B9A9>ӵĻ<D3B5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>֤<EFBFBD><D6A4><EFBFBD>Ŀռ<C4BF><D5BC>Ƿ<EFBFBD><C7B7>ѱ<EFBFBD>ʹ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><E4B5BD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8>Ǽ<EFBFBD><C7BC><EFBFBD>
apr_cpystrn(ied_usr->LD_info[cpuno].LD_name, str, 256);
} else {
std::cerr << "Error: target buffer is too small." << std::endl;
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
}
} }
delete[] tmp;//Get_IED<45>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬ʹ<E6A3AC>ú<EFBFBD>ɾ<EFBFBD><C9BE> delete[] tmp;//Get_IED<45>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬ʹ<E6A3AC>ú<EFBFBD>ɾ<EFBFBD><C9BE>

View File

@@ -1197,6 +1197,10 @@ std::string prepare_update(const std::string& code_str, const terminal& json_dat
add_indent(xmlStream, indentLevel); add_indent(xmlStream, indentLevel);
xmlStream << "<series>" << json_data.dev_series << "</series>" << std::endl; xmlStream << "<series>" << json_data.dev_series << "</series>" << std::endl;
//lnk20250210
add_indent(xmlStream, indentLevel);
xmlStream << "<processNo>" << json_data.processNo << "</processNo>" << std::endl;
add_indent(xmlStream, indentLevel); add_indent(xmlStream, indentLevel);
xmlStream << "<devKey>" << json_data.dev_key << "</devKey>" << std::endl; xmlStream << "<devKey>" << json_data.dev_key << "</devKey>" << std::endl;
@@ -1426,6 +1430,11 @@ void parse_control(const std::string& json_str, const std::string& output_dir) {
else else
std::strncpy(json_data.dev_series, "N/A", sizeof(json_data.dev_series) - 1); std::strncpy(json_data.dev_series, "N/A", sizeof(json_data.dev_series) - 1);
//lnk20250210̨<30>˽<EFBFBD><CBBD>̺<EFBFBD>
cJSON* processNo = cJSON_GetObjectItem(item, "processNo"); // processNoתΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
if (processNo && processNo->type == cJSON_Number) snprintf(json_data.processNo, sizeof(json_data.processNo), "%d", processNo->valueint);
else strncpy(json_data.processNo, "N/A", sizeof(json_data.processNo) - 1);
cJSON* ip = cJSON_GetObjectItem(item, "ip"); // addr_str cJSON* ip = cJSON_GetObjectItem(item, "ip"); // addr_str
if (ip && ip->type == cJSON_String) if (ip && ip->type == cJSON_String)
std::strncpy(json_data.addr_str, ip->valuestring, sizeof(json_data.addr_str) - 1); std::strncpy(json_data.addr_str, ip->valuestring, sizeof(json_data.addr_str) - 1);

View File

@@ -44,6 +44,7 @@ extern "C" {
#include <iostream> #include <iostream>
extern int G_TEST_NUM; extern int G_TEST_NUM;
extern void ledger(const char* terminal_id = NULL,QIODevice* outputDevice = NULL); extern void ledger(const char* terminal_id = NULL,QIODevice* outputDevice = NULL);
extern void value_print(const char *variableName, QTcpSocket *clientSocket);
extern int TEST_PORT; extern int TEST_PORT;
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
@@ -107,24 +108,29 @@ class Worker : public QObject
Q_OBJECT Q_OBJECT
public: public:
Worker(QObject *parent = NULL) : QObject(parent), server(NULL), TEST_NUM(G_TEST_NUM) {} Worker(QObject *parent = NULL) : QObject(parent), server(NULL), TEST_NUM(G_TEST_NUM) {
timer = NULL;
}
~Worker() { ~Worker() {
if (server) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
server->close(); stopServer();
delete server;
}
} }
public slots: public slots:
void startServer() { void startServer() {
server = new QTcpServer(); if (server) {
qDebug() << "Server is already running!";
return; // <20><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD><EFBFBD> QTcpServer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection())); connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
// <20><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>˿<EFBFBD>
if (!server->listen(QHostAddress::Any, TEST_PORT)) { if (!server->listen(QHostAddress::Any, TEST_PORT)) {
std::cout << "Server failed to start!" << std::endl; std::cout << "Server failed to start!" << std::endl;
qDebug() << "Server failed to start!"; qDebug() << "Server failed to start!";
delete server;
server = NULL;
emit serverError(); emit serverError();
return; return;
} else { } else {
@@ -135,12 +141,30 @@ public slots:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
timer = new QTimer(this); timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(doPeriodicTask())); connect(timer, SIGNAL(timeout()), this, SLOT(doPeriodicTask()));
timer->start(60000); // ÿ60<36><EFBFBD><EBB4A5>һ<EFBFBD><D2BB> timer->start(60000); // ÿ60<36><EFBFBD><EBB4A5>һ<EFBFBD><D2BB>
std::cout << "Timer started, event loop running in thread: " << QThread::currentThreadId() << std::endl; std::cout << "Timer started, event loop running in thread: " << QThread::currentThreadId() << std::endl;
qDebug() << "Timer started, event loop running in thread:" << QThread::currentThreadId(); qDebug() << "Timer started, event loop running in thread:" << QThread::currentThreadId();
} }
void stopServer() {
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
if (server) {
server->close();
delete server;
server = NULL;
qDebug() << "Server stopped.";
}
// ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1>
if (timer) {
timer->stop();
delete timer;
timer = NULL;
qDebug() << "Timer stopped.";
}
}
void setTestNum(int num) { void setTestNum(int num) {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
TEST_NUM = num; TEST_NUM = num;
@@ -167,6 +191,7 @@ private slots:
std::cout << "New connection established!\n"; std::cout << "New connection established!\n";
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead())); connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater())); // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE> // <20><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
if (clientSocket) { if (clientSocket) {
@@ -178,12 +203,10 @@ private slots:
void onReadyRead() { void onReadyRead() {
QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender()); QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
std::cout << "onReadyRead\n";
if (!clientSocket) { if (!clientSocket) {
std::cout << "Invalid socket\n"; std::cout << "Invalid socket\n";
return; return;
} }
std::cout << "read all\n";
QByteArray data = clientSocket->readAll(); QByteArray data = clientSocket->readAll();
QString command = QString::fromUtf8(data).trimmed(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EEB2A2><C8A5>ǰ<EFBFBD><C7B0><EFBFBD>ո<EFBFBD> QString command = QString::fromUtf8(data).trimmed(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EEB2A2><C8A5>ǰ<EFBFBD><C7B0><EFBFBD>ո<EFBFBD>
@@ -191,16 +214,35 @@ private slots:
qDebug() << "Received command:" << command; qDebug() << "Received command:" << command;
std::cout << "Received command: " << command.toStdString() << "\n"; std::cout << "Received command: " << command.toStdString() << "\n";
// <20><EFBFBD><E6B4A2>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
if (!command.isEmpty() && (commandHistory.isEmpty() || command != commandHistory.last())) {
commandHistory.append(command);
historyIndex = commandHistory.size(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7>͡<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1B1><EFBFBD><EFBFBD> // <20><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7>͡<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1B1><EFBFBD><EFBFBD>
clientSocket->write("Received command\n> "); clientSocket->write("Received command\n> ");
clientSocket->flush(); clientSocket->flush();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʾ<EFBFBD><CABE>
clientSocket->write("test_shell> "); clientSocket->write("test_shell> ");
clientSocket->flush(); // ȷ<><C8B7><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ clientSocket->flush(); // ȷ<><C8B7><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
// <20><><EFBFBD><EFBFBD> help <20><><EFBFBD><EFBFBD>
if (command == "help") {
QString helpText = "Available commands:\n";
helpText += "TEST_NUM=<num> - Set the TEST_NUM\n";
helpText += "rc - Execute rocketmq_test_rc\n";
helpText += "rt - Execute rocketmq_test_rt\n";
helpText += "ud - Execute rocketmq_test_ud\n";
helpText += "set - Execute rocketmq_test_set\n";
helpText += "ledger <id> - Execute ledger with optional terminal_id\n";
helpText += "value <valuename> - Execute value print with valuename : iedcount frontfun frontindex\n";
helpText += "exit - Exit the shell\n";
helpText += "help - Show this help message\n";
clientSocket->write(helpText.toUtf8());
clientSocket->flush();
}
// <20><><EFBFBD><EFBFBD> TEST_NUM // <20><><EFBFBD><EFBFBD> TEST_NUM
if (command.startsWith("TEST_NUM=")) { else if (command.startsWith("TEST_NUM=")) {
bool ok; bool ok;
int num = command.mid(9).toInt(&ok); // <20><>ȡ<EFBFBD>Ⱥź<C8BA><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD> int num = command.mid(9).toInt(&ok); // <20><>ȡ<EFBFBD>Ⱥź<C8BA><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
if (ok) { if (ok) {
@@ -262,7 +304,57 @@ private slots:
clientSocket->write("Executed ledger without parameters\n> "); clientSocket->write("Executed ledger without parameters\n> ");
} }
} }
else if (command.startsWith("value")) {
std::cout << "Executing value()" << std::endl;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QStringList parts = command.split(" "); // <20><><EFBFBD>ݿո<DDBF><D5B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
if (parts.size() > 1) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QString variableName = parts[1];
std::cout << "Calling value() with variable name: " << variableName.toStdString() << std::endl;
// <20><><EFBFBD><EFBFBD> value() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
value_print(variableName.toStdString().c_str(), clientSocket); // <20><><EFBFBD><EFBFBD> value() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
clientSocket->write("Executed value with variable name: " + variableName.toUtf8() + "\n> ");
} else {
std::cout << "Calling value without parameters" << std::endl;
// <20><>ʾ<EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
clientSocket->write("Please provide a variable name\n> ");
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
else if (command == "up" || command == "down") {
// <20><><EFBFBD>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EEB4A6>
if (command == "up") {
// <20>ϼ<EFBFBD>ͷ<EFBFBD><CDB7>ѡ<EFBFBD><D1A1>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
if (historyIndex > 0) {
historyIndex--;
}
} else if (command == "down") {
// <20>¼<EFBFBD>ͷ<EFBFBD><CDB7>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
if (historyIndex < commandHistory.size() - 1) {
historyIndex++;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
if (historyIndex >= 0 && historyIndex < commandHistory.size()) {
clientSocket->write(commandHistory[historyIndex].toUtf8());
} else {
clientSocket->write("No history available\n> ");
}
clientSocket->flush();
}
// <20><><EFBFBD><EFBFBD> exit <20><><EFBFBD><EFBFBD>
else if (command == "exit") {
// <20><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>رտͻ<D5BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
clientSocket->write("Goodbye! Exiting shell...\n");
clientSocket->flush();
clientSocket->disconnectFromHost(); // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
clientSocket->waitForDisconnected(); // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
}
// <20><><EFBFBD><EFBFBD>δ֪<CEB4><D6AA><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>δ֪<CEB4><D6AA><EFBFBD><EFBFBD>
else { else {
clientSocket->write("Unknown command\n> "); clientSocket->write("Unknown command\n> ");
@@ -275,12 +367,15 @@ signals:
void serverError(); void serverError();
private: private:
QList<QString> commandHistory; // <20><EFBFBD><E6B4A2>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
int historyIndex = -1; // <20><>ǰ<EFBFBD><C7B0>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QTcpServer *server; QTcpServer *server;
QTimer *timer; QTimer *timer;
int TEST_NUM; int TEST_NUM;
QMutex mutex; QMutex mutex;
}; };
//lnk20241213 //lnk20241213
class mqconsumerThread : public QThread class mqconsumerThread : public QThread
{ {
@@ -330,6 +425,7 @@ struct terminal //
char dev_type[64]; char dev_type[64];
char dev_key[255]; char dev_key[255];
char dev_series[255]; char dev_series[255];
char processNo[64]; //lnk20250210<31><30><EFBFBD>̺<EFBFBD>
char addr_str[64]; char addr_str[64];
char port[64]; char port[64];
char timestamp[64]; char timestamp[64];

View File

@@ -330,6 +330,9 @@ int main(int argc, const char **argv)
pthread_mutex_lock(&mtx);//<2F><><EFBFBD>̶߳<DFB3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ȡ̨<C8A1>˼<EFBFBD><CBBC><EFBFBD> pthread_mutex_lock(&mtx);//<2F><><EFBFBD>̶߳<DFB3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ȡ̨<C8A1>˼<EFBFBD><CBBC><EFBFBD>
if (!G_TEST_FLAG && g_front_num_count >= 30 && g_onlyIP[0] == 0 && g_node->n_clients>10) {//30<33><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˴<EFBFBD><CBB4><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ն<EFBFBD> if (!G_TEST_FLAG && g_front_num_count >= 30 && g_onlyIP[0] == 0 && g_node->n_clients>10) {//30<33><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˴<EFBFBD><CBB4><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ն<EFBFBD>
MVL_LOG_ACSE0("MYLOG: g_front_num_count>=20, so exit to restart "); MVL_LOG_ACSE0("MYLOG: g_front_num_count>=20, so exit to restart ");
pthread_mutex_unlock(&mtx);
apr_sleep(apr_time_from_sec(10)); apr_sleep(apr_time_from_sec(10));
exit(-1039); exit(-1039);
} }

View File

@@ -922,7 +922,7 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//2-<2D><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>/////////////////////////////////// //2-<2D><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>///////////////////////////////////
ied = g_node->clients[new_client_count - 1];//<2F>ն<EFBFBD>̨<EFBFBD><CCA8>ָ<EFBFBD><EFBFBD><EBB6A8><EFBFBD><EFBFBD>ied<65><64><EFBFBD>鵱ǰλ<C7B0>õĺ<C3B5>һλ ied = g_node->clients[new_client_count - 1];//<2F>ն<EFBFBD>̨<EFBFBD><CCA8>ָ<EFBFBD><EFBFBD><EBB6A8><EFBFBD><EFBFBD>ied<65><64><EFBFBD>鵱ǰλ<C7B0>õĺ<C3B5>һλ
terminal_index = new_client_count - 1;//<2F>µ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD>ն<EFBFBD> terminal_index = new_client_count;//<2F>µ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD>ն<EFBFBD>
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t)); ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));
ied->usr_ext = ied_usr;//<2F>ڴ<EFBFBD><DAB4>ҵ<EFBFBD>ied<65><64> ied->usr_ext = ied_usr;//<2F>ڴ<EFBFBD><DAB4>ҵ<EFBFBD>ied<65><64>

View File

@@ -327,6 +327,7 @@ struct ied_usr_t{
char terminal_code[256];//CZY 2023-08-30 <20>ն˱<D5B6><CBB1><EFBFBD> char terminal_code[256];//CZY 2023-08-30 <20>ն˱<D5B6><CBB1><EFBFBD>
int update_flag;//CZY 2023-08-20 ̨<>˸<EFBFBD><CBB8>±<EFBFBD>־ 0:keep 2:delete 4:update 8:add int update_flag;//CZY 2023-08-20 ̨<>˸<EFBFBD><CBB8>±<EFBFBD>־ 0:keep 2:delete 4:update 8:add
char processNo[64];//̨<>˽<EFBFBD><CBBD>̺<EFBFBD>
}; };