finish develop
This commit is contained in:
@@ -1038,11 +1038,11 @@ void init_config() {
|
|||||||
//20241212lnk<6E><6B><EFBFBD>Ӷ<EFBFBD>ǰ<EFBFBD><C7B0>
|
//20241212lnk<6E><6B><EFBFBD>Ӷ<EFBFBD>ǰ<EFBFBD><C7B0>
|
||||||
if (g_front_seg_index != 0 && g_front_seg_num != 0) {
|
if (g_front_seg_index != 0 && g_front_seg_num != 0) {
|
||||||
MULTIPLE_NODE_FLAG = 1;
|
MULTIPLE_NODE_FLAG = 1;
|
||||||
std::cout << "<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:" << g_front_seg_index << std::endl;
|
std::cout << "this is multiple process of index:" << g_front_seg_index << std::endl;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
MULTIPLE_NODE_FLAG = 0;
|
MULTIPLE_NODE_FLAG = 0;
|
||||||
std::cout << "<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:" << std::endl;
|
std::cout << "this is single process" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//20250109lnk<6E><6B><EFBFBD>ӽ<EFBFBD><D3BD>̲<EFBFBD><CCB2>Դ<EFBFBD>ӡ<EFBFBD>˿<EFBFBD>
|
//20250109lnk<6E><6B><EFBFBD>ӽ<EFBFBD><D3BD>̲<EFBFBD><CCB2>Դ<EFBFBD>ӡ<EFBFBD>˿<EFBFBD>
|
||||||
@@ -5238,7 +5238,7 @@ int SendMessageToWeb(int socketClient, int iErrorCode) //
|
|||||||
sendLength = send(socketClient, strSendJson.c_str(), strSendJson.length() + 1, 0);
|
sendLength = send(socketClient, strSendJson.c_str(), strSendJson.length() + 1, 0);
|
||||||
if (-1 == sendLength)
|
if (-1 == sendLength)
|
||||||
{
|
{
|
||||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD>[%d]<5D><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><F3A3ACB4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>%s\n", socketClient, iErrorCode, strSendJson.c_str());
|
printf("server to client[%d] send[%d] message error,error message:%s\n", socketClient, iErrorCode, strSendJson.c_str());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11676,110 +11676,106 @@ void printLedgerinshell(const ied_usr_t& ied_usr, QIODevice* outputDevice) {
|
|||||||
ied_t* ied;
|
ied_t* ied;
|
||||||
ied = find_ied_from_dev_idx(ied_usr.dev_idx);
|
ied = find_ied_from_dev_idx(ied_usr.dev_idx);
|
||||||
|
|
||||||
outputDevice->write("------------------------------------\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("------------------------------------\n");
|
||||||
outputDevice->write("|-- terminal_id: " + QByteArray(ied_usr.terminal_id) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- terminal_id: " + QByteArray(ied_usr.terminal_id) + "\n");
|
||||||
outputDevice->write("|-- dev_index: " + QByteArray::number(ied_usr.dev_idx) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_index: " + QByteArray::number(ied_usr.dev_idx) + "\n");
|
||||||
outputDevice->write("|-- dev_cpucount: " + QByteArray::number(ied->cpucount) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_cpucount: " + QByteArray::number(ied->cpucount) + "\n");
|
||||||
outputDevice->write("|-- dev_ip: " + QByteArray(ied->channel[0].addr_str) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_ip: " + QByteArray(ied->channel[0].addr_str) + "\n");
|
||||||
char portStr[20]; // <20><><EFBFBD>ڴ<EFBFBD><DAB4>Ŷ˿ںŵ<DABA><C5B5>ַ<EFBFBD><D6B7><EFBFBD>
|
char portStr[20]; // <20><><EFBFBD>ڴ<EFBFBD><DAB4>Ŷ˿ںŵ<DABA><C5B5>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
sprintf(portStr, "%u", ied->channel[0].port); // <20><><EFBFBD>˿ں<CBBF>תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
sprintf(portStr, "%u", ied->channel[0].port); // <20><><EFBFBD>˿ں<CBBF>תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
outputDevice->write("|-- dev_port: " + QByteArray(portStr) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_port: " + QByteArray(portStr) + "\n");
|
||||||
|
|
||||||
char statusStr[20]; // <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
char statusStr[20]; // <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
sprintf(statusStr, "%u", ied->channel[0].status); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
sprintf(statusStr, "%u", ied->channel[0].status); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
outputDevice->write("|-- dev_connect_status: " + QByteArray(statusStr) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_connect_status: " + QByteArray(statusStr) + "\n");
|
||||||
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_type: " + QByteArray(ied_usr.dev_type) + "\n");
|
||||||
outputDevice->write("|-- dev_type: " + QByteArray(ied_usr.dev_type) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_key: " + QByteArray(ied_usr.dev_key) + "\n");
|
||||||
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_series: " + QByteArray(ied_usr.dev_series) + "\n");
|
||||||
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_processNo: " + QByteArray(ied_usr.processNo) + "\n");
|
||||||
outputDevice->write("|-- dev_key: " + QByteArray(ied_usr.dev_key) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_flag: " + QByteArray::number(ied_usr.dev_flag) + "\n");
|
||||||
outputDevice->write("|-- dev_series: " + QByteArray(ied_usr.dev_series) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- last_call_wavelist_time: " + QByteArray::number(ied_usr.last_call_wavelist_time) + "\n");
|
||||||
outputDevice->write("|-- dev_processNo: " + QByteArray(ied_usr.processNo) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- org_name: " + QByteArray(ied_usr.org_name) + "\n");
|
||||||
outputDevice->write("|-- dev_flag: " + QByteArray::number(ied_usr.dev_flag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- maint_name: " + QByteArray(ied_usr.maint_name) + "\n");
|
||||||
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- station_name: " + QByteArray(ied_usr.station_name) + "\n");
|
||||||
outputDevice->write("|-- last_call_wavelist_time: " + QByteArray::number(ied_usr.last_call_wavelist_time) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- tmnl_factory: " + QByteArray(ied_usr.tmnl_factory) + "\n");
|
||||||
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- time: " + QByteArray::number(ied_usr.time) + "\n");
|
||||||
outputDevice->write("|-- org_name: " + QByteArray(ied_usr.org_name) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- tmnl_status: " + QByteArray(ied_usr.tmnl_status) + "\n");
|
||||||
outputDevice->write("|-- maint_name: " + QByteArray(ied_usr.maint_name) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- terminal_code: " + QByteArray(ied_usr.terminal_code) + "\n");
|
||||||
outputDevice->write("|-- station_name: " + QByteArray(ied_usr.station_name) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- update_flag: " + QByteArray::number(ied_usr.update_flag) + "\n");
|
||||||
outputDevice->write("|-- tmnl_factory: " + QByteArray(ied_usr.tmnl_factory) + "\n");
|
|
||||||
outputDevice->write("|-- time: " + QByteArray::number(ied_usr.time) + "\n");
|
|
||||||
outputDevice->write("|-- tmnl_status: " + QByteArray(ied_usr.tmnl_status) + "\n");
|
|
||||||
outputDevice->write("|-- terminal_code: " + QByteArray(ied_usr.terminal_code) + "\n");
|
|
||||||
outputDevice->write("|-- update_flag: " + QByteArray::number(ied_usr.update_flag) + "\n");
|
|
||||||
|
|
||||||
// <20><>ӡÿ<D3A1><C3BF>LD_info<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><>ӡÿ<D3A1><C3BF>LD_info<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
for (int i = 0; i < 10; ++i) {
|
for (int i = 0; i < 10; ++i) {
|
||||||
if (strcmp(ied_usr.LD_info[i].mp_id, "") != 0) {
|
if (strcmp(ied_usr.LD_info[i].mp_id, "") != 0) {
|
||||||
outputDevice->write("|-- LD_info[" + QByteArray::number(i) + "]:\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("|-- LD_info[" + QByteArray::number(i) + "]:\n");
|
||||||
|
|
||||||
// name
|
// name
|
||||||
outputDevice->write(" |-- name: " + QByteArray(ied_usr.LD_info[i].name) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- name: " + QByteArray(ied_usr.LD_info[i].name) + "\n");
|
||||||
outputDevice->write(" |-- LD_name: "
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- LD_name: "
|
||||||
+ (strlen(ied_usr.LD_info[i].LD_name) == 0 ? QByteArray("NA") : QByteArray(ied_usr.LD_info[i].LD_name))
|
+ (strlen(ied_usr.LD_info[i].LD_name) == 0 ? QByteArray("NA") : QByteArray(ied_usr.LD_info[i].LD_name))
|
||||||
+ "\n");
|
+ "\n");
|
||||||
outputDevice->write(" |-- read_flag: " + QByteArray::number(ied_usr.LD_info[i].read_flag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- read_flag: " + QByteArray::number(ied_usr.LD_info[i].read_flag) + "\n");
|
||||||
|
|
||||||
// index
|
// index
|
||||||
outputDevice->write(" |-- line_id: " + QByteArray::number(ied_usr.LD_info[i].line_id) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- line_id: " + QByteArray::number(ied_usr.LD_info[i].line_id) + "\n");
|
||||||
|
|
||||||
// monitorledger
|
// monitorledger
|
||||||
outputDevice->write(" |-- mp_id: " + QByteArray(ied_usr.LD_info[i].mp_id) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- mp_id: " + QByteArray(ied_usr.LD_info[i].mp_id) + "\n");
|
||||||
outputDevice->write(" |-- terminal_code: " + QByteArray(ied_usr.LD_info[i].terminal_code) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- terminal_code: " + QByteArray(ied_usr.LD_info[i].terminal_code) + "\n");
|
||||||
outputDevice->write(" |-- voltage_level: " + QByteArray(ied_usr.LD_info[i].voltage_level) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- voltage_level: " + QByteArray(ied_usr.LD_info[i].voltage_level) + "\n");
|
||||||
outputDevice->write(" |-- v_wiring_type: " + QByteArray(ied_usr.LD_info[i].v_wiring_type) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- v_wiring_type: " + QByteArray(ied_usr.LD_info[i].v_wiring_type) + "\n");
|
||||||
outputDevice->write(" |-- time: " + QByteArray::number(ied_usr.LD_info[i].time) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- time: " + QByteArray::number(ied_usr.LD_info[i].time) + "\n");
|
||||||
outputDevice->write(" |-- update_flag: " + QByteArray::number(ied_usr.LD_info[i].update_flag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- update_flag: " + QByteArray::number(ied_usr.LD_info[i].update_flag) + "\n");
|
||||||
outputDevice->write(" |-- monitor_status: " + QByteArray(ied_usr.LD_info[i].monitor_status) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- monitor_status: " + QByteArray(ied_usr.LD_info[i].monitor_status) + "\n");
|
||||||
|
|
||||||
// count<6E>ݲ<EFBFBD><DDB2><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
|
// count<6E>ݲ<EFBFBD><DDB2><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
|
||||||
outputDevice->write(" |-- rptcount: " + QByteArray::number(ied_usr.LD_info[i].rptcount) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptcount: " + QByteArray::number(ied_usr.LD_info[i].rptcount) + "\n");
|
||||||
outputDevice->write(" |-- logcount: " + QByteArray::number(ied_usr.LD_info[i].logcount) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- logcount: " + QByteArray::number(ied_usr.LD_info[i].logcount) + "\n");
|
||||||
|
|
||||||
// rpt
|
// rpt
|
||||||
outputDevice->write(" |-- rptRecvFlag: " + QByteArray::number(ied_usr.LD_info[i].rptRecvFlag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptRecvFlag: " + QByteArray::number(ied_usr.LD_info[i].rptRecvFlag) + "\n");
|
||||||
outputDevice->write(" |-- rptRecvCheckFlag: " + QByteArray::number(ied_usr.LD_info[i].rptRecvCheckFlag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptRecvCheckFlag: " + QByteArray::number(ied_usr.LD_info[i].rptRecvCheckFlag) + "\n");
|
||||||
outputDevice->write(" |-- rptPstRecvFlag: " + QByteArray::number(ied_usr.LD_info[i].rptPstRecvFlag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptPstRecvFlag: " + QByteArray::number(ied_usr.LD_info[i].rptPstRecvFlag) + "\n");
|
||||||
outputDevice->write(" |-- rptPstRecvCheckFlag: " + QByteArray::number(ied_usr.LD_info[i].rptPstRecvCheckFlag) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptPstRecvCheckFlag: " + QByteArray::number(ied_usr.LD_info[i].rptPstRecvCheckFlag) + "\n");
|
||||||
|
|
||||||
// rtdata
|
// rtdata
|
||||||
outputDevice->write(" |-- real_data: " + QByteArray::number(ied_usr.LD_info[i].real_data) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- real_data: " + QByteArray::number(ied_usr.LD_info[i].real_data) + "\n");
|
||||||
outputDevice->write(" |-- soe_data: " + QByteArray::number(ied_usr.LD_info[i].soe_data) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- soe_data: " + QByteArray::number(ied_usr.LD_info[i].soe_data) + "\n");
|
||||||
outputDevice->write(" |-- limit: " + QByteArray::number(ied_usr.LD_info[i].limit) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- limit: " + QByteArray::number(ied_usr.LD_info[i].limit) + "\n");
|
||||||
outputDevice->write(" |-- count: " + QByteArray::number(ied_usr.LD_info[i].count) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- count: " + QByteArray::number(ied_usr.LD_info[i].count) + "\n");
|
||||||
|
|
||||||
// RDRE
|
// RDRE
|
||||||
outputDevice->write(" |-- RDRE_FltNum: " + QByteArray::number(ied_usr.LD_info[i].RDRE_FltNum) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- RDRE_FltNum: " + QByteArray::number(ied_usr.LD_info[i].RDRE_FltNum) + "\n");
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 256; ++j) {
|
||||||
if (ied_usr.LD_info[i].FltNum[j] != 0) {
|
if (ied_usr.LD_info[i].FltNum[j] != 0) {
|
||||||
outputDevice->write(" |-- FltNum[" + QByteArray::number(j) + "]: "
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- FltNum[" + QByteArray::number(j) + "]: "
|
||||||
+ QByteArray::number(ied_usr.LD_info[i].FltNum[j]) + "\n");
|
+ QByteArray::number(ied_usr.LD_info[i].FltNum[j]) + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// QVVR
|
// QVVR
|
||||||
outputDevice->write(" |-- qvvr_idx: " + QByteArray::number(ied_usr.LD_info[i].qvvr_idx) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- qvvr_idx: " + QByteArray::number(ied_usr.LD_info[i].qvvr_idx) + "\n");
|
||||||
outputDevice->write(" |-- QVVRs:\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVRs:\n");
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 256; ++j) {
|
||||||
if (ied_usr.LD_info[i].qvvr[j].used_status != 0) {
|
if (ied_usr.LD_info[i].qvvr[j].used_status != 0) {
|
||||||
outputDevice->write(" |-- QVVR[" + QByteArray::number(j) + "]:\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR[" + QByteArray::number(j) + "]:\n");
|
||||||
outputDevice->write(" |-- used_status: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].used_status) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- used_status: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].used_status) + "\n");
|
||||||
outputDevice->write(" |-- QVVR_start: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_start) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_start: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_start) + "\n");
|
||||||
outputDevice->write(" |-- QVVR_type: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_type) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_type: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_type) + "\n");
|
||||||
outputDevice->write(" |-- QVVR_time: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_time) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_time: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_time) + "\n");
|
||||||
outputDevice->write(" |-- QVVR_PerTime: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_PerTime) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_PerTime: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_PerTime) + "\n");
|
||||||
outputDevice->write(" |-- QVVR_Amg: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_Amg) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_Amg: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_Amg) + "\n");
|
||||||
outputDevice->write(" |-- QVVR_Rptname: " + QByteArray(ied_usr.LD_info[i].qvvr[j].QVVR_Rptname) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_Rptname: " + QByteArray(ied_usr.LD_info[i].qvvr[j].QVVR_Rptname) + "\n");
|
||||||
outputDevice->write(" |-- timestamp: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].timestamp) + "\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- timestamp: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].timestamp) + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
outputDevice->write("------------------------------------\n");
|
outputDevice->write("\r\x1B[K");outputDevice->write("------------------------------------\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD>ض<EFBFBD><D8B6>ն<EFBFBD><D5B6><EFBFBD>Ϣ
|
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD>ض<EFBFBD><D8B6>ն<EFBFBD><D5B6><EFBFBD>Ϣ
|
||||||
void ledger(const char* terminal_id, QIODevice* outputDevice) {
|
void ledger(const char* terminal_id, QIODevice* outputDevice) {
|
||||||
|
outputDevice->write("\r\x1B[K");
|
||||||
outputDevice->write("print ledger in shell");
|
outputDevice->write("print ledger in shell");
|
||||||
pthread_mutex_lock(&mtx); std::cout << "ledger()hold lock !!!!!!!!!!!" << std::endl;
|
pthread_mutex_lock(&mtx); std::cout << "ledger()hold lock !!!!!!!!!!!" << std::endl;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
@@ -11790,20 +11786,25 @@ void ledger(const char* terminal_id, QIODevice* outputDevice) {
|
|||||||
if(ied != NULL){
|
if(ied != NULL){
|
||||||
ied_usr = (ied_usr_t*)ied->usr_ext;
|
ied_usr = (ied_usr_t*)ied->usr_ext;
|
||||||
if (ied_usr != NULL && (terminal_id == NULL || strcmp(ied_usr->terminal_id, terminal_id) == 0)) {
|
if (ied_usr != NULL && (terminal_id == NULL || strcmp(ied_usr->terminal_id, terminal_id) == 0)) {
|
||||||
//printLedgerinshell(*ied_usr, outputDevice); // ʹ<><CAB9> QIODevice <20><><EFBFBD><EFBFBD>
|
printLedgerinshell(*ied_usr, outputDevice); // ʹ<><CAB9> QIODevice <20><><EFBFBD><EFBFBD>
|
||||||
//std::cout << "!!! print to log !!!"<< std::endl;
|
//std::cout << "!!! print to log !!!"<< std::endl;
|
||||||
//printLedger(*ied_usr);
|
//printLedger(*ied_usr);
|
||||||
found = true;
|
if(terminal_id != NULL && strcmp(ied_usr->terminal_id, terminal_id) == 0){
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (!found || terminal_id == NULL) {
|
pthread_mutex_unlock(&mtx); std::cout << "ledger()free lock !!!!!!!!!!!" << std::endl;
|
||||||
std::cout << "<EFBFBD><EFBFBD><EFBFBD>ն˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: " << terminal_id << std::endl;
|
if (terminal_id != NULL && !found) {
|
||||||
QByteArray msg = "<EFBFBD><EFBFBD><EFBFBD>ն˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: " + QByteArray(terminal_id ? terminal_id : "NULL") + "\n";
|
std::cout << "terminal not exsist: " << terminal_id << std::endl;
|
||||||
|
QByteArray msg = "terminal not exsist: " + QByteArray(terminal_id) + "\n";
|
||||||
|
outputDevice->write("\r\x1B[K");
|
||||||
outputDevice->write(msg); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> QIODevice
|
outputDevice->write(msg); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> QIODevice
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&mtx); std::cout << "ledger()free lock !!!!!!!!!!!" << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//lnk20250210<31><30>ӡָ<D3A1><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
|
//lnk20250210<31><30>ӡָ<D3A1><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -11815,25 +11816,32 @@ void value_print(const char *variableName, QTcpSocket *clientSocket) {
|
|||||||
|
|
||||||
if (strcmp(variableName, "frontindex") == 0) {
|
if (strcmp(variableName, "frontindex") == 0) {
|
||||||
sprintf(buffer, "frontindex = %d", g_front_seg_index); // <20><> int ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
sprintf(buffer, "frontindex = %d", g_front_seg_index); // <20><> int ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(buffer); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
|
clientSocket->write(buffer); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
|
||||||
}
|
}
|
||||||
else if (strcmp(variableName, "remtable") == 0) {
|
else if (strcmp(variableName, "remtable") == 0) {
|
||||||
sprintf(buffer, "remtable = %d",g_pt61850app->chnl_counts);
|
sprintf(buffer, "remtable = %d",g_pt61850app->chnl_counts);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(buffer);
|
clientSocket->write(buffer);
|
||||||
}
|
}
|
||||||
else if (strcmp(variableName, "iedcount") == 0) {
|
else if (strcmp(variableName, "iedcount") == 0) {
|
||||||
sprintf(buffer, "g_node->n_clients = %d, ied config count = %d",g_node->n_clients ,IED_COUNT);
|
sprintf(buffer, "g_node->n_clients = %d, ied config count = %d",g_node->n_clients ,IED_COUNT);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(buffer);
|
clientSocket->write(buffer);
|
||||||
} else if (strcmp(variableName, "frontfun") == 0) {
|
} else if (strcmp(variableName, "frontfun") == 0) {
|
||||||
sprintf(buffer, "frontfun = %s", subdir);
|
sprintf(buffer, "frontfun = %s", subdir);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(buffer);
|
clientSocket->write(buffer);
|
||||||
} else if (strcmp(variableName, "log") == 0) {
|
} else if (strcmp(variableName, "log") == 0) {
|
||||||
sprintf(buffer, "showinshellflag = %d,debugOutputEnabled = %d,normalOutputEnabled = %d,warnOutputEnabled = %d,errorOutputEnabled = %d", showinshellflag,debugOutputEnabled,normalOutputEnabled,warnOutputEnabled,errorOutputEnabled);
|
sprintf(buffer, "showinshellflag = %d,debugOutputEnabled = %d,normalOutputEnabled = %d,warnOutputEnabled = %d,errorOutputEnabled = %d", showinshellflag,debugOutputEnabled,normalOutputEnabled,warnOutputEnabled,errorOutputEnabled);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(buffer);
|
clientSocket->write(buffer);
|
||||||
}else if (strcmp(variableName, "init") == 0) {
|
}else if (strcmp(variableName, "init") == 0) {
|
||||||
sprintf(buffer, "INITFLAG = %d",INITFLAG);
|
sprintf(buffer, "INITFLAG = %d",INITFLAG);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(buffer);
|
clientSocket->write(buffer);
|
||||||
}else {
|
}else {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write("Unknown variable name\n> ");
|
clientSocket->write("Unknown variable name\n> ");
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&mtx); std::cout << "value_print free lock !!!!!!!!!!!" << std::endl;
|
pthread_mutex_unlock(&mtx); std::cout << "value_print free lock !!!!!!!!!!!" << std::endl;
|
||||||
@@ -11859,6 +11867,7 @@ pthread_mutex_t* getLogMutex(const QString& level) {
|
|||||||
void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSocket) {
|
void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSocket) {
|
||||||
QStringList parts = command.split(" ");
|
QStringList parts = command.split(" ");
|
||||||
if (parts.size() != 2) {
|
if (parts.size() != 2) {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write("Usage: viewlog [ERROR|WARN|NORMAL|DEBUG]\n> ");
|
clientSocket->write("Usage: viewlog [ERROR|WARN|NORMAL|DEBUG]\n> ");
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
return;
|
return;
|
||||||
@@ -11869,6 +11878,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
|
|||||||
pthread_mutex_t* logMutex = getLogMutex(logLevel);
|
pthread_mutex_t* logMutex = getLogMutex(logLevel);
|
||||||
|
|
||||||
if (!logList || !logMutex) {
|
if (!logList || !logMutex) {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write("Invalid log level! Use ERROR, WARN, NORMAL, or DEBUG.\n> ");
|
clientSocket->write("Invalid log level! Use ERROR, WARN, NORMAL, or DEBUG.\n> ");
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
return;
|
return;
|
||||||
@@ -11877,6 +11887,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
|
|||||||
stopViewLog = false;
|
stopViewLog = false;
|
||||||
activeClient = clientSocket; // <20><>¼<EFBFBD><C2BC>ǰ shell socket
|
activeClient = clientSocket; // <20><>¼<EFBFBD><C2BC>ǰ shell socket
|
||||||
|
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write(QString("Viewing logs for level: %1 (Press 'q' to exit)\n> ").arg(logLevel).toUtf8());
|
clientSocket->write(QString("Viewing logs for level: %1 (Press 'q' to exit)\n> ").arg(logLevel).toUtf8());
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
|
|
||||||
@@ -11900,6 +11911,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
|
|||||||
pthread_mutex_unlock(logMutex);
|
pthread_mutex_unlock(logMutex);
|
||||||
|
|
||||||
if (!logEntry.empty()) {
|
if (!logEntry.empty()) {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write((logEntry + "\n").c_str());
|
clientSocket->write((logEntry + "\n").c_str());
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
@@ -11910,6 +11922,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
|
|||||||
}
|
}
|
||||||
|
|
||||||
// **3. <20>˳<EFBFBD> `viewlog`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shell**
|
// **3. <20>˳<EFBFBD> `viewlog`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shell**
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write("\nLog view stopped. Returning to shell.\n> ");
|
clientSocket->write("\nLog view stopped. Returning to shell.\n> ");
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
@@ -15289,12 +15302,20 @@ public:
|
|||||||
TeeStreamBuf()
|
TeeStreamBuf()
|
||||||
: m_originalBuf(NULL), m_level(LOGNORMAL)
|
: m_originalBuf(NULL), m_level(LOGNORMAL)
|
||||||
{
|
{
|
||||||
|
pthread_mutex_init(&m_mutex, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD>ι<EFBFBD><CEB9>죺ֱ<ECA3BA>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
|
// <20><><EFBFBD>ι<EFBFBD><CEB9>죺ֱ<ECA3BA>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
|
||||||
TeeStreamBuf(std::streambuf* originalBuf, LogLevel level)
|
TeeStreamBuf(std::streambuf* originalBuf, LogLevel level)
|
||||||
: m_originalBuf(originalBuf), m_level(level)
|
: m_originalBuf(originalBuf), m_level(level)
|
||||||
{
|
{
|
||||||
|
pthread_mutex_init(&m_mutex, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
virtual ~TeeStreamBuf()
|
||||||
|
{
|
||||||
|
pthread_mutex_destroy(&m_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20>Զ<EFBFBD><D4B6><EFBFBD> init(...) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>Զ<EFBFBD><D4B6><EFBFBD> init(...) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -15302,7 +15323,9 @@ public:
|
|||||||
{
|
{
|
||||||
m_originalBuf = originalBuf;
|
m_originalBuf = originalBuf;
|
||||||
m_level = level;
|
m_level = level;
|
||||||
|
pthread_mutex_lock(&m_mutex);
|
||||||
m_buffer.clear();
|
m_buffer.clear();
|
||||||
|
pthread_mutex_unlock(&m_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -15330,97 +15353,100 @@ protected:
|
|||||||
return traits_type::eof();
|
return traits_type::eof();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 2) <20>浽<EFBFBD><E6B5BD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
// 2) <20>浽<EFBFBD><E6B5BD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>棬ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
m_buffer.push_back((char)ch);
|
pthread_mutex_lock(&m_mutex); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20250305
|
||||||
|
m_buffer.push_back(static_cast<char>(ch));
|
||||||
// 3) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD> flushBuffer()
|
// 3) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD> flushBuffer()
|
||||||
if (ch == '\n') {
|
if (ch == '\n') {
|
||||||
flushBuffer();
|
flushBuffer_locked();
|
||||||
}
|
}
|
||||||
|
pthread_mutex_unlock(&m_mutex);
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// <20><EFBFBD> m_buffer <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ list<73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>ڲ<EFBFBD><EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
void flushBuffer()
|
void flushBuffer_locked()
|
||||||
{
|
{
|
||||||
if (m_buffer.empty()) {
|
if (m_buffer.empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// <20><><EFBFBD>ݵȼ<DDB5><C8BC>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>أ<EFBFBD><D8A3><EFBFBD> m_buffer д<><D0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6> list
|
||||||
// <20><><EFBFBD>ݵȼ<DDB5> + <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> <20><> д<>ļ<EFBFBD><C4BC><EFBFBD>list
|
|
||||||
switch (m_level) {
|
switch (m_level) {
|
||||||
|
|
||||||
case LOGERROR:
|
case LOGERROR:
|
||||||
|
if (debugOutputEnabled) {
|
||||||
if (debugOutputEnabled) {
|
pthread_mutex_lock(&debugListMutex);
|
||||||
pthread_mutex_lock(&debugListMutex);
|
debugList.push_back(m_buffer);
|
||||||
debugList.push_back(m_buffer);
|
pthread_mutex_unlock(&debugListMutex);
|
||||||
pthread_mutex_unlock(&debugListMutex);
|
}
|
||||||
}
|
|
||||||
else if (normalOutputEnabled) {
|
else if (normalOutputEnabled) {
|
||||||
pthread_mutex_lock(&normalListMutex);
|
pthread_mutex_lock(&normalListMutex);
|
||||||
normalList.push_back(m_buffer);
|
normalList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&normalListMutex);
|
pthread_mutex_unlock(&normalListMutex);
|
||||||
}
|
}
|
||||||
else if (warnOutputEnabled) {
|
else if (warnOutputEnabled) {
|
||||||
pthread_mutex_lock(&warnListMutex);
|
pthread_mutex_lock(&warnListMutex);
|
||||||
warnList.push_back(m_buffer);
|
warnList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&warnListMutex);
|
pthread_mutex_unlock(&warnListMutex);
|
||||||
}
|
}
|
||||||
else if (errorOutputEnabled) {
|
else if (errorOutputEnabled) {
|
||||||
pthread_mutex_lock(&errorListMutex);
|
pthread_mutex_lock(&errorListMutex);
|
||||||
errorList.push_back(m_buffer);
|
errorList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&errorListMutex);
|
pthread_mutex_unlock(&errorListMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LOGWARN:
|
case LOGWARN:
|
||||||
|
if (debugOutputEnabled) {
|
||||||
if (debugOutputEnabled) {
|
pthread_mutex_lock(&debugListMutex);
|
||||||
pthread_mutex_lock(&debugListMutex);
|
debugList.push_back(m_buffer);
|
||||||
debugList.push_back(m_buffer);
|
pthread_mutex_unlock(&debugListMutex);
|
||||||
pthread_mutex_unlock(&debugListMutex);
|
}
|
||||||
}
|
|
||||||
else if (normalOutputEnabled) {
|
else if (normalOutputEnabled) {
|
||||||
pthread_mutex_lock(&normalListMutex);
|
pthread_mutex_lock(&normalListMutex);
|
||||||
normalList.push_back(m_buffer);
|
normalList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&normalListMutex);
|
pthread_mutex_unlock(&normalListMutex);
|
||||||
}
|
}
|
||||||
else if (warnOutputEnabled) {
|
else if (warnOutputEnabled) {
|
||||||
pthread_mutex_lock(&warnListMutex);
|
pthread_mutex_lock(&warnListMutex);
|
||||||
warnList.push_back(m_buffer);
|
warnList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&warnListMutex);
|
pthread_mutex_unlock(&warnListMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LOGNORMAL:
|
case LOGNORMAL:
|
||||||
if (debugOutputEnabled) {
|
if (debugOutputEnabled) {
|
||||||
pthread_mutex_lock(&debugListMutex);
|
pthread_mutex_lock(&debugListMutex);
|
||||||
debugList.push_back(m_buffer);
|
debugList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&debugListMutex);
|
pthread_mutex_unlock(&debugListMutex);
|
||||||
}
|
}
|
||||||
else if (normalOutputEnabled) {
|
else if (normalOutputEnabled) {
|
||||||
pthread_mutex_lock(&normalListMutex);
|
pthread_mutex_lock(&normalListMutex);
|
||||||
normalList.push_back(m_buffer);
|
normalList.push_back(m_buffer);
|
||||||
pthread_mutex_unlock(&normalListMutex);
|
pthread_mutex_unlock(&normalListMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_buffer.clear();
|
m_buffer.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿڣ<D3BF><DAA3>ڲ<EFBFBD><DAB2><EFBFBD> m_buffer <20><><EFBFBD><EFBFBD>
|
||||||
|
void flushBuffer()
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&m_mutex);
|
||||||
|
flushBuffer_locked();
|
||||||
|
pthread_mutex_unlock(&m_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// <20><>ֹ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ɵĸ<C9B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
// <20><>ֹ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ɵĸ<C9B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
TeeStreamBuf& operator=(const TeeStreamBuf&); // <20><>ʵ<EFBFBD><CAB5>
|
TeeStreamBuf& operator=(const TeeStreamBuf&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::streambuf* m_originalBuf;
|
std::streambuf* m_originalBuf;
|
||||||
LogLevel m_level;
|
LogLevel m_level;
|
||||||
std::string m_buffer;
|
std::string m_buffer;
|
||||||
|
pthread_mutex_t m_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ------------------ ȫ<><C8AB>Tee<65><65><EFBFBD><EFBFBD><F3A3A8B1><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5> ------------------
|
// ------------------ ȫ<><C8AB>Tee<65><65><EFBFBD><EFBFBD><F3A3A8B1><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5> ------------------
|
||||||
|
|||||||
@@ -3808,7 +3808,7 @@ char* Get_xmlpath(char* devtype)
|
|||||||
if (xmlinfo_list.contains(type)) {
|
if (xmlinfo_list.contains(type)) {
|
||||||
cout << "!!!!!!!!!! xmlinfo_list.contains(devtype) == 1 !!!!!!!!!!!" << endl;
|
cout << "!!!!!!!!!! xmlinfo_list.contains(devtype) == 1 !!!!!!!!!!!" << endl;
|
||||||
QByteArray byteArray = xmlinfo_list[devtype]->xmlbase.MODEL_ID.toLocal8Bit();
|
QByteArray byteArray = xmlinfo_list[devtype]->xmlbase.MODEL_ID.toLocal8Bit();
|
||||||
char* charArray = new char[byteArray.size()];
|
char* charArray = new char[byteArray.size()+1];//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ+1<><31>ֹ<EFBFBD>ڴ<EFBFBD>й©lnk20250305
|
||||||
memcpy(charArray, byteArray.data(), byteArray.size());
|
memcpy(charArray, byteArray.data(), byteArray.size());
|
||||||
charArray[byteArray.size()] = '\0';
|
charArray[byteArray.size()] = '\0';
|
||||||
return charArray;
|
return charArray;
|
||||||
@@ -3830,7 +3830,7 @@ char* Get_IED(char* devtype)
|
|||||||
ied.append(xmlinfo_list[devtype]->xmlcfg.LDevicePrefix);
|
ied.append(xmlinfo_list[devtype]->xmlcfg.LDevicePrefix);
|
||||||
ied.append("%d");
|
ied.append("%d");
|
||||||
QByteArray byteArray = ied.toLocal8Bit();
|
QByteArray byteArray = ied.toLocal8Bit();
|
||||||
char* charArray = new char[byteArray.size()];
|
char* charArray = new char[byteArray.size()+1];//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ+1<><31>ֹ<EFBFBD>ڴ<EFBFBD>й©lnk20250305
|
||||||
memcpy(charArray, byteArray.data(), byteArray.size());
|
memcpy(charArray, byteArray.data(), byteArray.size());
|
||||||
charArray[byteArray.size()] = '\0';
|
charArray[byteArray.size()] = '\0';
|
||||||
return charArray;
|
return charArray;
|
||||||
@@ -3844,7 +3844,7 @@ char* Get_IED(char* devtype)
|
|||||||
ied.append(xmlcfg.LDevicePrefix);
|
ied.append(xmlcfg.LDevicePrefix);
|
||||||
ied.append("%d");
|
ied.append("%d");
|
||||||
QByteArray byteArray = ied.toLocal8Bit();
|
QByteArray byteArray = ied.toLocal8Bit();
|
||||||
char* charArray = new char[byteArray.size()];
|
char* charArray = new char[byteArray.size()+1];//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ+1<><31>ֹ<EFBFBD>ڴ<EFBFBD>й©lnk20250305
|
||||||
memcpy(charArray, byteArray.data(), byteArray.size());
|
memcpy(charArray, byteArray.data(), byteArray.size());
|
||||||
charArray[byteArray.size()] = '\0';
|
charArray[byteArray.size()] = '\0';
|
||||||
return charArray;
|
return charArray;
|
||||||
@@ -3859,7 +3859,7 @@ char* Get_LDevice(char* devtype)
|
|||||||
ied.append(xmlinfo_list[devtype]->xmlcfg.LDevicePrefix);//ʹ<>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ն<EFBFBD>ǰ
|
ied.append(xmlinfo_list[devtype]->xmlcfg.LDevicePrefix);//ʹ<>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ն<EFBFBD>ǰ
|
||||||
ied.append("%d");
|
ied.append("%d");
|
||||||
QByteArray byteArray = ied.toLocal8Bit();
|
QByteArray byteArray = ied.toLocal8Bit();
|
||||||
char* charArray = new char[byteArray.size()];
|
char* charArray = new char[byteArray.size()+1];//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ+1<><31>ֹ<EFBFBD>ڴ<EFBFBD>й©lnk20250305
|
||||||
memcpy(charArray, byteArray.data(), byteArray.size());
|
memcpy(charArray, byteArray.data(), byteArray.size());
|
||||||
charArray[byteArray.size()] = '\0';
|
charArray[byteArray.size()] = '\0';
|
||||||
return charArray;
|
return charArray;
|
||||||
@@ -3871,7 +3871,7 @@ char* Get_LDevice(char* devtype)
|
|||||||
ied.append(xmlcfg.LDevicePrefix);//ʹ<><CAB9>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ն<EFBFBD>ǰ
|
ied.append(xmlcfg.LDevicePrefix);//ʹ<><CAB9>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ն<EFBFBD>ǰ
|
||||||
ied.append("%d");
|
ied.append("%d");
|
||||||
QByteArray byteArray = ied.toLocal8Bit();
|
QByteArray byteArray = ied.toLocal8Bit();
|
||||||
char* charArray = new char[byteArray.size()];
|
char* charArray = new char[byteArray.size()+1];//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ+1<><31>ֹ<EFBFBD>ڴ<EFBFBD>й©lnk20250305
|
||||||
memcpy(charArray, byteArray.data(), byteArray.size());
|
memcpy(charArray, byteArray.data(), byteArray.size());
|
||||||
charArray[byteArray.size()] = '\0';
|
charArray[byteArray.size()] = '\0';
|
||||||
return charArray;
|
return charArray;
|
||||||
|
|||||||
@@ -608,7 +608,7 @@ void KafkaSendThread::run()
|
|||||||
pthread_mutex_lock(&debugListMutex);
|
pthread_mutex_lock(&debugListMutex);
|
||||||
if (!debugList.empty()) {
|
if (!debugList.empty()) {
|
||||||
log_gotten = true;
|
log_gotten = true;
|
||||||
log_send.strText = QString::fromStdString(errorList.front());
|
log_send.strText = QString::fromStdString(debugList.front());//<2F><>ȷ<EFBFBD><C8B7>list<73><74>ȷ
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD>հ<EFBFBD><D5B0>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD>հ<EFBFBD><D5B0>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
|
||||||
if (log_send.strText.trimmed().isEmpty()) {
|
if (log_send.strText.trimmed().isEmpty()) {
|
||||||
debugList.pop_front(); // ֱ<>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
debugList.pop_front(); // ֱ<>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||||
@@ -1234,10 +1234,14 @@ void parse_set(const std::string& json_str) {
|
|||||||
for (int i = 0; i < data_size; i++) {
|
for (int i = 0; i < data_size; i++) {
|
||||||
cJSON* item = cJSON_GetArrayItem(data, i);
|
cJSON* item = cJSON_GetArrayItem(data, i);
|
||||||
|
|
||||||
std::string fun = cJSON_GetObjectItem(item, "fun")->valuestring;
|
std::string fun = cJSON_GetObjectItem(item, "fun")->valuestring?cJSON_GetObjectItem(item, "fun")->valuestring:"NULL";
|
||||||
std::string ip = cJSON_GetObjectItem(item, "ip")->valuestring;
|
std::string ip = cJSON_GetObjectItem(item, "ip")->valuestring?cJSON_GetObjectItem(item, "ip")->valuestring:"NULL";
|
||||||
std::string frontType = cJSON_GetObjectItem(item, "frontType")->valuestring;
|
std::string frontType = cJSON_GetObjectItem(item, "frontType")->valuestring?cJSON_GetObjectItem(item, "frontType")->valuestring:"NULL";
|
||||||
int proindex = cJSON_GetObjectItem(item, "proindex")->valueint;
|
cJSON *index_item = cJSON_GetObjectItem(item, "proindex");
|
||||||
|
int proindex = 0; // Ĭ<><C4AC>ֵ
|
||||||
|
if (index_item != NULL && index_item->type == cJSON_Number) {
|
||||||
|
proindex = index_item->valueint;
|
||||||
|
}
|
||||||
|
|
||||||
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if((fun == "start" || fun == "delete") &&
|
if((fun == "start" || fun == "delete") &&
|
||||||
@@ -2837,11 +2841,6 @@ void try_start_http_thread()
|
|||||||
int try_start_mqtest_thread(int argc, char *argv[])
|
int try_start_mqtest_thread(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
//<2F><>ʹ<EFBFBD>ü<C3BC>ѭ<EFBFBD><D1AD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>app<70><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ѭ<EFBFBD><D1AD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><>ʹ<EFBFBD>ü<C3BC>ѭ<EFBFBD><D1AD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>app<70><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ѭ<EFBFBD><D1AD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
/*static int mqtest_thread_created = 0;
|
|
||||||
if (!mqtest_thread_created) {
|
|
||||||
mqtestThrd.start();
|
|
||||||
mqtest_thread_created = 1;
|
|
||||||
}*/
|
|
||||||
//<2F><>װqt<71><74>ӡ
|
//<2F><>װqt<71><74>ӡ
|
||||||
qInstallMsgHandler(myQtMsgHandler);
|
qInstallMsgHandler(myQtMsgHandler);
|
||||||
|
|
||||||
@@ -2863,8 +2862,6 @@ int try_start_mqtest_thread(int argc, char *argv[])
|
|||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
||||||
thread->start();
|
thread->start();
|
||||||
|
|
||||||
//std::cout << "start_mqtest"<<std::endl;
|
|
||||||
|
|
||||||
// ȷ<><C8B7><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>˳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>߳<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ȷ<EFBFBD>˳<EFBFBD>
|
// ȷ<><C8B7><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>˳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>߳<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ȷ<EFBFBD>˳<EFBFBD>
|
||||||
QObject::connect(&a, SIGNAL(aboutToQuit()), thread, SLOT(quit()));
|
QObject::connect(&a, SIGNAL(aboutToQuit()), thread, SLOT(quit()));
|
||||||
|
|
||||||
|
|||||||
490
json/save2json.h
490
json/save2json.h
@@ -120,6 +120,22 @@ void doMonitorTaskmain(void);
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ====================== Telnet <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ======================
|
||||||
|
// Telnet <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>:
|
||||||
|
#define IAC 255 // Interpret As Command
|
||||||
|
#define DONT 254
|
||||||
|
#define TELDO 253
|
||||||
|
#define WONT 252
|
||||||
|
#define WILL 251
|
||||||
|
|
||||||
|
// Telnet ѡ<><EFBFBD><EEB3A3>:
|
||||||
|
#define TELOPT_ECHO 1 // <20><><EFBFBD><EFBFBD>
|
||||||
|
#define TELOPT_SUPPRESS_GO_AHEAD 3 // SGA
|
||||||
|
#define TELOPT_LINEMODE 34 // <20><>ģʽ
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Worker<65>ࣺ<EFBFBD><E0A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Telnet<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
class Worker : public QObject
|
class Worker : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -142,16 +158,18 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void handleViewLogCommand(const QString& command, QTcpSocket* clientSocket);
|
void handleViewLogCommand(const QString& command, QTcpSocket* clientSocket);
|
||||||
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
void startServer() {
|
void startServer() {
|
||||||
if (server) {
|
if (server) {
|
||||||
qDebug() << "Server is already running!";
|
qDebug() << "Server is already running!";
|
||||||
return; // <20><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
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>
|
// <20><><EFBFBD><EFBFBD> QTcpServer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
|
||||||
server = new QTcpServer(this);
|
server = new QTcpServer(this);
|
||||||
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
|
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
|
||||||
@@ -172,15 +190,19 @@ public slots:
|
|||||||
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>
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><E6BBBB><EFBFBD>̵߳ļ<CCB5><C4BC><EFBFBD>
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><EFBFBD><EFBFBD>̵߳ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||||
QTimer *monitorTimer = new QTimer(this);
|
QTimer *monitorTimer = new QTimer(this);
|
||||||
connect(monitorTimer, SIGNAL(timeout()), this, SLOT(doMonitorTask()));
|
connect(monitorTimer, SIGNAL(timeout()), this, SLOT(doMonitorTask()));
|
||||||
monitorTimer->start(1000); // ÿ1<C3BF>봥<EFBFBD><EBB4A5>һ<EFBFBD><D2BB>
|
monitorTimer->start(1000); // ÿ1<C3BF>봥<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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
void stopServer() {
|
void stopServer() {
|
||||||
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
||||||
if (server) {
|
if (server) {
|
||||||
@@ -199,12 +221,18 @@ public slots:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD>TEST_NUM
|
||||||
|
*/
|
||||||
void setTestNum(int num) {
|
void setTestNum(int num) {
|
||||||
QMutexLocker locker(&mutex);
|
QMutexLocker locker(&mutex);
|
||||||
TEST_NUM = num;
|
TEST_NUM = num;
|
||||||
}
|
}
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
/**
|
||||||
|
* @brief <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
void doPeriodicTask() {
|
void doPeriodicTask() {
|
||||||
QMutexLocker locker(&mutex);
|
QMutexLocker locker(&mutex);
|
||||||
std::cout << "Executing TEST_NUM is " << TEST_NUM << std::endl;
|
std::cout << "Executing TEST_NUM is " << TEST_NUM << std::endl;
|
||||||
@@ -217,10 +245,16 @@ private slots:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
void doMonitorTask() {
|
void doMonitorTask() {
|
||||||
doMonitorTaskmain();
|
doMonitorTaskmain();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>¿ͻ<C2BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
void onNewConnection() {
|
void onNewConnection() {
|
||||||
if (!server) return;
|
if (!server) return;
|
||||||
|
|
||||||
@@ -228,22 +262,24 @@ private slots:
|
|||||||
qDebug() << "New connection established!";
|
qDebug() << "New connection established!";
|
||||||
std::cout << "New connection established!\n";
|
std::cout << "New connection established!\n";
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿɶ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> onReadyRead()
|
// <20><><EFBFBD><EFBFBD> readyRead / disconnected
|
||||||
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
|
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
|
||||||
// <20><><EFBFBD>ͻ<EFBFBD><CDBB>˶Ͽ<CBB6>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> socket
|
|
||||||
connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater()));
|
connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater()));
|
||||||
|
|
||||||
// <20><><EFBFBD>ͻ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD> Telnet Э<EFBFBD><EFBFBD>
|
||||||
|
sendTelnetNegotiation(clientSocket);
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ͻ<EFBFBD>ӭ<EFBFBD><D3AD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
|
||||||
if (clientSocket) {
|
if (clientSocket) {
|
||||||
std::cout << "clientSocket OK\n";
|
std::cout << "clientSocket OK\n";
|
||||||
clientSocket->write("Welcome to the test shell. Type 'help' for available commands.\n> ");
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->flush(); // ȷ<><C8B7><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
clientSocket->write("Welcome to the test shell. Type 'help' for available commands.\r\n");
|
||||||
|
printPrompt(clientSocket); // ͳһ<CDB3><D2BB>ӡ<EFBFBD><D3A1>ʾ<EFBFBD><CABE>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief <20><><EFBFBD>ֽڴ<EFBFBD><EFBFBD><EFBFBD>Telnet<EFBFBD><EFBFBD><EFBFBD>룬ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD>˸س<F1A1A2BB><D8B3><EFBFBD>
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>͵<EFBFBD>Telnet<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
* <20><><EFBFBD><EFBFBD><EFBFBD>»س<C2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBDBB> processCommand <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
*/
|
*/
|
||||||
void onReadyRead() {
|
void onReadyRead() {
|
||||||
QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
|
QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
|
||||||
@@ -253,72 +289,87 @@ private slots:
|
|||||||
}
|
}
|
||||||
|
|
||||||
QByteArray data = clientSocket->readAll();
|
QByteArray data = clientSocket->readAll();
|
||||||
|
|
||||||
// <20><><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
for (int i = 0; i < data.size(); ++i) {
|
for (int i = 0; i < data.size(); ++i) {
|
||||||
char c = data[i];
|
unsigned char c = static_cast<unsigned char>(data[i]);
|
||||||
|
|
||||||
if (c == 'q') { // ? <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> `q` <20>˳<EFBFBD> `viewlog`
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IAC(255)<29><>˵<EFBFBD><CBB5><EFBFBD><EFBFBD> Telnet Э<><D0AD>ָ<EFBFBD><D6B8>
|
||||||
|
if (c == IAC) {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TELDO/DONT/WILL/WONT + option
|
||||||
|
if (i + 1 < data.size()) {
|
||||||
|
unsigned char cmd = static_cast<unsigned char>(data[i+1]);
|
||||||
|
if (cmd == TELDO || cmd == DONT || cmd == WILL || cmd == WONT) {
|
||||||
|
i += 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ֽ<EFBFBD>
|
||||||
|
} else {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>IAC SB)<29><><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1) <20><><EFBFBD><EFBFBD> 'q' <20>˳<EFBFBD> viewlog
|
||||||
|
if (c == 'q') {
|
||||||
std::cout << "Received 'q' from shell socket! Exiting viewlog...\n";
|
std::cout << "Received 'q' from shell socket! Exiting viewlog...\n";
|
||||||
if (activeClient == clientSocket) {
|
if (activeClient == clientSocket) {
|
||||||
stopViewLog = true; // ? <20><> `viewlog` <20>˳<EFBFBD>
|
stopViewLog = true;
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
clientSocket->write("\nLog view stopped. Returning to shell.\n> ");
|
clientSocket->write("\r\nLog view stopped. Returning to shell.\r\n");
|
||||||
|
printPrompt(clientSocket);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD>У<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (c == '\r' || c == '\n') {
|
||||||
|
if (!currentCommand.isEmpty()) {
|
||||||
|
// <20>ӵ<EFBFBD><D3B5><EFBFBD>ʷ
|
||||||
|
if (commandHistory.isEmpty() || commandHistory.last() != currentCommand) {
|
||||||
|
commandHistory.append(currentCommand);
|
||||||
|
}
|
||||||
|
historyIndex = commandHistory.size();
|
||||||
|
|
||||||
|
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>հ<EFBFBD>
|
||||||
|
//QString trimmedCmd = currentCommand.trimmed();
|
||||||
|
currentCommand.remove(0, 1);
|
||||||
|
processCommand(currentCommand, clientSocket);
|
||||||
|
|
||||||
|
currentCommand.clear();
|
||||||
|
} else {
|
||||||
|
// <20><><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD>ӡ<EFBFBD>µ<EFBFBD><C2B5><EFBFBD>ʾ<EFBFBD><CABE>
|
||||||
|
printPrompt(clientSocket);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (c == '\x1b') {
|
||||||
|
if (i + 2 < data.size() && data[i+1] == '[') {
|
||||||
|
char arrow = data[i+2];
|
||||||
|
if (arrow == 'A') {
|
||||||
|
handleUpArrow(clientSocket);
|
||||||
|
} else if (arrow == 'B') {
|
||||||
|
handleDownArrow(clientSocket);
|
||||||
|
}
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4) <20>˸<EFBFBD><CBB8><EFBFBD>
|
||||||
|
if (c == '\x7f' || c == '\b') {
|
||||||
|
if (!currentCommand.isEmpty()) {
|
||||||
|
currentCommand.chop(1);
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
||||||
|
clientSocket->write("\b \b");
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
return; // ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
switch (c) {
|
|
||||||
case '\r':
|
|
||||||
case '\n':
|
|
||||||
// ? <20><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
if (!currentCommand.isEmpty()) {
|
|
||||||
if (commandHistory.isEmpty() || commandHistory.last() != currentCommand) {
|
|
||||||
commandHistory.append(currentCommand);
|
|
||||||
}
|
|
||||||
historyIndex = commandHistory.size(); // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>֮<EFBFBD><D6AE>
|
|
||||||
|
|
||||||
processCommand(currentCommand, clientSocket);
|
|
||||||
currentCommand.clear();
|
|
||||||
} else {
|
|
||||||
clientSocket->write("\n> ");
|
|
||||||
clientSocket->flush();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '\x1b':
|
|
||||||
// ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ϼ<EFBFBD>ͷ `\x1b[A`<60><><EFBFBD>¼<EFBFBD>ͷ `\x1b[B`)
|
|
||||||
if (i + 2 < data.size() && data[i+1] == '[') {
|
|
||||||
char arrow = data[i+2];
|
|
||||||
if (arrow == 'A') {
|
|
||||||
handleUpArrow(clientSocket); // **<2A><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>**
|
|
||||||
} else if (arrow == 'B') {
|
|
||||||
handleDownArrow(clientSocket); // **<2A><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>**
|
|
||||||
}
|
|
||||||
i += 2; // ? **<2A><><EFBFBD><EFBFBD> ESC <20><><EFBFBD><EFBFBD> `\x1b[A` <20><> `\x1b[B`**
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '\x7f':
|
|
||||||
case '\x08':
|
|
||||||
// ? <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>
|
|
||||||
if (!currentCommand.isEmpty()) {
|
|
||||||
currentCommand.chop(1);
|
|
||||||
clientSocket->write("\b \b");
|
|
||||||
clientSocket->flush();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// ? <20><>ͨ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ӵ<EFBFBD> `currentCommand`
|
|
||||||
currentCommand.append(c);
|
|
||||||
clientSocket->write(&c, 1);
|
|
||||||
clientSocket->flush();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 5) <20><>ͨ<EFBFBD>ַ<EFBFBD>
|
||||||
|
currentCommand.append(static_cast<char>(c));
|
||||||
|
clientSocket->write((const char*)&c, 1);
|
||||||
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,195 +377,176 @@ signals:
|
|||||||
void serverError();
|
void serverError();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// ====================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD> =========================
|
// ========== Telnet Э<>̺<EFBFBD><CCBA><EFBFBD> ==========
|
||||||
bool stopViewLog; // ? <20><><EFBFBD>ﲻ<EFBFBD><EFB2BB>Ҫ static<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF> client
|
void sendTelnetNegotiation(QTcpSocket *socket)
|
||||||
QTcpSocket* activeClient; // <20><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> `viewlog` <20>Ŀͻ<C4BF><CDBB><EFBFBD>
|
{
|
||||||
|
// <20><><EFBFBD><EFBFBD> WILL ECHO / WILL SUPPRESS-GO-AHEAD / DONT LINEMODE
|
||||||
|
static const unsigned char will_echo[3] = { IAC, WILL, TELOPT_ECHO };
|
||||||
|
static const unsigned char will_sga[3] = { IAC, WILL, TELOPT_SUPPRESS_GO_AHEAD };
|
||||||
|
static const unsigned char dont_linemode[3] = { IAC, DONT, TELOPT_LINEMODE };
|
||||||
|
|
||||||
// --------------------
|
socket->write(reinterpret_cast<const char*>(will_echo), 3);
|
||||||
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
socket->write(reinterpret_cast<const char*>(will_sga), 3);
|
||||||
// --------------------
|
socket->write(reinterpret_cast<const char*>(dont_linemode), 3);
|
||||||
|
socket->flush();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> onReadyRead() <20><><EFBFBD><EFBFBD> if-else <20><><EFBFBD><EFBFBD>
|
* @brief <20><>ӡ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһʹ<EFBFBD><EFBFBD>\r\n<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>ӡ"> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
*/
|
*/
|
||||||
void processCommand(const QString &command, QTcpSocket *clientSocket) {
|
void printPrompt(QTcpSocket *clientSocket)
|
||||||
// <20><>ӡ<EFBFBD><D3A1>־
|
{
|
||||||
qDebug() << "Received command:" << command;
|
//clientSocket->write("\r\n> ");
|
||||||
std::cout << "Received command: " << command.toStdString() << "\n";
|
clientSocket->write("\r\x1B[K> ");
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD> onReadyRead() <20>е<EFBFBD> if / else if <20><><EFBFBD><EFBFBD><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 += "only - Execute rocketmq_test_only\n";
|
|
||||||
helpText += "log - Execute rocketmq_test_log\n";
|
|
||||||
helpText += "ledger <id> - Execute ledger with optional terminal_id\n";
|
|
||||||
helpText += "viewlog <level> - View logs (ERROR, WARN, NORMAL, DEBUG)\n";
|
|
||||||
helpText += "value <valuename> - Execute value print with valuename : iedcount frontfun frontindex remtable log init\n";
|
|
||||||
helpText += "exit - Exit the shell\n";
|
|
||||||
helpText += "help - Show this help message\n";
|
|
||||||
clientSocket->write(helpText.toUtf8());
|
|
||||||
}
|
|
||||||
else if (command.startsWith("viewlog")) {
|
|
||||||
showinshellflag = true;
|
|
||||||
handleViewLogCommand(command, clientSocket);
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
|
||||||
else if (command.startsWith("TEST_NUM=")) {
|
|
||||||
bool ok;
|
|
||||||
int num = command.mid(9).toInt(&ok); // <20><>ȡ<EFBFBD>Ⱥź<C8BA><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
|
|
||||||
if (ok) {
|
|
||||||
setTestNum(num); // <20><><EFBFBD><EFBFBD> TEST_NUM
|
|
||||||
clientSocket->write("TEST_NUM updated\n");
|
|
||||||
std::cout << "TEST_NUM updated\n";
|
|
||||||
} else {
|
|
||||||
clientSocket->write("Invalid number\n");
|
|
||||||
std::cout << "Invalid number\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
||||||
else if (command.startsWith("rc")) {
|
|
||||||
qDebug() << "Executing rocketmq_test_rc()";
|
|
||||||
std::cout << "Executing rocketmq_test_rc()\n";
|
|
||||||
rocketmq_test_rc(); // <20><><EFBFBD><EFBFBD> rc <20><><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->write("Executed rocketmq_test_rc\n");
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
||||||
else if (command.startsWith("rt")) {
|
|
||||||
qDebug() << "Executing rocketmq_test_rt()";
|
|
||||||
std::cout << "Executing rocketmq_test_rt()\n";
|
|
||||||
rocketmq_test_rt(); // <20><><EFBFBD><EFBFBD> rt <20><><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->write("Executed rocketmq_test_rt\n");
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>²<EFBFBD><C2B2><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
||||||
else if (command.startsWith("ud")) {
|
|
||||||
qDebug() << "Executing rocketmq_test_ud()";
|
|
||||||
std::cout << "Executing rocketmq_test_ud()\n";
|
|
||||||
rocketmq_test_ud(); // <20><><EFBFBD><EFBFBD> ud <20><><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->write("Executed rocketmq_test_ud\n");
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD>ͽ<EFBFBD><CDBD>̿<EFBFBD><CCBF>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
||||||
else if (command.startsWith("set")) {
|
|
||||||
qDebug() << "Executing rocketmq_test_set()";
|
|
||||||
std::cout << "Executing rocketmq_test_set()\n";
|
|
||||||
rocketmq_test_set(); // <20><><EFBFBD><EFBFBD> set <20><><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->write("Executed rocketmq_test_set\n");
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
||||||
else if (command.startsWith("only")) {
|
|
||||||
qDebug() << "Executing rocketmq_test_only()";
|
|
||||||
std::cout << "Executing rocketmq_test_only()\n";
|
|
||||||
rocketmq_test_only(); // <20><><EFBFBD><EFBFBD> rocketmq_test_only <20><><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->write("Executed rocketmq_test_only\n");
|
|
||||||
}
|
|
||||||
// <20><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
||||||
else if (command.startsWith("log")) {
|
|
||||||
qDebug() << "Executing rocketmq_test_log()";
|
|
||||||
std::cout << "Executing rocketmq_test_log()\n";
|
|
||||||
rocketmq_test_log(); // <20><><EFBFBD><EFBFBD> log <20><><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->write("Executed rocketmq_test_log\n");
|
|
||||||
}
|
|
||||||
// <20>鿴<EFBFBD><E9BFB4>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>̨<EFBFBD><CCA8>
|
|
||||||
else if (command.startsWith("ledger")) {
|
|
||||||
qDebug() << "Executing ledger()";
|
|
||||||
std::cout << "Executing ledger()\n";
|
|
||||||
|
|
||||||
// <20><>ȡ<EFBFBD><C8A1><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id<69>ţ<EFBFBD>
|
|
||||||
QString terminalId = parts[1];
|
|
||||||
std::cout << "Calling ledger with terminal_id: " << terminalId.toStdString() << std::endl;
|
|
||||||
|
|
||||||
ledger(terminalId.toStdString().c_str(), clientSocket); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ledger
|
|
||||||
clientSocket->write("Executed ledger with terminal_id\n");
|
|
||||||
} else {
|
|
||||||
std::cout << "Calling ledger without parameters\n";
|
|
||||||
ledger(NULL, clientSocket); // <20><EFBFBD><DEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ledger
|
|
||||||
clientSocket->write("Executed ledger without parameters\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// <20>鿴<EFBFBD><E9BFB4>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>ָ<EFBFBD><D6B8>ֵ
|
|
||||||
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(" ");
|
|
||||||
if (parts.size() > 1) {
|
|
||||||
QString variableName = parts[1];
|
|
||||||
std::cout << "Calling value() with variable name: " << variableName.toStdString() << std::endl;
|
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD> value_print() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
||||||
value_print(variableName.toStdString().c_str(), clientSocket);
|
|
||||||
clientSocket->write("Executed value with variable name: " + variableName.toUtf8() + "\n");
|
|
||||||
} else {
|
|
||||||
std::cout << "Calling value without parameters" << std::endl;
|
|
||||||
clientSocket->write("Please provide a variable name\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// <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>
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// δ֪<CEB4><D6AA><EFBFBD><EFBFBD>
|
|
||||||
else {
|
|
||||||
clientSocket->write("Unknown command\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3ACBB><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>ʾ<EFBFBD><CABE>
|
|
||||||
clientSocket->write("> ");
|
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD>¼<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
* @brief ִ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>trimmed<EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
void processCommand(const QString &cmd, QTcpSocket *clientSocket) {
|
||||||
|
qDebug() << "Received command:" << cmd;
|
||||||
|
std::cout << "Received command: " << cmd.toStdString() << "\n";
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (cmd == "help") {
|
||||||
|
QString helpText = "Available commands:\r\n";
|
||||||
|
helpText += "TEST_NUM=<num> - Set the TEST_NUM\r\n";
|
||||||
|
helpText += "rc - Execute rocketmq_test_rc\r\n";
|
||||||
|
helpText += "rt - Execute rocketmq_test_rt\r\n";
|
||||||
|
helpText += "ud - Execute rocketmq_test_ud\r\n";
|
||||||
|
helpText += "set - Execute rocketmq_test_set\r\n";
|
||||||
|
helpText += "only - Execute rocketmq_test_only\r\n";
|
||||||
|
helpText += "log - Execute rocketmq_test_log\r\n";
|
||||||
|
helpText += "ledger <id> - Execute ledger with optional terminal_id\r\n";
|
||||||
|
helpText += "viewlog <level> - View logs (ERROR, WARN, NORMAL, DEBUG)\r\n";
|
||||||
|
helpText += "value <valuename> - Execute value print with valuename\r\n";
|
||||||
|
helpText += "exit - Exit the shell\r\n";
|
||||||
|
helpText += "help - Show this help message\r\n";
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write(helpText.toUtf8());
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("viewlog")) {
|
||||||
|
showinshellflag = true;
|
||||||
|
handleViewLogCommand(cmd, clientSocket);
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("TEST_NUM=")) {
|
||||||
|
bool ok;
|
||||||
|
int num = cmd.mid(9).toInt(&ok);
|
||||||
|
if (ok) {
|
||||||
|
setTestNum(num);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("TEST_NUM updated\r\n");
|
||||||
|
} else {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Invalid number\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("rc")) {
|
||||||
|
rocketmq_test_rc();
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed rocketmq_test_rc\r\n");
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("rt")) {
|
||||||
|
rocketmq_test_rt();
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed rocketmq_test_rt\r\n");
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("ud")) {
|
||||||
|
rocketmq_test_ud();
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed rocketmq_test_ud\r\n");
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("set")) {
|
||||||
|
rocketmq_test_set();
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed rocketmq_test_set\r\n");
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("only")) {
|
||||||
|
rocketmq_test_only();
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed rocketmq_test_only\r\n");
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("log")) {
|
||||||
|
rocketmq_test_log();
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed rocketmq_test_log\r\n");
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("ledger")) {
|
||||||
|
QStringList parts = cmd.split(" ");
|
||||||
|
if (parts.size() > 1) {
|
||||||
|
QString terminalId = parts[1];
|
||||||
|
ledger(terminalId.toStdString().c_str(), clientSocket);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed ledger with terminal_id\r\n");
|
||||||
|
} else {
|
||||||
|
ledger(NULL, clientSocket);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed ledger without parameters\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cmd.startsWith("value")) {
|
||||||
|
QStringList parts = cmd.split(" ");
|
||||||
|
if (parts.size() > 1) {
|
||||||
|
QString variableName = parts[1];
|
||||||
|
value_print(variableName.toStdString().c_str(), clientSocket);
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Executed value with variable name: " + variableName.toUtf8() + "\r\n");
|
||||||
|
} else {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Please provide a variable name\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cmd == "exit") {
|
||||||
|
clientSocket->write("\r\x1B[K");
|
||||||
|
clientSocket->write("Goodbye! Exiting shell...\r\n");
|
||||||
|
clientSocket->flush();
|
||||||
|
clientSocket->disconnectFromHost();
|
||||||
|
clientSocket->waitForDisconnected();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clientSocket->write("\r\x1B[K> ");
|
||||||
|
clientSocket->write("Unknown command\r\n");
|
||||||
|
clientSocket->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>ʾ<EFBFBD><CABE>
|
||||||
|
printPrompt(clientSocket);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20>ϼ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
*/
|
*/
|
||||||
void handleUpArrow(QTcpSocket *clientSocket) {
|
void handleUpArrow(QTcpSocket *clientSocket) {
|
||||||
if (!commandHistory.isEmpty() && historyIndex > 0) {
|
if (!commandHistory.isEmpty() && historyIndex > 0) {
|
||||||
historyIndex--;
|
historyIndex--;
|
||||||
currentCommand = commandHistory[historyIndex];
|
currentCommand = commandHistory[historyIndex];
|
||||||
|
|
||||||
// **<2A><><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0>**
|
// <EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>\r<>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD> + \x1B[K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
clientSocket->write("\r"); // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>굽<EFBFBD><EAB5BD><EFBFBD><EFBFBD>
|
clientSocket->write("\r\x1B[K> ");
|
||||||
clientSocket->write(" "); // <20>ÿո<D5B8>
|
clientSocket->write(currentCommand.toUtf8());
|
||||||
clientSocket->write("\r> "); // <20><><EFBFBD>´<EFBFBD>ӡ<EFBFBD><D3A1>ʾ<EFBFBD><CABE>
|
|
||||||
clientSocket->write(currentCommand.toUtf8()); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD>¼<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
* @brief <20>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
|
||||||
*/
|
*/
|
||||||
void handleDownArrow(QTcpSocket *clientSocket) {
|
void handleDownArrow(QTcpSocket *clientSocket) {
|
||||||
if (!commandHistory.isEmpty() && historyIndex < commandHistory.size() - 1) {
|
if (!commandHistory.isEmpty() && historyIndex < commandHistory.size() - 1) {
|
||||||
historyIndex++;
|
historyIndex++;
|
||||||
currentCommand = commandHistory[historyIndex];
|
currentCommand = commandHistory[historyIndex];
|
||||||
|
|
||||||
// **<2A><><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0>**
|
clientSocket->write("\r\x1B[K> ");
|
||||||
clientSocket->write("\r");
|
clientSocket->write(currentCommand.toUtf8());
|
||||||
clientSocket->write(" ");
|
|
||||||
clientSocket->write("\r> ");
|
|
||||||
clientSocket->write(currentCommand.toUtf8()); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
else if (historyIndex == commandHistory.size() - 1) {
|
else if (historyIndex == commandHistory.size() - 1) {
|
||||||
// **<2A><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD><D9B0>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>**
|
|
||||||
historyIndex = commandHistory.size();
|
historyIndex = commandHistory.size();
|
||||||
currentCommand.clear();
|
currentCommand.clear();
|
||||||
|
|
||||||
clientSocket->write("\r");
|
clientSocket->write("\r\x1B[K> ");
|
||||||
clientSocket->write(" ");
|
|
||||||
clientSocket->write("\r> ");
|
|
||||||
clientSocket->flush();
|
clientSocket->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -529,6 +561,10 @@ private:
|
|||||||
QList<QString> commandHistory; // <20>洢<EFBFBD><E6B4A2>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
QList<QString> commandHistory; // <20>洢<EFBFBD><E6B4A2>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
||||||
int historyIndex; // <20><>ǰ<EFBFBD><C7B0>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
int historyIndex; // <20><>ǰ<EFBFBD><C7B0>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
QString currentCommand; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
QString currentCommand; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// viewlog <20><><EFBFBD><EFBFBD>
|
||||||
|
bool stopViewLog;
|
||||||
|
QTcpSocket* activeClient;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1633,7 +1633,7 @@ void CheckNextNotConnectedChannel()
|
|||||||
connectlog_pgsql(ied_usr->terminal_code,convertMsToDateTimeString((int)sGetMsTime()),0);//0ʧ<30><CAA7>
|
connectlog_pgsql(ied_usr->terminal_code,convertMsToDateTimeString((int)sGetMsTime()),0);//0ʧ<30><CAA7>
|
||||||
//printf("check error88 !!!!!!!!!!!!!!\n");
|
//printf("check error88 !!!!!!!!!!!!!!\n");
|
||||||
}
|
}
|
||||||
printf( "reqCtrl->result == FAIL, Since StartConnecting %i <EFBFBD><EFBFBD> ,channel IP %s:%d \n",secsSince,chnl_usr->ip_str,chnl_usr->chnl->port);
|
printf( "reqCtrl->result == FAIL, Since StartConnecting %i sec ,channel IP %s:%d \n",secsSince,chnl_usr->ip_str,chnl_usr->chnl->port);
|
||||||
mvl_free_req_ctrl(chnl_usr->m_reqCtrl);
|
mvl_free_req_ctrl(chnl_usr->m_reqCtrl);
|
||||||
chnl_usr->m_reqCtrl = NULL;
|
chnl_usr->m_reqCtrl = NULL;
|
||||||
chnl_usr->net_info->rem_vmd = NULL;
|
chnl_usr->net_info->rem_vmd = NULL;
|
||||||
|
|||||||
@@ -14,6 +14,20 @@ DEFINES += _CRT_SECURE_NO_WARNINGS
|
|||||||
DEFINES += MMS_LITE LINUX=2 MOSI LEAN_T TP0_ENABLED
|
DEFINES += MMS_LITE LINUX=2 MOSI LEAN_T TP0_ENABLED
|
||||||
DEFINES += CLIENT _DEBUG _REENTRANT _GNU_SOURCE _LARGEFILE64_SOURCE
|
DEFINES += CLIENT _DEBUG _REENTRANT _GNU_SOURCE _LARGEFILE64_SOURCE
|
||||||
|
|
||||||
|
# 添加 debug/release 编译选项配置
|
||||||
|
CONFIG(debug, debug|release) {
|
||||||
|
message("Building debug version with debug symbols")
|
||||||
|
# 强制生成调试信息并禁用优化
|
||||||
|
QMAKE_CFLAGS_DEBUG += -g -O0
|
||||||
|
QMAKE_CXXFLAGS_DEBUG += -g -O0
|
||||||
|
CONFIG += force_debug_info
|
||||||
|
} else {
|
||||||
|
message("Building release version")
|
||||||
|
# release 通常开启优化
|
||||||
|
QMAKE_CFLAGS_RELEASE += -O2
|
||||||
|
QMAKE_CXXFLAGS_RELEASE += -O2
|
||||||
|
}
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
DEFINES -= UNICODE
|
DEFINES -= UNICODE
|
||||||
DEFINES += _AFXDLL
|
DEFINES += _AFXDLL
|
||||||
|
|||||||
Reference in New Issue
Block a user