finish develop

This commit is contained in:
lnk
2025-03-05 17:47:47 +08:00
parent 1df5385fc9
commit 28811fbae7
6 changed files with 422 additions and 349 deletions

View File

@@ -1038,11 +1038,11 @@ void init_config() {
//20241212lnk<6E><6B><EFBFBD>Ӷ<EFBFBD>ǰ<EFBFBD><C7B0>
if (g_front_seg_index != 0 && g_front_seg_num != 0) {
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{
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>
@@ -5238,7 +5238,7 @@ int SendMessageToWeb(int socketClient, int iErrorCode) //
sendLength = send(socketClient, strSendJson.c_str(), strSendJson.length() + 1, 0);
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;
}
@@ -11676,110 +11676,106 @@ void printLedgerinshell(const ied_usr_t& ied_usr, QIODevice* outputDevice) {
ied_t* ied;
ied = find_ied_from_dev_idx(ied_usr.dev_idx);
outputDevice->write("------------------------------------\n");
outputDevice->write("|-- terminal_id: " + QByteArray(ied_usr.terminal_id) + "\n");
outputDevice->write("|-- dev_index: " + QByteArray::number(ied_usr.dev_idx) + "\n");
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("------------------------------------\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- terminal_id: " + QByteArray(ied_usr.terminal_id) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_index: " + QByteArray::number(ied_usr.dev_idx) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_cpucount: " + QByteArray::number(ied->cpucount) + "\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>
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>
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("|-- dev_type: " + QByteArray(ied_usr.dev_type) + "\n");
outputDevice->write("|-- dev_key: " + QByteArray(ied_usr.dev_key) + "\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("|-- last_call_wavelist_time: " + QByteArray::number(ied_usr.last_call_wavelist_time) + "\n");
outputDevice->write("|-- org_name: " + QByteArray(ied_usr.org_name) + "\n");
outputDevice->write("|-- maint_name: " + QByteArray(ied_usr.maint_name) + "\n");
outputDevice->write("|-- station_name: " + QByteArray(ied_usr.station_name) + "\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");
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("\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("\r\x1B[K");outputDevice->write("|-- dev_flag: " + QByteArray::number(ied_usr.dev_flag) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- last_call_wavelist_time: " + QByteArray::number(ied_usr.last_call_wavelist_time) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- org_name: " + QByteArray(ied_usr.org_name) + "\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("\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("\r\x1B[K");outputDevice->write("|-- tmnl_status: " + QByteArray(ied_usr.tmnl_status) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- terminal_code: " + QByteArray(ied_usr.terminal_code) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write("|-- update_flag: " + QByteArray::number(ied_usr.update_flag) + "\n");
// <20><>ӡÿ<D3A1><C3BF>LD_info<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < 10; ++i) {
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
outputDevice->write(" |-- name: " + QByteArray(ied_usr.LD_info[i].name) + "\n");
outputDevice->write(" |-- LD_name: "
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- name: " + QByteArray(ied_usr.LD_info[i].name) + "\n");
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))
+ "\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
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
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(" |-- 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(" |-- 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(" |-- monitor_status: " + QByteArray(ied_usr.LD_info[i].monitor_status) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- mp_id: " + QByteArray(ied_usr.LD_info[i].mp_id) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- terminal_code: " + QByteArray(ied_usr.LD_info[i].terminal_code) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- voltage_level: " + QByteArray(ied_usr.LD_info[i].voltage_level) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- v_wiring_type: " + QByteArray(ied_usr.LD_info[i].v_wiring_type) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- time: " + QByteArray::number(ied_usr.LD_info[i].time) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- update_flag: " + QByteArray::number(ied_usr.LD_info[i].update_flag) + "\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>
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(" |-- rptcount: " + QByteArray::number(ied_usr.LD_info[i].rptcount) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- logcount: " + QByteArray::number(ied_usr.LD_info[i].logcount) + "\n");
// rpt
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(" |-- 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(" |-- rptRecvFlag: " + QByteArray::number(ied_usr.LD_info[i].rptRecvFlag) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptRecvCheckFlag: " + QByteArray::number(ied_usr.LD_info[i].rptRecvCheckFlag) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptPstRecvFlag: " + QByteArray::number(ied_usr.LD_info[i].rptPstRecvFlag) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- rptPstRecvCheckFlag: " + QByteArray::number(ied_usr.LD_info[i].rptPstRecvCheckFlag) + "\n");
// rtdata
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(" |-- 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(" |-- real_data: " + QByteArray::number(ied_usr.LD_info[i].real_data) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- soe_data: " + QByteArray::number(ied_usr.LD_info[i].soe_data) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- limit: " + QByteArray::number(ied_usr.LD_info[i].limit) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- count: " + QByteArray::number(ied_usr.LD_info[i].count) + "\n");
// 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) {
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");
}
}
// QVVR
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(" |-- qvvr_idx: " + QByteArray::number(ied_usr.LD_info[i].qvvr_idx) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVRs:\n");
for (int j = 0; j < 256; ++j) {
if (ied_usr.LD_info[i].qvvr[j].used_status != 0) {
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(" |-- 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(" |-- 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(" |-- 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(" |-- timestamp: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].timestamp) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR[" + QByteArray::number(j) + "]:\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- used_status: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].used_status) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_start: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_start) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_type: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_type) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_time: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_time) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_PerTime: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_PerTime) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_Amg: " + QByteArray::number(ied_usr.LD_info[i].qvvr[j].QVVR_Amg) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- QVVR_Rptname: " + QByteArray(ied_usr.LD_info[i].qvvr[j].QVVR_Rptname) + "\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>Ϣ
void ledger(const char* terminal_id, QIODevice* outputDevice) {
outputDevice->write("\r\x1B[K");
outputDevice->write("print ledger in shell");
pthread_mutex_lock(&mtx); std::cout << "ledger()hold lock !!!!!!!!!!!" << std::endl;
bool found = false;
@@ -11790,20 +11786,25 @@ void ledger(const char* terminal_id, QIODevice* outputDevice) {
if(ied != NULL){
ied_usr = (ied_usr_t*)ied->usr_ext;
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;
//printLedger(*ied_usr);
found = true;
if(terminal_id != NULL && strcmp(ied_usr->terminal_id, terminal_id) == 0){
found = true;
}
}
}
}
if (!found || terminal_id == NULL) {
std::cout << "<EFBFBD><EFBFBD><EFBFBD>ն˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: " << terminal_id << std::endl;
QByteArray msg = "<EFBFBD><EFBFBD><EFBFBD>ն˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: " + QByteArray(terminal_id ? terminal_id : "NULL") + "\n";
pthread_mutex_unlock(&mtx); std::cout << "ledger()free lock !!!!!!!!!!!" << std::endl;
if (terminal_id != NULL && !found) {
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
}
pthread_mutex_unlock(&mtx); std::cout << "ledger()free lock !!!!!!!!!!!" << std::endl;
}
//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) {
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>
}
else if (strcmp(variableName, "remtable") == 0) {
sprintf(buffer, "remtable = %d",g_pt61850app->chnl_counts);
clientSocket->write("\r\x1B[K");
clientSocket->write(buffer);
}
else if (strcmp(variableName, "iedcount") == 0) {
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);
} else if (strcmp(variableName, "frontfun") == 0) {
sprintf(buffer, "frontfun = %s", subdir);
clientSocket->write("\r\x1B[K");
clientSocket->write(buffer);
} else if (strcmp(variableName, "log") == 0) {
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);
}else if (strcmp(variableName, "init") == 0) {
sprintf(buffer, "INITFLAG = %d",INITFLAG);
clientSocket->write("\r\x1B[K");
clientSocket->write(buffer);
}else {
clientSocket->write("\r\x1B[K");
clientSocket->write("Unknown variable name\n> ");
}
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) {
QStringList parts = command.split(" ");
if (parts.size() != 2) {
clientSocket->write("\r\x1B[K");
clientSocket->write("Usage: viewlog [ERROR|WARN|NORMAL|DEBUG]\n> ");
clientSocket->flush();
return;
@@ -11869,6 +11878,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
pthread_mutex_t* logMutex = getLogMutex(logLevel);
if (!logList || !logMutex) {
clientSocket->write("\r\x1B[K");
clientSocket->write("Invalid log level! Use ERROR, WARN, NORMAL, or DEBUG.\n> ");
clientSocket->flush();
return;
@@ -11877,6 +11887,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
stopViewLog = false;
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->flush();
@@ -11900,6 +11911,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
pthread_mutex_unlock(logMutex);
if (!logEntry.empty()) {
clientSocket->write("\r\x1B[K");
clientSocket->write((logEntry + "\n").c_str());
clientSocket->flush();
}
@@ -11910,6 +11922,7 @@ void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSock
}
// **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->flush();
}
@@ -15289,12 +15302,20 @@ public:
TeeStreamBuf()
: m_originalBuf(NULL), m_level(LOGNORMAL)
{
pthread_mutex_init(&m_mutex, NULL);
}
// <20><><EFBFBD>ι<EFBFBD><CEB9>죺ֱ<ECA3BA>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
TeeStreamBuf(std::streambuf* originalBuf, LogLevel 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>
@@ -15302,7 +15323,9 @@ public:
{
m_originalBuf = originalBuf;
m_level = level;
pthread_mutex_lock(&m_mutex);
m_buffer.clear();
pthread_mutex_unlock(&m_mutex);
}
protected:
@@ -15330,97 +15353,100 @@ protected:
return traits_type::eof();
}
}
// 2) <20><EFBFBD><E6B5BD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
m_buffer.push_back((char)ch);
// 2) <20><EFBFBD><E6B5BD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>棬ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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()
if (ch == '\n') {
flushBuffer();
flushBuffer_locked();
}
pthread_mutex_unlock(&m_mutex);
return ch;
}
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>
void flushBuffer()
// <20>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void flushBuffer_locked()
{
if (m_buffer.empty()) {
return;
}
// <20><><EFBFBD>ݵȼ<DDB5> + <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> <20><> д<>ļ<EFBFBD><C4BC><EFBFBD>list
// <20><><EFBFBD>ݵȼ<DDB5><C8BC>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>أ<EFBFBD><D8A3><EFBFBD> m_buffer д<><D0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6> list
switch (m_level) {
case LOGERROR:
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
else if (normalOutputEnabled) {
pthread_mutex_lock(&normalListMutex);
normalList.push_back(m_buffer);
pthread_mutex_unlock(&normalListMutex);
}
else if (warnOutputEnabled) {
else if (warnOutputEnabled) {
pthread_mutex_lock(&warnListMutex);
warnList.push_back(m_buffer);
pthread_mutex_unlock(&warnListMutex);
}
else if (errorOutputEnabled) {
else if (errorOutputEnabled) {
pthread_mutex_lock(&errorListMutex);
errorList.push_back(m_buffer);
pthread_mutex_unlock(&errorListMutex);
}
break;
case LOGWARN:
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
else if (normalOutputEnabled) {
pthread_mutex_lock(&normalListMutex);
normalList.push_back(m_buffer);
pthread_mutex_unlock(&normalListMutex);
}
else if (warnOutputEnabled) {
else if (warnOutputEnabled) {
pthread_mutex_lock(&warnListMutex);
warnList.push_back(m_buffer);
pthread_mutex_unlock(&warnListMutex);
}
break;
case LOGNORMAL:
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
else if (normalOutputEnabled) {
pthread_mutex_lock(&normalListMutex);
normalList.push_back(m_buffer);
pthread_mutex_unlock(&normalListMutex);
}
break;
}
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:
// <20><>ֹ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ɵĸ<C9B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
TeeStreamBuf& operator=(const TeeStreamBuf&); // <20><>ʵ<EFBFBD><CAB5>
TeeStreamBuf& operator=(const TeeStreamBuf&);
private:
std::streambuf* m_originalBuf;
LogLevel m_level;
std::string m_buffer;
pthread_mutex_t m_mutex;
};
// ------------------ ȫ<><C8AB>Tee<65><65><EFBFBD>󣨱<EFBFBD><F3A3A8B1><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5> ------------------