Files
microser/cfg_parse/cfg_parser.cpp

6275 lines
228 KiB
C++
Raw Normal View History

2025-01-16 16:17:01 +08:00
using namespace std;
#include <QFile>
#include <QXmlStreamWriter>
#include <QtXml/QDomDocument>
#include <QtXml/QDomElement>
#include <QtXml/QDomNode>
#include <QtXml/QDomNodeList>
#include <QtCore/qglobal.h>
#include <QStringList>
#include <QSettings>
#include <QDateTime>
#include <QDir>
#include <QFileInfo>
#include <QDebug>
#include <QMutex>
#include <QMap>
#include <ctime>
#define OTL_ODBC_ODBC
#define OTL_ODBC_UNIX
#include <unistd.h>
#include "otlv4.h"
#include <stdio.h>
#include <sstream> //lnk 2024-10-16
#include <set> //дȥ<D0B4>ص<EFBFBD><D8B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#include <fstream>//<2F>ϴ<EFBFBD><CFB4>ļ<EFBFBD>
#include "../mms/db_interface.h"
#include "../json/save2json.h"
#include "../json/mms_json_inter.h"
#include "../mms/rdb_client.h"
#include "../mms/interface.h"
#include "../json/cjson.h"//WW 2023-08-27<32><37><EFBFBD><EFBFBD>json<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include "../include/curl/curl.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
2025-04-30 10:22:57 +08:00
extern pt61850app_t* g_pt61850app;
extern node_t* g_node;
extern apr_pool_t* g_cfg_pool;
extern apr_pool_t* g_init_pool;
extern apr_pool_t* g_temp_dev_pool;
extern char subdir[128];
extern int g_front_seg_index;
extern unsigned int g_no_auth;
2025-01-16 16:17:01 +08:00
extern char g_onlyIP[255]; //ֱ<><D6B1>ij<EFBFBD><C4B3>IP<49><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-04-30 10:22:57 +08:00
int g_DevFlag = 0;
2025-01-16 16:17:01 +08:00
#ifdef __cplusplus
}
#endif
2025-01-21 17:48:37 +08:00
///////////////////////////////lnk20250118̨<38>˱<EFBFBD><CBB1><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4>أ<EFBFBD><D8A3><EFBFBD>̬<EFBFBD>ڴ<EFBFBD><DAB4>صķ<D8B5>ʽ<EFBFBD><CABD>ÿ<EFBFBD><C3BF><EFBFBD>ڴ<EFBFBD><DAB4>ط<EFBFBD>һ<EFBFBD><D2BB>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD>
// <20><><EFBFBD>ڴ洢<DAB4>ն<EFBFBD> ID <20>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
std::list<std::pair<std::string, apr_pool_t*> > pool_list;
///////////////////////////////////////////////////
2025-01-16 16:17:01 +08:00
//ZW 2023-10-10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нṹ
class RecallInfo
{
public:
long long starttime;
long long endtime;
};
//CZY 2023-09-17 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-04-30 10:22:57 +08:00
class ProgramParam
2025-01-16 16:17:01 +08:00
{
public:
QList<QString> terminal_list;//<2F>ն<EFBFBD>id<69>б<EFBFBD>
QString file_name;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>oss<73>е<EFBFBD>λ<EFBFBD><CEBB>
};
//CZY 2023-09-17 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-04-30 10:22:57 +08:00
class RecallParam
2025-01-16 16:17:01 +08:00
{
public:
QString mp_id;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
QString start;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1>
QString end;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>ʱ<EFBFBD><CAB1>
int voltage;//<2F><>̬<EFBFBD><CCAC><EFBFBD>ݱ<EFBFBD>־
int stat;//<2F><>̬<EFBFBD><CCAC><EFBFBD>ݱ<EFBFBD>־
};
//CZY 2023-10-12 װ<><D7B0>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ
class terminal_ext //
{
public:
char terminal_identify_code[100];//<2F>ն<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
char terminal_key[100];//<2F>ն<EFBFBD><D5B6><EFBFBD>Կ
};
class CJournalRecall //<2F><>־<EFBFBD><D6BE><EFBFBD>нṹ<D0BD><E1B9B9>
{
public:
QString MonitorID; //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QString StartTime; //<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1>
QString EndTime; //<2F><><EFBFBD>ݲ<EFBFBD><DDB2>н<EFBFBD><D0BD><EFBFBD>ʱ<EFBFBD><CAB1>
QString STEADY; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷͳ<CAB7><CDB3><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>ʶ 0-<2D><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>1-<2D><><EFBFBD><EFBFBD>
QString VOLTAGE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʶ 0-<2D><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>1-<2D><><EFBFBD><EFBFBD>
};
/*lnk 2024-10-15 */
class ledger_monitor //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
{
public:
char monitor_id[64];
char terminal_code[64];
char monitor_name[64];
char logical_device_seq[64];
char voltage_level[64];
char terminal_connect[64];
char timestamp[64];
char status[255];
char count_cfg[64]; //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
class terminal_dev //<2F>ն<EFBFBD>̨<EFBFBD><CCA8>
{
public:
char terminal_id[64];
char terminal_code[64];
char org_name[64];
char maint_name[64];
char station_name[64];
char tmnl_factory[64];
char tmnl_status[64];
char dev_type[64];
char dev_key[255];
char dev_series[255];
char addr_str[64];
char port[64];
char timestamp[64];
2025-02-10 17:03:15 +08:00
//lnk20250210<31><30><EFBFBD>ӽ<EFBFBD><D3BD>̺<EFBFBD>
char processNo[64];
2025-01-16 16:17:01 +08:00
ledger_monitor line[10];
char count_cfg[64]; //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
class icd_model //icdģ<64><C4A3>
{
public:
char model_id[64];
char tmnl_type[64];
char tmnl_type_id[64]; //<2F><>ʹ<EFBFBD><CAB9>
char tmnl_factory[64]; //<2F><>ʹ<EFBFBD><CAB9>
char file_name[128];
char file_path[128];
char timestamp[64];
};
/*lnk 2024-10-15 */
list<CJournalRecall> g_StatisticLackList; //<2F><>־<EFBFBD><D6BE><EFBFBD>нṹ<D0BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QMutex g_StatisticLackList_list_mutex; //recall<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QString DEVIE_CONFIG_FN = QString("Device_Config.xml");//<2F><><EFBFBD><EFBFBD>
QString LINE_CONFIG_FN = QString("Line_Config.xml");//<2F><><EFBFBD><EFBFBD>
QString JSON_CONFIG_FN_old = QString("JiangSu_Config.xml");//Ĭ<><C4AC>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>
QString THREE_SECS_CONFIG_FN = QString("Trigger3S.xml");//ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QString RECALL_CONFIG_FN = QString("Recall.xml");//<2F><><EFBFBD><EFBFBD>
//lnk20241220<32><30><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD>̨<EFBFBD><CCA8>
2025-01-17 17:10:18 +08:00
std::string LEDGER_UPDATE_FN = "LedgerUpdate.log";
2025-01-16 16:17:01 +08:00
const int MAX_CPUNO = 10;
2025-01-21 17:48:37 +08:00
//lnk20250121<32>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-17 16:58:14 +08:00
int IED_COUNT = 300; //Ĭ<><C4AC>300
2025-03-07 18:27:03 +08:00
2025-03-04 17:29:04 +08:00
extern int INITFLAG;
2025-01-21 17:48:37 +08:00
2025-02-14 16:44:38 +08:00
//lnk2024-8-14<31><34><EFBFBD>ӽ<EFBFBD><D3BD>ͽ<EFBFBD><CDBD>߱<EFBFBD>־,0<><30><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>ν<EFBFBD><CEBD>ߣ<EFBFBD>1<EFBFBD><31><EFBFBD>ڽ<EFBFBD><DABD>ν<EFBFBD><CEBD><EFBFBD>
int isdelta_flag = 0;
2025-01-16 16:17:01 +08:00
//////CZY 2023-09-06 config
//<2F><>ǰ<EFBFBD><C7B0>flag:1Ϊ<31><CEAA><EFBFBD><EFBFBD>,0Ϊ<30>ر<EFBFBD>
int MULTIPLE_NODE_FLAG = 1;
extern const char* PROGRAM_VERSION;
extern int FRONT_MP_NUM;
int ACCOUNT_UPDATE_INTERVAL;
char* ACCOUNT_UPDATE_LAST_TIME;
int MULIT_NODE_INTERVAL;
int COMMUNICATION_LOG_STATUS_TIME;
int COMMUNICATION_LOG_ABNORMAL_TIME;
char* POSTGRES_DATABASE;//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
char* POSTGRES_USERNAME;//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>û<EFBFBD><C3BB><EFBFBD>
char* POSTGRES_PASSWORD;//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
char* POSTGRES_SCHEMA;//<2F><><EFBFBD>ݿ<EFBFBD>ģʽ<C4A3><CABD>
char* POSTGRES_DNSNAME;//ȡpostgres/guass<73><73>
char* POSTGRES_TABLEPREFIX;//<2F><><EFBFBD><EFBFBD>ǰ׺
char* CLIENT_ID;//<2F><>̨CLIENT_ID
char* CLIENT_SECRET;//<2F><>̨CLIENT_SECRET
char* TOKEN_URL;//<2F><>̨ȡtoken<65>ӿ<EFBFBD>
char* DEVICE_URL;//<2F><>̨ȡ<CCA8>ն˽ӿ<CBBD>
char* GRANT_TYPE;//<2F><>̨GRANT_TYPE
char* UDS_UPLOAD_URL;
char* UDS_DOWNLOAD_URL;
char* UDS_DELETE_URL;
int FILE_FLAG;
int SEND_FLAG;
int FRONT_INST;
char* FRONT_IP;
int CITY_FLAG;
int recall_len;
int recall_sta;
int recall_daily;
char* BROKER_LIST;
char* TOPIC_STAT;
char* TOPIC_PST;
char* TOPIC_PLT;
char* TOPIC_EVENT;
char* TOPIC_ALARM;
char* TOPIC_SNG;
//lnk20241220
char* TOPIC_RTDATA;
char* PROTOCOL;
char* MECHANISMS;
char* KEYTAB_FILE;
char* SERVICE_NAME;
char* PRINCIPAL;
char* DOMAIN_NAME;
extern int g_front_seg_index;
extern int g_front_seg_num;
/*<2A><>ֲ<EFBFBD><D6B2><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>lnk10-9*/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string G_ROCKETMQ_PRODUCER = "";//rocketmq producer
std::string G_ROCKETMQ_IPPORT = "";//rocketmq ip+port
std::string G_ROCKETMQ_TOPIC = "";//topie
std::string G_ROCKETMQ_TAG = "";//tag
std::string G_ROCKETMQ_KEY = "";//key
int QUEUENUM = 0;
std::string BROKERNAME = "";
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string G_ROCKETMQ_CONSUMER = "";//rocketmq consumer
std::string G_MQCONSUMER_IPPORT = "";//consumer ip+port
std::string G_MQCONSUMER_TOPIC_RT = "";//consumer topie
std::string G_MQCONSUMER_TAG_RT = "";//consumer tag
std::string G_MQCONSUMER_KEY_RT = "";//consumer key
std::string G_MQCONSUMER_ACCESSKEY = "";
std::string G_MQCONSUMER_SECRETKEY = "";
std::string G_MQCONSUMER_CHANNEL = "";
std::string G_MQCONSUMER_TOPIC_UD = "";//consumer topie
std::string G_MQCONSUMER_TAG_UD = "";//consumer tag
std::string G_MQCONSUMER_KEY_UD = "";//consumer key
std::string G_MQCONSUMER_TOPIC_RC = "";//consumer topie
std::string G_MQCONSUMER_TAG_RC = "";//consumer tag
std::string G_MQCONSUMER_KEY_RC = "";//consumer key
std::string G_MQCONSUMER_TOPIC_SET = "";//consumer topie
std::string G_MQCONSUMER_TAG_SET = "";//consumer tag
std::string G_MQCONSUMER_KEY_SET = "";//consumer key
2025-02-25 16:33:11 +08:00
std::string G_LOG_TOPIC = "";//topie
std::string G_LOG_TAG = "";//tag
std::string G_LOG_KEY = "";//key
std::string G_MQCONSUMER_TOPIC_LOG = "";//consumer topie
std::string G_MQCONSUMER_TAG_LOG = "";//consumer tag
std::string G_MQCONSUMER_KEY_LOG = "";//consumer key
2025-03-11 21:07:17 +08:00
std::string G_CONNECT_TOPIC = "";//consumer topie
std::string G_CONNECT_TAG = "";//consumer tag
std::string G_CONNECT_KEY = "";//consumer key
2025-01-16 16:17:01 +08:00
int G_TEST_FLAG = 0;
int G_TEST_NUM = 0;
int TEST_PORT = 11000;//<2F><><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>shell<6C>Ķ˿<C4B6>
2025-03-28 13:43:55 +08:00
std::string G_TEST_LIST = "";//<2F><><EFBFBD><EFBFBD><EFBFBD>õķ<C3B5><C4B7><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ն<EFBFBD><D5B6>б<EFBFBD>
std::vector<std::string> TESTARRAY;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
//<2F>ն˺ͼ<CBBA><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ɸѡ
std::string TERMINAL_STATUS = "";
std::string MONITOR_STATUS = "";
std::string ICD_FLAG = "";
//<2F><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>
int SOCKET_PORT = 13000;
int SOCKETENABLE = 0;
//<2F><><EFBFBD><EFBFBD>http<74><70><EFBFBD>ú<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20241031
int HTTPENABLE = 0;
std::string HTTP_IP = "";
int HTTP_PORT = 12000;
/*<2A><><EFBFBD><EFBFBD>web<65>ӿ<EFBFBD>lnk202411-6*/
std::string WEB_DEVICE = "";
std::string WEB_ICD = "";
std::string WEB_INTEGRITY = ""; //<2F>ݲ<EFBFBD>ʹ<EFBFBD><CAB9>
std::string WEB_COMFLAG = "";
std::string WEB_EVENT = "";
std::string WEB_FILEUPLOAD = "";
std::string WEB_FILEDOWNLOAD = "";
//lnk20250115<31><35><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
extern pthread_mutex_t mtx;
/*lnk 2024-10-21 */
2025-03-06 18:41:48 +08:00
std::string intToString(int number);
2025-01-16 16:17:01 +08:00
//////////////////////////////////////////////////////////////////////////
extern int server_socket; //Web Socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
extern unsigned int g_node_id; //ǰ<>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(100-500)
//WW 2023-08-20 end
////////////////////////////////////////////////////////////////////////////////////////////////////
void parse_log_switch_ini(unsigned int* error, unsigned int* warn, unsigned int* info)
{
QString pt61850netd_pqfe_IniFilename = QString("../etc/pt61850netd_pqfe.ini");
QSettings settings(pt61850netd_pqfe_IniFilename, QSettings::IniFormat);
settings.beginGroup("Log");
*error = settings.value("error", 0).toUInt();
*warn = settings.value("warn", 0).toUInt();
*info = settings.value("info", 0).toUInt();
g_no_auth = settings.value("no_auth", 0).toUInt();
g_DevFlag = settings.value("DevFlag", 0).toUInt();
settings.endGroup();
}
2025-03-28 13:43:55 +08:00
//lnk20250328<32><38><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>б<EFBFBD><D0B1>õĺ<C3B5><C4BA><EFBFBD>
void parseTestList(const std::string& input) {
TESTARRAY.clear(); // <20><><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD><EFBFBD>
size_t start = 0;
size_t end = 0;
while ((end = input.find(',', start)) != std::string::npos) {
std::string id = input.substr(start, end - start);
if (!id.empty()) {
TESTARRAY.push_back(id);
std::cout << "use realdata device id:" << id << std::endl;
}
start = end + 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ж<EFBFBD><D0B6>Ž<EFBFBD>β<EFBFBD><CEB2>
if (start < input.length()) {
std::string lastId = input.substr(start);
if (!lastId.empty()) {
TESTARRAY.push_back(lastId);
std::cout << "use realdata device id:" << lastId << std::endl;
}
}
}
2025-01-16 16:17:01 +08:00
//CZY 2023-09-06 config
void init_config() {
QByteArray ba;
2025-03-28 13:43:55 +08:00
QString MyKafkaIniFilename = QString("../etc/config/") + QString("mykafka.ini"); //+QString::fromAscii(subdir)
2025-01-16 16:17:01 +08:00
QSettings settings(MyKafkaIniFilename, QSettings::IniFormat);
ACCOUNT_UPDATE_INTERVAL = settings.value("AccountUpdate/Interval", 0).toInt();
qDebug() << "Read ACCOUNT_UPDATE_INTERVAL:" << ACCOUNT_UPDATE_INTERVAL << endl;
ba = settings.value("AccountUpdate/LastUpdateTime", "").toString().toLatin1();
ACCOUNT_UPDATE_LAST_TIME = strdup(ba.data());
qDebug() << "Read ACCOUNT_UPDATE_LAST_TIME:" << ACCOUNT_UPDATE_LAST_TIME << endl;
MULIT_NODE_INTERVAL = settings.value("MultiNode/Interval", 0).toInt();
qDebug() << "Read MULIT_NODE_INTERVAL:" << MULIT_NODE_INTERVAL << endl;
SEND_FLAG = settings.value("Flag/SendFlag", 0).toInt();
qDebug() << "Read SEND_FLAG:" << SEND_FLAG << endl;
FILE_FLAG = settings.value("Flag/FileFlag", 0).toInt();
qDebug() << "Read FILE_FLAG:" << FILE_FLAG << endl;
FRONT_INST = settings.value("Flag/FrontInst", 0).toInt();
qDebug() << "Read FRONT_INST:" << FRONT_INST << endl;
ba = settings.value("Flag/FrontIP", "").toString().toLatin1();
FRONT_IP = strdup(ba.data());
qDebug() << "Read FRONT_IP:" << FRONT_IP << endl;
CITY_FLAG = settings.value("Flag/CityFlag", 0).toInt();
qDebug() << "Read CITY_FLAG:" << CITY_FLAG << endl;
//̨<><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20241031//////////////////////////////////////////////////////////////
TERMINAL_STATUS = settings.value("Ledger/TerminalStatus", 0).toString().toStdString();
std::cout << "Read TERMINAL_STATUS:" << TERMINAL_STATUS << std::endl;
MONITOR_STATUS = settings.value("Ledger/MonitorStatus", 0).toString().toStdString();
std::cout << "Read MONITOR_STATUS:" << MONITOR_STATUS << std::endl;
ICD_FLAG = settings.value("Ledger/IcdFlag", 0).toString().toStdString();
std::cout << "Read ICD_FLAG:" << ICD_FLAG << std::endl;
2025-01-21 17:48:37 +08:00
IED_COUNT = settings.value("Ledger/IedCount", 0).toInt();
2025-01-16 16:17:01 +08:00
//////////////////////////////////////////////////<2F><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD>///////////////////
SOCKETENABLE = settings.value("Socket/SocketEnable", 0).toInt();
SOCKET_PORT = settings.value("Socket/SocketPort", 0).toInt();
//////<2F><><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////
HTTPENABLE = settings.value("Http/HttpEnable", 0).toInt();
ba = settings.value("Http/HttpIp", "").toString().toLatin1();
HTTP_IP = strdup(ba.data());
std::cout << "Read HTTP_IP:" << HTTP_IP << std::endl;
HTTP_PORT = settings.value("Http/HttpPort", 0).toInt();
std::cout << "Read HTTP_PORT:" << HTTP_PORT << std::endl;
ba = settings.value("Http/WebDevice", "").toString().toLatin1();
WEB_DEVICE = strdup(ba.data());
std::cout << "Read WEB_DEVICE:" << WEB_DEVICE << std::endl;
ba = settings.value("Http/WebIcd", "").toString().toLatin1();
WEB_ICD = strdup(ba.data());
std::cout << "Read WEB_ICD:" << WEB_ICD << std::endl;
ba = settings.value("Http/WebIntegrity", "").toString().toLatin1();
WEB_INTEGRITY = strdup(ba.data());
std::cout << "Read WEB_INTEGRITY:" << WEB_INTEGRITY << std::endl;
ba = settings.value("Http/WebComflag", "").toString().toLatin1();
WEB_COMFLAG = strdup(ba.data());
std::cout << "Read WEB_COMFLAG:" << WEB_COMFLAG << std::endl;
ba = settings.value("Http/WebEvent", "").toString().toLatin1();
WEB_EVENT = strdup(ba.data());
std::cout << "Read WEB_EVENT:" << WEB_EVENT << std::endl;
ba = settings.value("Http/WebFileupload", "").toString().toLatin1();
WEB_FILEUPLOAD = strdup(ba.data());
std::cout << "Read WEB_FILEUPLOAD:" << WEB_FILEUPLOAD << std::endl;
ba = settings.value("Http/WebFiledownload", "").toString().toLatin1();
WEB_FILEDOWNLOAD = strdup(ba.data());
std::cout << "Read WEB_FILEDOWNLOAD:" << WEB_FILEDOWNLOAD << std::endl;
///////////////////////////////////////////////////////////////////////////////////////////////////////
recall_len = settings.value("Recall/recall_lenth", 0).toInt();
qDebug() << "Read recall_lenth:" << recall_len << endl;
recall_sta = settings.value("Recall/recall_start", 0).toInt();
qDebug() << "Read recall_start:" << recall_sta << endl;
recall_daily = settings.value("Recall/recall_dailytime", 0).toInt();
qDebug() << "Read recall_dailytime:" << recall_daily << endl;
COMMUNICATION_LOG_STATUS_TIME = settings.value("CommunicationLog/StatusRecordDuration", 0).toInt();
qDebug() << "Read COMMUNICATION_LOG_STATUS_TIME:" << COMMUNICATION_LOG_STATUS_TIME << endl;
COMMUNICATION_LOG_ABNORMAL_TIME = settings.value("CommunicationLog/AbnormalRecordDuration", 0).toInt();
qDebug() << "Read COMMUNICATION_LOG_ABNORMAL_TIME:" << COMMUNICATION_LOG_ABNORMAL_TIME << endl;
ba = settings.value("Postgres/Database", "").toString().toLatin1();
POSTGRES_DATABASE = strdup(ba.data());
ba = settings.value("Postgres/Username", "").toString().toLatin1();
POSTGRES_USERNAME = strdup(ba.data());
ba = settings.value("Postgres/Password", "").toString().toLatin1();
POSTGRES_PASSWORD = strdup(ba.data());
ba = settings.value("Postgres/Schema", "").toString().toLatin1();
POSTGRES_SCHEMA = strdup(ba.data());
ba = settings.value("Postgres/Dnsname", "").toString().toLatin1();
POSTGRES_DNSNAME = strdup(ba.data());
ba = settings.value("Postgres/TablePrefix", "").toString().toLatin1();
POSTGRES_TABLEPREFIX = strdup(ba.data());
qDebug() << "Read POSTGRES_DATABASE:" << POSTGRES_DATABASE << endl;
qDebug() << "Read POSTGRES_USERNAME:" << POSTGRES_USERNAME << endl;
qDebug() << "Read POSTGRES_PASSWORD:" << POSTGRES_PASSWORD << endl;
qDebug() << "Read POSTGRES_SCHEMA:" << POSTGRES_SCHEMA << endl;
qDebug() << "Read POSTGRES_DNSNAME:" << POSTGRES_DNSNAME << endl;
qDebug() << "Read POSTGRES_TABLEPREFIX:" << POSTGRES_TABLEPREFIX << endl;
ba = settings.value("Oss/OssEndpoint", "").toString().toLatin1();
OSS_ENDPOINT = strdup(ba.data());
ba = settings.value("Oss/AccessKeyID", "").toString().toLatin1();
ACCESS_KEY_ID = strdup(ba.data());
ba = settings.value("Oss/AccessKeySecret", "").toString().toLatin1();
ACCESS_KEY_SECRET = strdup(ba.data());
ba = settings.value("Oss/BucketName", "").toString().toLatin1();
BUCKET_NAME = strdup(ba.data());
qDebug() << "Read OSS_ENDPOINT:" << OSS_ENDPOINT << endl;
qDebug() << "Read ACCESS_KEY_ID:" << ACCESS_KEY_ID << endl;
qDebug() << "Read ACCESS_KEY_SECRET:" << ACCESS_KEY_SECRET << endl;
qDebug() << "Read BUCKET_NAME:" << BUCKET_NAME << endl;
ba = settings.value("Kafka/brokerlist", "").toString().toLatin1();
BROKER_LIST = strdup(ba.data());
ba = settings.value("Kafka/HisTopic", "").toString().toLatin1();
TOPIC_STAT = strdup(ba.data());
ba = settings.value("Kafka/PSTTopic", "").toString().toLatin1();
TOPIC_PST = strdup(ba.data());
ba = settings.value("Kafka/PLTTopic", "").toString().toLatin1();
TOPIC_PLT = strdup(ba.data());
ba = settings.value("Kafka/EventTopic", "").toString().toLatin1();
TOPIC_EVENT = strdup(ba.data());
ba = settings.value("Kafka/AlmTopic", "").toString().toLatin1();
TOPIC_ALARM = strdup(ba.data());
ba = settings.value("Kafka/SngTopic", "").toString().toLatin1();
TOPIC_SNG = strdup(ba.data());
ba = settings.value("Kafka/RTDataTopic", "").toString().toLatin1();
TOPIC_RTDATA = strdup(ba.data());
qDebug() << "Read BROKER_LIST:" << BROKER_LIST << endl;
qDebug() << "Read TOPIC_STAT:" << TOPIC_STAT << endl;
qDebug() << "Read TOPIC_PST:" << TOPIC_PST << endl;
qDebug() << "Read TOPIC_PLT:" << TOPIC_PLT << endl;
qDebug() << "Read TOPIC_EVENT:" << TOPIC_EVENT << endl;
qDebug() << "Read TOPIC_ALARM:" << TOPIC_ALARM << endl;
qDebug() << "Read TOPIC_SNG:" << TOPIC_SNG << endl;
qDebug() << "Read TOPIC_RTDATA:" << TOPIC_RTDATA << endl;
ba = settings.value("Kafka/Protocol", "").toString().toLatin1();
PROTOCOL = strdup(ba.data());
ba = settings.value("Kafka/Mechanisms", "").toString().toLatin1();
MECHANISMS = strdup(ba.data());
ba = settings.value("Kafka/KeytabFile", "").toString().toLatin1();
KEYTAB_FILE = strdup(ba.data());
ba = settings.value("Kafka/ServiceName", "").toString().toLatin1();
SERVICE_NAME = strdup(ba.data());
ba = settings.value("Kafka/Principal", "").toString().toLatin1();
PRINCIPAL = strdup(ba.data());
ba = settings.value("Kafka/DomainName", "").toString().toLatin1();
DOMAIN_NAME = strdup(ba.data());
qDebug() << "Read PROTOCOL:" << PROTOCOL << endl;
qDebug() << "Read MECHANISMS:" << MECHANISMS << endl;
qDebug() << "Read KEYTAB_FILE:" << KEYTAB_FILE << endl;
qDebug() << "Read SERVICE_NAME:" << SERVICE_NAME << endl;
qDebug() << "Read PRINCIPAL:" << PRINCIPAL << endl;
qDebug() << "Read DOMAIN_NAME:" << DOMAIN_NAME << endl;
ba = settings.value("Web/ClientId", "").toString().toLatin1();
CLIENT_ID = strdup(ba.data());
ba = settings.value("Web/ClientSecret", "").toString().toLatin1();
CLIENT_SECRET = strdup(ba.data());
ba = settings.value("Web/TokenUrl", "").toString().toLatin1();
TOKEN_URL = strdup(ba.data());
ba = settings.value("Web/DeviceUrl", "").toString().toLatin1();
DEVICE_URL = strdup(ba.data());
ba = settings.value("Web/GrantType", "").toString().toLatin1();
GRANT_TYPE = strdup(ba.data());
qDebug() << "Read CLIENT_ID:" << CLIENT_ID << endl;
qDebug() << "Read CLIENT_SECRET:" << CLIENT_SECRET << endl;
qDebug() << "Read TOKEN_URL:" << TOKEN_URL << endl;
qDebug() << "Read DEVICE_URL:" << DEVICE_URL << endl;
qDebug() << "Read GRANT_TYPE:" << GRANT_TYPE << endl;
ba = settings.value("Uds/UdsUploadUrl", "").toString().toLatin1();
UDS_UPLOAD_URL = strdup(ba.data());
ba = settings.value("Uds/UdsDownloadUrl", "").toString().toLatin1();
UDS_DOWNLOAD_URL = strdup(ba.data());
qDebug() << "Read UDS_UPLOAD_URL:" << UDS_UPLOAD_URL << endl;
qDebug() << "Read UDS_DOWNLOAD_URL:" << UDS_DOWNLOAD_URL << endl;
/*<2A><><EFBFBD><EFBFBD>rocketmq<6D>Ľ<EFBFBD><C4BD><EFBFBD>10-9 */////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ba = settings.value("RocketMq/producer", "").toString().toLatin1();
G_ROCKETMQ_PRODUCER = strdup(ba.data());
ba = settings.value("RocketMq/Ipport", "").toString().toLatin1();
G_ROCKETMQ_IPPORT = strdup(ba.data());
ba = settings.value("RocketMq/Topic", "").toString().toLatin1();
G_ROCKETMQ_TOPIC = strdup(ba.data());
ba = settings.value("RocketMq/Tag", "").toString().toLatin1();
G_ROCKETMQ_TAG = strdup(ba.data());
ba = settings.value("RocketMq/Key", "").toString().toLatin1();
G_ROCKETMQ_KEY = strdup(ba.data());
QUEUENUM = settings.value("RocketMq/Queuenum", 0).toInt();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ba = settings.value("RocketMq/consumer", "").toString().toLatin1();
G_ROCKETMQ_CONSUMER = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerIpport", "").toString().toLatin1();
G_MQCONSUMER_IPPORT = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTopicRT", "").toString().toLatin1();
G_MQCONSUMER_TOPIC_RT = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTagRT", "").toString().toLatin1();
G_MQCONSUMER_TAG_RT = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerKeyRT", "").toString().toLatin1();
G_MQCONSUMER_KEY_RT = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerAccessKey", "").toString().toLatin1();
G_MQCONSUMER_ACCESSKEY = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerSecretKey", "").toString().toLatin1();
G_MQCONSUMER_SECRETKEY = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerChannel", "").toString().toLatin1();
G_MQCONSUMER_CHANNEL = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTopicUD", "").toString().toLatin1();
G_MQCONSUMER_TOPIC_UD = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTagUD", "").toString().toLatin1();
G_MQCONSUMER_TAG_UD = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerKeyUD", "").toString().toLatin1();
G_MQCONSUMER_KEY_UD = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTopicRC", "").toString().toLatin1();
G_MQCONSUMER_TOPIC_RC = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTagRC", "").toString().toLatin1();
G_MQCONSUMER_TAG_RC = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerKeyRC", "").toString().toLatin1();
G_MQCONSUMER_KEY_RC = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTopicSET", "").toString().toLatin1();
G_MQCONSUMER_TOPIC_SET = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTagSET", "").toString().toLatin1();
G_MQCONSUMER_TAG_SET = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerKeySET", "").toString().toLatin1();
G_MQCONSUMER_KEY_SET = strdup(ba.data());
2025-02-25 16:33:11 +08:00
ba = settings.value("RocketMq/ConsumerTopicLOG", "").toString().toLatin1();
G_MQCONSUMER_TOPIC_LOG = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerTagLOG", "").toString().toLatin1();
G_MQCONSUMER_TAG_LOG = strdup(ba.data());
ba = settings.value("RocketMq/ConsumerKeyLOG", "").toString().toLatin1();
G_MQCONSUMER_KEY_LOG = strdup(ba.data());
ba = settings.value("RocketMq/LOGTopic", "").toString().toLatin1();
G_LOG_TOPIC = strdup(ba.data());
ba = settings.value("RocketMq/LOGTag", "").toString().toLatin1();
G_LOG_TAG = strdup(ba.data());
ba = settings.value("RocketMq/LOGKey", "").toString().toLatin1();
G_LOG_KEY = strdup(ba.data());
2025-03-11 21:07:17 +08:00
ba = settings.value("RocketMq/CONNECTTopic", "").toString().toLatin1();
G_CONNECT_TOPIC = strdup(ba.data());
ba = settings.value("RocketMq/CONNECTTag", "").toString().toLatin1();
G_CONNECT_TAG = strdup(ba.data());
ba = settings.value("RocketMq/CONNECTKey", "").toString().toLatin1();
G_CONNECT_KEY = strdup(ba.data());
2025-01-16 16:17:01 +08:00
//MQ<4D><51><EFBFBD><EFBFBD>
G_TEST_FLAG = settings.value("RocketMq/Testflag", 0).toInt();
G_TEST_NUM = settings.value("RocketMq/Testnum", 0).toInt();
2025-03-28 13:43:55 +08:00
ba = settings.value("RocketMq/TestList", 0).toString().toLatin1();
G_TEST_LIST = strdup(ba.data());
parseTestList(G_TEST_LIST);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ն<EFBFBD><D5B6>б<EFBFBD>
2025-01-16 16:17:01 +08:00
//<2F><><EFBFBD><EFBFBD>shell
TEST_PORT = settings.value("RocketMq/TestPort", 0).toInt();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>ӡ
std::cout << "Read G_ROCKETMQ_PRODUCER:" << G_ROCKETMQ_PRODUCER << std::endl;
std::cout << "Read G_ROCKETMQ_IPPORT:" << G_ROCKETMQ_IPPORT << std::endl;
std::cout << "Read G_ROCKETMQ_TOPIC:" << G_ROCKETMQ_TOPIC << std::endl;
std::cout << "Read G_ROCKETMQ_TAG:" << G_ROCKETMQ_TAG << std::endl;
std::cout << "Read G_ROCKETMQ_KEY:" << G_ROCKETMQ_KEY << std::endl;
std::cout << "Read QUEUENUM:" << QUEUENUM << std::endl;
2025-02-25 16:33:11 +08:00
std::cout << "Read G_LOG_TOPIC:" << G_LOG_TOPIC << std::endl;
std::cout << "Read G_LOG_TAG:" << G_LOG_TAG << std::endl;
std::cout << "Read G_LOG_KEY:" << G_LOG_KEY << std::endl;
2025-03-11 21:07:17 +08:00
std::cout << "Read G_CONNECT_TOPIC:" << G_CONNECT_TOPIC << std::endl;
std::cout << "Read G_CONNECT_TAG:" << G_CONNECT_TAG << std::endl;
std::cout << "Read G_CONNECT_KEY:" << G_CONNECT_KEY << std::endl;
2025-01-16 16:17:01 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>ӡ
std::cout << "Read G_ROCKETMQ_CONSUMER:" << G_ROCKETMQ_CONSUMER << std::endl;
std::cout << "Read G_MQCONSUMER_IPPORT:" << G_MQCONSUMER_IPPORT << std::endl;
std::cout << "Read G_MQCONSUMER_TOPIC_RT:" << G_MQCONSUMER_TOPIC_RT << std::endl;
std::cout << "Read G_MQCONSUMER_TAG_RT:" << G_MQCONSUMER_TAG_RT << std::endl;
std::cout << "Read G_MQCONSUMER_KEY_RT:" << G_MQCONSUMER_KEY_RT << std::endl;
std::cout << "Read G_MQCONSUMER_ACCESSKEY:" << G_MQCONSUMER_ACCESSKEY << std::endl;
std::cout << "Read G_MQCONSUMER_SECRETKEY:" << G_MQCONSUMER_SECRETKEY << std::endl;
std::cout << "Read G_MQCONSUMER_CHANNEL:" << G_MQCONSUMER_CHANNEL << std::endl;
std::cout << "Read G_MQCONSUMER_TOPIC_UD:" << G_MQCONSUMER_TOPIC_UD << std::endl;
std::cout << "Read G_MQCONSUMER_TAG_UD:" << G_MQCONSUMER_TAG_UD << std::endl;
std::cout << "Read G_MQCONSUMER_KEY_UD:" << G_MQCONSUMER_KEY_UD << std::endl;
std::cout << "Read G_MQCONSUMER_TOPIC_RC:" << G_MQCONSUMER_TOPIC_RC << std::endl;
std::cout << "Read G_MQCONSUMER_TAG_RC:" << G_MQCONSUMER_TAG_RC << std::endl;
std::cout << "Read G_MQCONSUMER_KEY_RC:" << G_MQCONSUMER_KEY_RC << std::endl;
std::cout << "Read G_MQCONSUMER_TOPIC_SET:" << G_MQCONSUMER_TOPIC_SET << std::endl;
std::cout << "Read G_MQCONSUMER_TAG_SET:" << G_MQCONSUMER_TAG_SET << std::endl;
std::cout << "Read G_MQCONSUMER_KEY_SET:" << G_MQCONSUMER_KEY_SET << std::endl;
2025-02-25 16:33:11 +08:00
std::cout << "Read G_MQCONSUMER_TOPIC_LOG:" << G_MQCONSUMER_TOPIC_LOG << std::endl;
std::cout << "Read G_MQCONSUMER_TAG_LOG:" << G_MQCONSUMER_TAG_LOG << std::endl;
std::cout << "Read G_MQCONSUMER_KEY_LOG:" << G_MQCONSUMER_KEY_LOG << std::endl;
2025-01-16 16:17:01 +08:00
//Mq<4D><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>ӡ
std::cout << "Read G_TEST_FLAG:" << G_TEST_FLAG << std::endl;
std::cout << "Read G_TEST_NUM:" << G_TEST_NUM << std::endl;
//20241212lnk<6E><6B><EFBFBD>Ӷ<EFBFBD>ǰ<EFBFBD><C7B0>
if (g_front_seg_index != 0 && g_front_seg_num != 0) {
MULTIPLE_NODE_FLAG = 1;
2025-03-05 17:47:47 +08:00
std::cout << "this is multiple process of index:" << g_front_seg_index << std::endl;
2025-01-16 16:17:01 +08:00
}
else{
MULTIPLE_NODE_FLAG = 0;
2025-03-05 17:47:47 +08:00
std::cout << "this is single process" << std::endl;
2025-01-16 16:17:01 +08:00
}
2025-02-26 16:39:10 +08:00
2025-01-16 16:17:01 +08:00
//20250109lnk<6E><6B><EFBFBD>ӽ<EFBFBD><D3BD>̲<EFBFBD><CCB2>Դ<EFBFBD>ӡ<EFBFBD>˿<EFBFBD>
if (g_node_id == STAT_DATA_BASE_NODE_ID)//ͳ<>Ʋɼ<C6B2>
TEST_PORT = TEST_PORT + STAT_DATA_BASE_NODE_ID + g_front_seg_index;
else if (g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) {//<2F><><EFBFBD><EFBFBD>
TEST_PORT = TEST_PORT + RECALL_HIS_DATA_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == THREE_SECS_DATA_BASE_NODE_ID) {//3<><33><EFBFBD>ɼ<EFBFBD>
TEST_PORT = TEST_PORT + THREE_SECS_DATA_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//<2F><>̬¼<CCAC><C2BC>
TEST_PORT = TEST_PORT + SOE_COMTRADE_BASE_NODE_ID + g_front_seg_index;
}
2025-02-26 16:39:10 +08:00
2025-01-16 16:17:01 +08:00
}
// CZY <20><><EFBFBD><EFBFBD> ping IP
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB2A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string executeCommand(const std::string& command) {
std::string result = "";
FILE* pipe = popen(command.c_str(), "r");
if (!pipe) {
std::cerr << "Error executing command." << std::endl;
return result;
}
char buffer[128];
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}
bool telnet_port_socket(const char* ip, int port) {
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_pton(AF_INET, ip, &server_addr.sin_addr);
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
return false;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʱʱ<CAB1><CAB1>Ϊ5<CEAA><35>
struct timeval timeout;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout)) < 0) {
perror("setsockopt");
close(sockfd);
return false;
}
if (setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, sizeof(timeout)) < 0) {
perror("setsockopt");
close(sockfd);
return false;
}
if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
if (errno == EINPROGRESS) {
fd_set fds;
FD_ZERO(&fds);
FD_SET(sockfd, &fds);
int ret = select(sockfd + 1, NULL, &fds, NULL, &timeout);
if (ret == -1) {
perror("select");
close(sockfd);
return false;
}
else if (ret == 0) {
// <20><><EFBFBD>ӳ<EFBFBD>ʱ
close(sockfd);
return false;
}
else {
int error;
socklen_t len = sizeof(error);
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len);
if (error == 0) {
// <20><><EFBFBD>ӳɹ<D3B3>
close(sockfd);
return true;
}
else {
// <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
close(sockfd);
return false;
}
}
}
else {
// <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
close(sockfd);
return false;
}
}
// <20><><EFBFBD>ӳɹ<D3B3>
close(sockfd);
return true;
}
// ping IP
bool ping_ip(const std::string& ip) {
std::string command = "ping -c 1 -w 2.5 " + ip;
std::string result = executeCommand(command);
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> "1 packets transmitted, 1 received" <20>ַ<EFBFBD><D6B7><EFBFBD>
if (result.find("1 packets transmitted, 1 received") != std::string::npos) {
return true;
}
else {
return false;
}
}
2025-03-06 18:41:48 +08:00
void pingPrint(QTcpSocket* clientSocket, const std::string &msg) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
std::cout << msg << std::endl;
// <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
add_comm_log(const_cast<char*>(msg.c_str()));
// <20><><EFBFBD><EFBFBD> clientSocket <20><>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> shell
if (clientSocket != nullptr) {
clientSocket->write((msg + "\r\n").c_str());
clientSocket->flush();
}
}
2025-03-07 18:27:03 +08:00
int Worker::init_ping_telnet(QTcpSocket* clientSocket, int& ip_count, int& telnet_count) {
2025-03-06 18:41:48 +08:00
pingPrint(clientSocket, "start test ping telnet");
ied_t* ied = NULL;
int iedno;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-03-07 18:27:03 +08:00
for (iedno = 0; iedno < g_node->n_clients && !g_stopTelnetTest; iedno++) {
// **1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> ``` <20>˳<EFBFBD>**
if (clientSocket->waitForReadyRead(100)) { // ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QByteArray input = clientSocket->readAll().trimmed();
if (input == "`") { // ? <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> ```<60><><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>־ģʽ
std::cout << "Received '`' from shell socket! Exiting viewlog...\n";
g_stopTelnetTest = true;
break;
}
2025-03-06 18:41:48 +08:00
}
2025-03-07 18:27:03 +08:00
2025-03-06 18:41:48 +08:00
ied = g_node->clients[iedno];
if (ied) {
if (g_onlyIP[0] != 0 && (strcmp(g_onlyIP, ied->channel[0].addr_str) != 0)) {
continue;
}
bool pingResult = ping_ip(ied->channel[0].addr_str);
bool telnetResult = telnet_port_socket(ied->channel[0].addr_str, ied->channel[0].port);
std::string logMsg;
logMsg.append("Ping to IP ");
logMsg.append(ied->channel[0].addr_str);
if (pingResult) {
ip_count++;
logMsg.append(" is successful.");
} else {
logMsg.append(" is unsuccessful.");
}
pingPrint(clientSocket, logMsg);
add_comm_log(const_cast<char*>(logMsg.c_str()));
logMsg = "";
logMsg.append("Telnet port ");
logMsg.append(QString::number(ied->channel[0].port).toStdString());
if (telnetResult) {
telnet_count++;
logMsg.append(" is open on IP ");
} else {
logMsg.append(" is closed on IP ");
}
logMsg.append(ied->channel[0].addr_str);
add_comm_log(const_cast<char*>(logMsg.c_str()));
pingPrint(clientSocket, logMsg);
std::string countMsg = "iedno:" + intToString(iedno) +
" ip_count:" + intToString(ip_count) +
" telnet_count:" + intToString(telnet_count);
pingPrint(clientSocket, countMsg);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
QString MyKafkaIniFilename = QString("../etc/") + QString("testping.ini");
QSettings settings(MyKafkaIniFilename, QSettings::IniFormat);
settings.setValue("test/IpCount", ip_count);
settings.setValue("test/TelnetCount", telnet_count);
settings.setValue("test/IedCount", iedno);
}
}
pingPrint(clientSocket, "end test ping telnet");
return 1;
2025-01-16 16:17:01 +08:00
}
//CZY 2023-08-30 chat* null or emptry
bool isCharPtrEmpty(const char* str) {
return str == nullptr || str[0] == '\0' || str == "";
}
// CZY 2024-07-24 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȫΪ<C8AB><CEAA><EFBFBD><EFBFBD>
int isAllDigits(const char* str) {
while (*str) {
if (!isdigit((unsigned char)*str)) {
return 0; // <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
}
str++;
}
return 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// CZY 2024-07-24<32><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
int stringToInt(const char* str, int* result) {
if (isAllDigits(str)) {
*result = atoi(str); // ʹ<><CAB9>atoi<6F><69><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>atoi<6F><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 1; // ת<><D7AA><EFBFBD>ɹ<EFBFBD>
}
return 0; // ת<><D7AA>ʧ<EFBFBD><CAA7>
}
2025-04-29 15:05:36 +08:00
int GetServerIndexFromDB() //<2F><>ȡǰ<C8A1>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
register int fd, interface;
const int MAXINTERFACES = 100;
struct ifreq buf[MAXINTERFACES];
struct arpreq arp;
struct ifconf ifc;
char mac[32] = "";
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0) {
ifc.ifc_len = sizeof buf;
ifc.ifc_buf = (caddr_t)buf;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (!ioctl(fd, SIOCGIFCONF, (char*)&ifc)) {
interface = ifc.ifc_len / sizeof(struct ifreq);
printf("\ninterface num is interface= %d\n", interface);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
while (interface-- > 0) {
printf("net device %s\n", buf[interface].ifr_name);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
/*ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ģʽ Jugde whether the net card status is promisc */
if (!(ioctl(fd, SIOCGIFFLAGS, (char*)&buf[interface]))) {
if (buf[interface].ifr_flags & IFF_PROMISC) {
printf("the interface is PROMISC \n");
}
}
else {
char str[256] = "";
sprintf(str, "cpm: ioctl device %s", buf[interface].ifr_name);
perror(str);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
/*<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> Judge whether the net card status is up */
if (buf[interface].ifr_flags & IFF_UP) {
printf("the interface status is UP\n");
}
else {
printf("the interface status is DOWN\n");
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>IP<49><50>ַ Get IP of the net card */
if (!(ioctl(fd, SIOCGIFADDR, (char*)&buf[interface]))) {
printf("IP address is: %s\n", inet_ntoa(((struct sockaddr_in*)(&buf[interface].ifr_addr))->sin_addr));
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
else {
char str[256] = "";
sprintf(str, "cpm: ioctl device %s", buf[interface].ifr_name);
perror(str);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HW<48><57>ַ Get HW ADDRESS of the net card */
if (!(ioctl(fd, SIOCGIFHWADDR, (char*)&buf[interface]))) {
printf("HW address is: ");
sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
(unsigned char)buf[interface].ifr_hwaddr.sa_data[0],
(unsigned char)buf[interface].ifr_hwaddr.sa_data[1],
(unsigned char)buf[interface].ifr_hwaddr.sa_data[2],
(unsigned char)buf[interface].ifr_hwaddr.sa_data[3],
(unsigned char)buf[interface].ifr_hwaddr.sa_data[4],
(unsigned char)buf[interface].ifr_hwaddr.sa_data[5]);
printf("%s\n\n", mac);
}
else {
char str[256];
sprintf(str, "cpm: ioctl device %s", buf[interface].ifr_name);
perror(str);
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
else
perror("cpm: ioctl");
}
else
perror("cpm: socket");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
close(fd);
return 0;
}
/////////////////////////////////////////////////////////CZY
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void parse_one_rpt_log_ini(int idx, QStringList* rpt_cfg_strlist, QStringList* log_cfg_strlist, char* type)
{
char* tmp;
tmp = Get_xmlpath(type);//<2F><>ȡģ<C8A1><C4A3>id<69><64>
if (tmp == NULL) {//<2F>Ҳ<EFBFBD><D2B2><EFBFBD>ģ<EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD>ϵ<EFBFBD><CFB5>ͺź<CDBA><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
if (strcmp(subdir, "cfg_stat_data") == 0)
{
QString devtype;
devtype.append(type);
QString devtype2;
devtype2.append("HL-6810");//<2F><>̬Ĭ<CCAC><C4AC><EFBFBD>ͺ<EFBFBD>HL-6810
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
qDebug() << "cfg_stat_data";
QString xml_dir = QString("../") + QString("etc/"); //Linux<75>µ<EFBFBD><C2B5><EFBFBD>·<EFBFBD><C2B7>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(xml_dir + QString("JiangSu_Config.xml"));//Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>JiangSu_Config.xml
if (!file.open(QIODevice::ReadOnly | QFile::Text)) //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>xml
{
qDebug() << "Read RPT Error1";
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (!doc.setContent(&file)) //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
{
qDebug() << "Read RPT Error2";
file.close();
return;
}
file.close();
QDomNode firstNode = doc.firstChild(); //<2F><><EFBFBD>ڵ<EFBFBD>"JSConfigTemplate"
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD><EFBFBD>doc<6F>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC>"Topic"
while (!n.isNull()) //<2F><><EFBFBD><EFBFBD>Topic<69>ڵ㲻Ϊ<E3B2BB><CEAA>
{
if (n.isElement())
{
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName(); //
if ("ReportMap" == strTag)//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
{
qDebug() << "ReportStat";
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) //<2F><><EFBFBD><EFBFBD> DataType<70>б<EFBFBD>
{
QDomNode node = list.at(i); //node1 <DataType>
if (node.isElement())
{
QString strTag2 = node.toElement().tagName(); //DataType<70>ڵ<EFBFBD>
if ("ReportStat" == strTag2)
{
QDomNodeList list2 = node.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>DataType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i2 = 0; i2 < list2.count(); i2++) //<2F><><EFBFBD><EFBFBD> Monitor<6F>б<EFBFBD>
{
QDomNode node2 = list2.at(i2); //node2 <Monitor>
if (node2.isElement())
{
rpt_cfg_strlist->append(node2.toElement().attribute("ReportControl"));
qDebug() << "devtype:" << devtype << node2.toElement().attribute("ReportControl").toAscii().data();
}
}
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
n = n.nextSibling();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";
log_cfg_strlist->append(log_cfg_str);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (strcmp(subdir, "cfg_soe_comtrade") == 0)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
qDebug() << "cfg_soe_comtrade";
QString xml_dir = QString("../") + QString("etc/"); //Linux<75>µ<EFBFBD><C2B5><EFBFBD>·<EFBFBD><C2B7>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(xml_dir + QString("JiangSu_Config.xml"));
if (!file.open(QIODevice::ReadOnly | QFile::Text)) //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>xml
{
qDebug() << "Read RPT Error1";
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (!doc.setContent(&file)) //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
{
qDebug() << "Read RPT Error2";
file.close();
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
file.close();
QDomNode firstNode = doc.firstChild(); //<2F><><EFBFBD>ڵ<EFBFBD>"JSConfigTemplate"
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD><EFBFBD>doc<6F>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC>"Topic"
while (!n.isNull()) //<2F><><EFBFBD><EFBFBD>Topic<69>ڵ㲻Ϊ<E3B2BB><CEAA>
{
if (n.isElement())
{
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName(); //
if ("ReportMap" == strTag)//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
{
qDebug() << "ReportEvent";
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) //<2F><><EFBFBD><EFBFBD> DataType<70>б<EFBFBD>
{
QDomNode node = list.at(i); //node1 <DataType>
if (node.isElement())
{
QString strTag2 = node.toElement().tagName(); //DataType<70>ڵ<EFBFBD>
if ("ReportEvent" == strTag2)
{
QDomNodeList list2 = node.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>DataType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i2 = 0; i2 < list2.count(); i2++) //<2F><><EFBFBD><EFBFBD> Monitor<6F>б<EFBFBD>
{
QDomNode node2 = list2.at(i2); //node2 <Monitor>
if (node2.isElement())
{
rpt_cfg_strlist->append(node2.toElement().attribute("ReportControl"));
qDebug() << node2.toElement().attribute("ReportControl").toAscii().data();
}
}
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
}
}
n = n.nextSibling();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";
log_cfg_strlist->append(log_cfg_str);
}
if (strcmp(subdir, "cfg_his_data") == 0 || strcmp(subdir, "cfg_newhis_data") == 0 || strcmp(subdir, "cfg_recallhis_data") == 0 || strcmp(subdir, "cfg_recallall_data") == 0)
{
QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";
log_cfg_strlist->append(log_cfg_str);
}
}
else//<2F>ͺŲ<CDBA>Ϊ<EFBFBD>ն<EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{
QString tmppath;
tmppath.append("/FeProject/dat/").append(tmp).append(".xml");
qDebug() << tmppath;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//lnk20241126<32><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "rptcfgfile:" << tmppath.toStdString() << std::endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
if (strcmp(subdir, "cfg_stat_data") == 0)
{
qDebug() << "cfg_stat_data";
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(tmppath);
if (!file.open(QIODevice::ReadOnly | QFile::Text)) //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>xml
{
qDebug() << "Read RPT Error1";
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//lnk20241126<32><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "Read RPT Error1" << std::endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (!doc.setContent(&file)) //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
{
qDebug() << "Read RPT Error2";
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//lnk20241126<32><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "Read RPT Error2" << std::endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
file.close();
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
file.close();
QDomNode firstNode = doc.firstChild(); //<2F><><EFBFBD>ڵ<EFBFBD>"JSConfigTemplate"
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD><EFBFBD>doc<6F>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC>"Topic"
while (!n.isNull()) //<2F><><EFBFBD><EFBFBD>Topic<69>ڵ㲻Ϊ<E3B2BB><CEAA>
{
if (n.isElement())
{
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName(); //
if ("ReportMap" == strTag)//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
{
qDebug() << "ReportStat";
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) //<2F><><EFBFBD><EFBFBD> DataType<70>б<EFBFBD>
{
QDomNode node = list.at(i); //node1 <DataType>
if (node.isElement())
{
QString strTag2 = node.toElement().tagName(); //DataType<70>ڵ<EFBFBD>
if ("ReportStat" == strTag2)
{
QDomNodeList list2 = node.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>DataType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i2 = 0; i2 < list2.count(); i2++) //<2F><><EFBFBD><EFBFBD> Monitor<6F>б<EFBFBD>
{
QDomNode node2 = list2.at(i2); //node2 <Monitor>
if (node2.isElement())
{
rpt_cfg_strlist->append(node2.toElement().attribute("ReportControl"));
qDebug() << node2.toElement().attribute("ReportControl").toAscii().data();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
}
}
n = n.nextSibling();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
log_cfg_strlist->append(log_cfg_str);
}
//lnk<6E><6B><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>20241125
if (strcmp(subdir, "cfg_3s_data") == 0)
{
qDebug() << "cfg_3s_data";
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(tmppath);
if (!file.open(QIODevice::ReadOnly | QFile::Text)) //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>xml
{
qDebug() << "Read RPT Error1";
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (!doc.setContent(&file)) //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
{
qDebug() << "Read RPT Error2";
file.close();
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
file.close();
QDomNode firstNode = doc.firstChild(); //<2F><><EFBFBD>ڵ<EFBFBD>"JSConfigTemplate"
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD><EFBFBD>doc<6F>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC>"Topic"
while (!n.isNull()) //<2F><><EFBFBD><EFBFBD>Topic<69>ڵ㲻Ϊ<E3B2BB><CEAA>
{
if (n.isElement())
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName(); //
if ("ReportMap" == strTag)//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
{
qDebug() << "ReportReal";
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) //<2F><><EFBFBD><EFBFBD> DataType<70>б<EFBFBD>
{
QDomNode node = list.at(i); //node1 <DataType>
if (node.isElement())
{
QString strTag2 = node.toElement().tagName(); //DataType<70>ڵ<EFBFBD>
if ("ReportReal" == strTag2)
{
QDomNodeList list2 = node.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>DataType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i2 = 0; i2 < list2.count(); i2++) //<2F><><EFBFBD><EFBFBD> Monitor<6F>б<EFBFBD>
{
QDomNode node2 = list2.at(i2); //node2 <Monitor>
if (node2.isElement())
{
rpt_cfg_strlist->append(node2.toElement().attribute("ReportControl"));
qDebug() << node2.toElement().attribute("ReportControl").toAscii().data();
}
}
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
n = n.nextSibling();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>־
//QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";
//log_cfg_strlist->append(log_cfg_str);
}
if (strcmp(subdir, "cfg_soe_comtrade") == 0)
{
qDebug() << "cfg_soe_comtrade";
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(tmppath);
if (!file.open(QIODevice::ReadOnly | QFile::Text)) //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>xml
{
qDebug() << "Read RPT Error1";
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (!doc.setContent(&file)) //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
{
qDebug() << "Read RPT Error2";
file.close();
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
file.close();
QDomNode firstNode = doc.firstChild(); //<2F><><EFBFBD>ڵ<EFBFBD>"JSConfigTemplate"
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD><EFBFBD>doc<6F>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC>"Topic"
while (!n.isNull()) //<2F><><EFBFBD><EFBFBD>Topic<69>ڵ㲻Ϊ<E3B2BB><CEAA>
{
if (n.isElement())
{
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName(); //
if ("ReportMap" == strTag)//zw<7A>޸<EFBFBD> 2023 - 8 - 15 <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML ԭ<><D4AD><EFBFBD><EFBFBD>RptLogCfg.iniȡ<69><C8A1>
{
qDebug() << "ReportEvent";
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) //<2F><><EFBFBD><EFBFBD> DataType<70>б<EFBFBD>
{
QDomNode node = list.at(i); //node1 <DataType>
if (node.isElement())
{
QString strTag2 = node.toElement().tagName(); //DataType<70>ڵ<EFBFBD>
if ("ReportEvent" == strTag2)//<2F><><EFBFBD>ֵ<EFBFBD>
{
QDomNodeList list2 = node.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>DataType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i2 = 0; i2 < list2.count(); i2++) //<2F><><EFBFBD><EFBFBD> Monitor<6F>б<EFBFBD>
{
QDomNode node2 = list2.at(i2); //node2 <Monitor>
if (node2.isElement())
{
rpt_cfg_strlist->append(node2.toElement().attribute("ReportControl"));
qDebug() << node2.toElement().attribute("ReportControl").toAscii().data();
}
}
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
n = n.nextSibling();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";
log_cfg_strlist->append(log_cfg_str);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (strcmp(subdir, "cfg_his_data") == 0 || strcmp(subdir, "cfg_newhis_data") == 0 || strcmp(subdir, "cfg_recallhis_data") == 0 || strcmp(subdir, "cfg_recallall_data") == 0)
{
QString log_cfg_str = "LLN0$LG$lcStatisticData,dsStatisticData,PQM1,0,600000,1,0,0,0";
log_cfg_strlist->append(log_cfg_str);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
delete[] tmp;
2025-01-16 16:17:01 +08:00
}
}
2025-04-29 15:05:36 +08:00
int parse_rpt_log_ini()
{
const int MAX_DEV_FLAG = 10;
bool not_loaded[MAX_DEV_FLAG];
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QMap<QString, QStringList*> rpt_cfg_strlists;
QMap<QString, QStringList*> log_cfg_strlists;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int iedno, cpuno;
2025-01-16 16:17:01 +08:00
ied_t* ied;
ied_usr_t* ied_usr;
2025-04-29 15:05:36 +08:00
LD_info_t* LD_info;
char buf[256];
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied = g_node->clients[iedno];
ied_usr = GET_IEDEXT_ADDR(ied);
QString type;
type.append(ied_usr->dev_type);
if (!rpt_cfg_strlists.contains(type))
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
QStringList* rpt_temp = new QStringList();
QStringList* log_temp = new QStringList();
rpt_cfg_strlists.insert(type, rpt_temp);
log_cfg_strlists.insert(type, log_temp);
//g_DevFlagû<67><C3BB>ʹ<EFBFBD><CAB9>
parse_one_rpt_log_ini(g_DevFlag, rpt_cfg_strlists[type], log_cfg_strlists[type], ied_usr->dev_type);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (cpuno = 0; cpuno < ied->cpucount; cpuno++) {
LD_info = &(ied_usr->LD_info[cpuno]);
char str[256]; //256<35><36>С
char* tmp = Get_IED(ied_usr->dev_type);
if(tmp == NULL){std::cerr << "front read ied config error!" << std::endl;continue;}
qDebug() << tmp << endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
apr_snprintf(str, sizeof(str), tmp, cpuno + 1);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
delete[] tmp;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
init_rptctrl_by_count(LD_info, rpt_cfg_strlists[type]->size());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (int i = 0; i < rpt_cfg_strlists[type]->size(); ++i) {
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
apr_snprintf(buf, sizeof(buf), "%s", rpt_cfg_strlists[type]->at(i).toAscii().constData());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
fill_rptctrl_by_cfg(LD_info, i, buf);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
init_logctrl_by_count(LD_info, log_cfg_strlists[type]->size());
for (int i = 0; i < log_cfg_strlists[type]->size(); ++i) {
apr_snprintf(buf, sizeof(buf), "%s", log_cfg_strlists[type]->at(i).toAscii().constData());
char* tmp = Get_LDevice(ied_usr->dev_type);
if(tmp == NULL){std::cerr << "front read monitor config error!" << std::endl;continue;}
fill_logctrl_by_cfg(LD_info, i, buf, tmp);
delete[] tmp;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ƿ鴦<C6BF><E9B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (QMap<QString, QStringList*>::iterator it1 = log_cfg_strlists.begin(); it1 != log_cfg_strlists.end(); ++it1)
{
delete it1.value();
}
for (QMap<QString, QStringList*>::iterator it2 = rpt_cfg_strlists.begin(); it2 != rpt_cfg_strlists.end(); ++it2)
{
delete it2.value();
}
rpt_cfg_strlists.clear();
log_cfg_strlists.clear();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return APR_SUCCESS;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//̨<>˸<EFBFBD><CBB8>²<EFBFBD><C2B2><EFBFBD>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
std::string LEDGER_UPDATE_DIR = "../etc/ledgerupdate/";
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::list<std::string> find_xml_belong_to_this_process()
{
char prefix[20]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ20<32><30><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sprintf(prefix, "%d_%d", g_node_id, g_front_seg_index); // <20><>g_node_id<69><64>g_front_seg_index<65><78>ʽ<EFBFBD><CABD>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
DIR *dir = opendir(LEDGER_UPDATE_DIR.c_str()); // <20><><EFBFBD><EFBFBD>Ŀ¼
struct dirent *entry;
std::list<std::string> found_files; // <20><><EFBFBD>ڴ洢<DAB4>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (dir == NULL) {
std::cout << "Failed to open directory: " << LEDGER_UPDATE_DIR << std::endl;
return found_files; // <20><><EFBFBD>ؿյ<D8BF>list
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD>Ŀ¼<C4BF>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
while ((entry = readdir(dir)) != NULL) {
std::string filename = entry->d_name;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20>ų<EFBFBD> "." <20><> ".." Ŀ¼
if (filename == "." || filename == "..") {
continue;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::cout << "find" << filename << "in" << LEDGER_UPDATE_DIR << std::endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20>ж<EFBFBD><D0B6>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> prefix <20><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD> .xml
if (filename.find(prefix) == 0 && filename.substr(filename.find_last_of('.') + 1) == "xml") {
std::string full_path = LEDGER_UPDATE_DIR + filename;
found_files.push_back(full_path); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
closedir(dir); // <20>ر<EFBFBD>Ŀ¼
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return found_files; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
// <20><>ȡ<EFBFBD><C8A1>ǩ<EFBFBD>е<EFBFBD>ֵ<EFBFBD><D6B5>ͨ<EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
std::string extract_value(const std::string& data, const std::string& tag) {
size_t start_pos = data.find("<" + tag + ">");
if (start_pos == std::string::npos) return "";
size_t end_pos = data.find("</" + tag + ">", start_pos);
if (end_pos == std::string::npos) return "";
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return data.substr(start_pos + tag.length() + 2, end_pos - start_pos - tag.length() - 2);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD> str_tag <20><> terminal <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void add_terminal_to_trigger_update(trigger_update_xml_t* trigger_update_xml, const std::string& str_tag, const terminal& work_terminal) {
if (str_tag == "add") {
std::cout << "new ledger!!!!"<<std::endl;
if (trigger_update_xml->new_update_num < MAX_UPDATEA_NUM) {
trigger_update_xml->new_updates[trigger_update_xml->new_update_num] = work_terminal;
trigger_update_xml->new_update_num+= 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն˵<D5B6><CBB5><EFBFBD><EFBFBD><EFBFBD>
} else {
std::cerr << "Exceeded MAX_UPDATEA_NUM limit for new updates!" << std::endl;
}
}
else if (str_tag == "modify") {
std::cout << "modify ledger!!!"<<std::endl;
if (trigger_update_xml->modify_update_num < MAX_UPDATEA_NUM) {
trigger_update_xml->modify_updates[trigger_update_xml->modify_update_num] = work_terminal;
trigger_update_xml->modify_update_num+= 1; // <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8>ն˵<D5B6><CBB5><EFBFBD><EFBFBD><EFBFBD>
} else {
std::cerr << "Exceeded MAX_UPDATEA_NUM limit for modify updates!" << std::endl;
}
}
else {
std::cerr << "Unknown tag: " << str_tag << std::endl;
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD> XML <20><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ȡ terminal <20><>Ϣ
void parse_terminal_from_data(trigger_update_xml_t* trigger_update_xml, const std::string& str_tag, const std::string& data) {
terminal work_terminal = {}; // <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal <20><><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
strcpy(work_terminal.terminal_id, extract_value(data, "id").c_str());
strcpy(work_terminal.terminal_code, extract_value(data, "terminalCode").c_str());
strcpy(work_terminal.org_name, extract_value(data, "orgName").c_str());
strcpy(work_terminal.maint_name, extract_value(data, "maintName").c_str());
strcpy(work_terminal.station_name, extract_value(data, "stationName").c_str());
strcpy(work_terminal.tmnl_factory, extract_value(data, "manufacturer").c_str());
strcpy(work_terminal.tmnl_status, extract_value(data, "status").c_str());
strcpy(work_terminal.dev_type, extract_value(data, "devType").c_str());
strcpy(work_terminal.dev_key, extract_value(data, "devKey").c_str());
strcpy(work_terminal.dev_series, extract_value(data, "series").c_str());
strcpy(work_terminal.processNo, extract_value(data, "processNo").c_str());
strcpy(work_terminal.addr_str, extract_value(data, "ip").c_str());
strcpy(work_terminal.port, extract_value(data, "port").c_str());
strcpy(work_terminal.timestamp, extract_value(data, "updateTime").c_str());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
size_t monitor_pos = 0;
size_t monitor_count = 0;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF> monitorData<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0B4A6> 10 <20><>
while ((monitor_pos = data.find("<monitorData", monitor_pos)) != std::string::npos && monitor_count < 10) {
monitor work_monitor = {}; // <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> monitor <20><><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20>ҵ<EFBFBD><D2B5><EFBFBD>ǰ monitorData <20>Ľ<EFBFBD><C4BD><EFBFBD>λ<EFBFBD><CEBB>
size_t monitor_end_pos = data.find("</monitorData", monitor_pos);
std::string monitor_data = data.substr(monitor_pos, monitor_end_pos - monitor_pos);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֶβ<D6B6><CEB2><EFBFBD><EFBFBD>䵽 work_monitor <20><>
std::string monitor_id = extract_value(monitor_data, "id");
std::string monitor_name = extract_value(monitor_data, "name");
std::string voltage_level = extract_value(monitor_data, "voltageLevel");
std::string terminal_connect = extract_value(monitor_data, "ptType");
std::string line_no = extract_value(monitor_data, "lineNo");
std::string timestamp = extract_value(monitor_data, "timestamp");
std::string terminal_code = extract_value(monitor_data, "terminal_code");
std::string status = extract_value(monitor_data, "status");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD> work_monitor <20>У<EFBFBD><D0A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "N/A"
strcpy(work_monitor.monitor_id, monitor_id.empty() ? "N/A" : monitor_id.c_str());
strcpy(work_monitor.monitor_name, monitor_name.empty() ? "N/A" : monitor_name.c_str());
strcpy(work_monitor.voltage_level, voltage_level.empty() ? "N/A" : voltage_level.c_str());
strcpy(work_monitor.terminal_connect, terminal_connect.empty() ? "N/A" : terminal_connect.c_str());
strcpy(work_monitor.logical_device_seq, line_no.empty() ? "N/A" : line_no.c_str());
strcpy(work_monitor.timestamp, timestamp.empty() ? "N/A" : timestamp.c_str());
strcpy(work_monitor.terminal_code, terminal_code.empty() ? "N/A" : terminal_code.c_str());
strcpy(work_monitor.status, status.empty() ? "N/A" : status.c_str());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1> monitor <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> work_terminal.line[monitor_count]
work_terminal.line[monitor_count] = work_monitor;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
monitor_count++; // <20><><EFBFBD><EFBFBD> monitor <20>ļ<EFBFBD><C4BC><EFBFBD>
monitor_pos = monitor_end_pos; // <20>ƶ<EFBFBD> monitor_pos <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> <monitorData> <20><>λ<EFBFBD><CEBB>
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD> str_tag <20><> terminal <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
add_terminal_to_trigger_update(trigger_update_xml, str_tag, work_terminal);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void parse_ledger_update(trigger_update_xml_t* trigger_update_xml, const std::string& strTag, const std::string& data)
{
std::cout << "record one xml.."<<std::endl;
// <20><><EFBFBD><EFBFBD> strTag <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>
if (strTag == "add" || strTag == "modify") {
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD>Ϣ
parse_terminal_from_data(trigger_update_xml, strTag, data);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}else if (strTag == "delete") {
terminal delete_terminal;
memset(&delete_terminal, 0, sizeof(delete_terminal));
if (strTag == "delete") {
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD>Ϣ
strcpy(delete_terminal.terminal_id, extract_value(data, "id").c_str());
// <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Ϣд<CFA2><D0B4> delete_updates
std::cout << "delete ledger!!!!!"<<std::endl;
if (trigger_update_xml->delete_update_num < MAX_UPDATEA_NUM) {
trigger_update_xml->delete_updates[trigger_update_xml->delete_update_num] = delete_terminal;
trigger_update_xml->delete_update_num += 1; // <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
} else {
std::cerr << "Unsupported strTag: " << strTag << std::endl;
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
int load_ledger_update_from_xml(trigger_update_xml_t* trigger_update_xml, const std::string& xml_fn)
{
std::cout << "start to load one xml.."<<std::endl;
std::ifstream file(xml_fn.c_str()); // <20><><EFBFBD><EFBFBD>XML<4D>ļ<EFBFBD>
if (!file.is_open()) {
std::cerr << "Failed to open file: " << xml_fn << std::endl;
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::string line;
std::stringstream file_content;
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
while (std::getline(file, line)) {
file_content << line << "\n";
}
file.close();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::string content = file_content.str();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD> <ledger_update> <20><>ǩ
size_t ledger_pos = content.find("<ledger_update>");
if (ledger_pos == std::string::npos) {
std::cerr << "ledger_update tag not found!" << std::endl;
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD> <add>, <delete>, <modify> <20><>ǩ
size_t add_pos = content.find("<add>", ledger_pos);
size_t delete_pos = content.find("<delete>", ledger_pos);
size_t modify_pos = content.find("<modify>", ledger_pos);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// ȷ<><C8B7><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6>λ<EFBFBD><CEBB>
size_t target_pos = std::string::npos;
std::string target_tag;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (add_pos != std::string::npos) {
target_pos = add_pos;
target_tag = "add";
} else if (delete_pos != std::string::npos) {
target_pos = delete_pos;
target_tag = "delete";
} else if (modify_pos != std::string::npos) {
target_pos = modify_pos;
target_tag = "modify";
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//û<>ҵ<EFBFBD><D2B5><EFBFBD>ȷ<EFBFBD>ı<EFBFBD>ǩ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
if (target_pos == std::string::npos) {
std::cerr << "No <add>, <delete>, or <modify> tag found!" << std::endl;
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ǩ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>λ<EFBFBD><CEBB>
size_t end_pos = content.find("</" + target_tag + ">", target_pos);
if (end_pos == std::string::npos) {
std::cerr << "Closing </" + target_tag + "> tag not found!" << std::endl;
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><>ȡĿ<C8A1><C4BF><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string target_content = content.substr(target_pos + target_tag.length() + 2, end_pos - (target_pos + target_tag.length() + 2));
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD> <data> <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
size_t data_pos = 0;
while ((data_pos = target_content.find("<terminalData>", data_pos)) != std::string::npos) {
size_t data_end_pos = target_content.find("</terminalData>", data_pos);
if (data_end_pos == std::string::npos) {
std::cerr << "Closing </terminalData> tag not found!" << std::endl;
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::string data_content = target_content.substr(data_pos + 14, data_end_pos - (data_pos + 14));
std::cout << "ledger data_content is " << data_content <<std::endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD>parse_ledger_update<74><65><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
parse_ledger_update(trigger_update_xml, target_tag, data_content);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><terminalData><3E><>ǩ<EFBFBD><C7A9>Ŀǰÿ<C7B0><C3BF><EFBFBD>ļ<EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>̨<EFBFBD><CCA8>
data_pos = data_end_pos + 15;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::cout << "load one xml finish"<<std::endl;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return 0; // <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml)
{
//printf("begin ledger update xml...\n");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::list<std::string> result = find_xml_belong_to_this_process();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (!result.empty()) {
std::cout << "Found XML files:" << std::endl;
for (std::list<std::string>::iterator it = result.begin(); it != result.end(); ++it) {
const std::string& filename = *it;
std::cout << filename << std::endl;
//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>նˣ<D5B6><CBA3>ж<EFBFBD><D0B6>ն<EFBFBD><D5B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
apr_sleep(apr_time_from_sec(1) / 10);
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ݽṹ
if (!load_ledger_update_from_xml(trigger_update_xml, filename)) {
std::cout << "read /etc/ledgerupdate/" << filename << " success..." << std::endl;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>
if (std::remove(filename.c_str()) != 0) {
std::cerr << "Failed to remove file: " << filename << " Error: " << strerror(errno) << std::endl;
return APR_EGENERAL;
}
else{
std::cout << "remove file: " << filename << " success..." << std::endl;
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
else {
//std::cout << "No matching XML files found." << std::endl;//<2F><><EFBFBD>ٲ<EFBFBD><D9B2><EFBFBD>Ҫ<EFBFBD>Ĵ<EFBFBD>ӡ
return APR_EGENERAL;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>سɹ<D8B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
//printf("Modify Update Count: %d\n", trigger_update_xml->modify_update_num);
//printf("Delete Update Count: %d\n", trigger_update_xml->delete_update_num);
//printf("New Update Count: %d\n", trigger_update_xml->new_update_num);
if(trigger_update_xml->modify_update_num || trigger_update_xml->delete_update_num || trigger_update_xml->new_update_num){
printf("ledger update xml have data...\n");
2025-01-16 16:17:01 +08:00
return APR_SUCCESS;
}
2025-04-29 15:05:36 +08:00
else{//<2F><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("ledger update xml no data...\n");
return APR_EGENERAL;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QString THREE_SECS_WEBSERVICE_DIR = QString("../etc/trigger3s/");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString get_3s_trig_fn()
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
QDir directory(THREE_SECS_WEBSERVICE_DIR);
QStringList filters = QStringList() << "*.xml";
QStringList fileNames = directory.entryList(filters, QDir::Files, QDir::Time/*|QDir::Reversed*/);
if (fileNames.size() > 0)
return fileNames.at(0);
else
return "";
}
///////////////////////////////////////////////////////////////
int getValueFromElemAttrStr(QString str)
{
if (str == "true")
return 1;
else if (str == "false")
return 0;
else
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//lnk20241125<32><35><EFBFBD>Ӵ<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/////////////////////////////////////////////////////////////////////////////////////////////////
// <20><>ӡ trigger_t <20><EFBFBD><E1B9B9><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
void print_trigger(const trigger_t& trigger) {
printf(" dev_idx: %d, line_id: %d, real_data: %d, soe_data: %d, limit: %d, count: %d\n",
trigger.dev_idx, trigger.line_id, trigger.real_data, trigger.soe_data, trigger.limit, trigger.count);
}
// <20><>ӡ trigger_3s_xml_t <20><EFBFBD><E1B9B9><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
void print_trigger_3s_xml(const trigger_3s_xml_t& trigger_3s_xml) {
printf("Work Trigger Count: %d\n", trigger_3s_xml.work_trigger_num);
for (int i = 0; i < trigger_3s_xml.work_trigger_num; ++i) {
printf(" Work Trigger [%d]:\n", i + 1);
print_trigger(trigger_3s_xml.work_triggers[i]);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
printf("New Trigger Count: %d\n", trigger_3s_xml.new_trigger_num);
for (int i = 0; i < trigger_3s_xml.new_trigger_num; ++i) {
printf(" New Trigger [%d]:\n", i + 1);
print_trigger(trigger_3s_xml.new_triggers[i]);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
printf("Delete Trigger Count: %d\n", trigger_3s_xml.delete_trigger_num);
for (int i = 0; i < trigger_3s_xml.delete_trigger_num; ++i) {
printf(" Delete Trigger [%d]:\n", i + 1);
print_trigger(trigger_3s_xml.delete_triggers[i]);
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
printf("Modify Trigger Count: %d\n", trigger_3s_xml.modify_trigger_num);
for (int i = 0; i < trigger_3s_xml.modify_trigger_num; ++i) {
printf(" Modify Trigger [%d]:\n", i + 1);
print_trigger(trigger_3s_xml.modify_triggers[i]);
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void parse_3s_trigger(trigger_3s_xml_t* trigger_3s_xml, QString parentTag, QDomElement& trigger_e)
{
QString e_atr("");
trigger_t trigger;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
trigger.dev_idx = trigger_e.attribute("DevSeries").toInt();
trigger.line_id = trigger_e.attribute("Line").toInt();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
e_atr = trigger_e.attribute("RealData").toLower();
trigger.real_data = getValueFromElemAttrStr(e_atr);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
e_atr = trigger_e.attribute("SOEData").toLower();
trigger.soe_data = getValueFromElemAttrStr(e_atr);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
trigger.limit = trigger_e.attribute("Limit").toInt();
trigger.count = trigger_e.attribute("Count").toInt();
//qDebug()<<parentTag << "-> " << dev_idx<<" "<<line_id<<" "<<real_data<<" "<<soe_data <<" " << limit<<" " << count;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (parentTag == "Work") {
trigger_3s_xml->work_triggers[trigger_3s_xml->work_trigger_num++] = trigger;
}
else if (parentTag == "New") {
trigger_3s_xml->new_triggers[trigger_3s_xml->new_trigger_num++] = trigger;
}
else if (parentTag == "Delete") {
trigger_3s_xml->delete_triggers[trigger_3s_xml->delete_trigger_num++] = trigger;
}
else if (parentTag == "Modify") {
trigger_3s_xml->modify_triggers[trigger_3s_xml->modify_trigger_num++] = trigger;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20241125
print_trigger_3s_xml(*trigger_3s_xml);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int load_3s_data_from_xml(trigger_3s_xml_t* trigger_3s_xml, QString xml_fn)
{
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(xml_fn);
if (!file.open(QIODevice::ReadOnly))
return APR_EBADPATH; //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
bool ret = doc.setContent(&file);
file.close();
if (!ret)
return APR_EBADF;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD><DAB5>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ӽڵ<D3BD>
while (!n.isNull()) { //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ㲻Ϊ<E3B2BB><CEAA>
if (n.isElement()) { //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ԫ<EFBFBD><D4AA>
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName();
if (strTag == "Work" || strTag == "New" || strTag == "Delete" || strTag == "Modify") {
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>e<EFBFBD><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
QDomNode node = list.at(i);
if (node.isElement()) {
QDomElement trigger_e = node.toElement();
QString strTag2 = trigger_e.tagName();
if (strTag2 == "Trigger") {
parse_3s_trigger(trigger_3s_xml, strTag, trigger_e);
} //else if ( strTag == "Trigger" )
}
}
2025-01-16 16:17:01 +08:00
}
}
2025-04-29 15:05:36 +08:00
n = n.nextSibling(); //<2F><>һ<EFBFBD><D2BB><EFBFBD>ֵܽڵ<DCBD>
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return APR_SUCCESS;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString BAK_WEBSERVICE_3S_TRIG_COMMAND_XML_FN = THREE_SECS_WEBSERVICE_DIR + "bak_3s_trig_command.txt";
int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml)
{
printf("begin 3s xml...\n");
memset(trigger_3s_xml, 0, sizeof(trigger_3s_xml_t));
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>е<EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/");
load_3s_data_from_xml(trigger_3s_xml, (cfg_dir + THREE_SECS_CONFIG_FN)); //<2F><><EFBFBD><EFBFBD>/Feproject/etc/Trigger3S.xml
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString the_webservice_xml_fn = get_3s_trig_fn();// ../etc/trigger3s/Ŀ¼<C4BF>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>µ<EFBFBD>xml<6D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
printf("the_webservice_xml_fn.size():%d\n",the_webservice_xml_fn.size());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (the_webservice_xml_fn.size() > 4) {//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><CBB5><EFBFBD>ҵ<EFBFBD><D2B5>ļ<EFBFBD>
apr_sleep(apr_time_from_sec(1) / 10);
the_webservice_xml_fn = THREE_SECS_WEBSERVICE_DIR + the_webservice_xml_fn;
load_3s_data_from_xml(trigger_3s_xml, the_webservice_xml_fn);
QFile::remove(BAK_WEBSERVICE_3S_TRIG_COMMAND_XML_FN);
QFile::rename(the_webservice_xml_fn, BAK_WEBSERVICE_3S_TRIG_COMMAND_XML_FN);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
printf("/etc/trigger3s/*.xml success...\n");
2025-01-16 16:17:01 +08:00
return APR_SUCCESS;
}
2025-04-29 15:05:36 +08:00
printf("3s xml fail...\n");
return APR_EGENERAL;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//3s<33><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼д<C2BC><D0B4><EFBFBD>ļ<EFBFBD>
void append_triggers(QDomDocument& doc, QDomElement& root, QString parentTag, trigger_t* trigger, int trigger_num)
{
QString str;
QDomElement funcItem = doc.createElement(parentTag);
root.appendChild(funcItem);
for (int i = 0; i < trigger_num; i++) {
if (trigger[i].dev_idx == INVALID_DEV_IDX)
continue;
if (trigger[i].real_data == 0 && trigger[i].soe_data == 0)
continue;
QDomElement triggerItem = doc.createElement("Trigger");
triggerItem.setAttribute("DevSeries", trigger[i].dev_idx);
triggerItem.setAttribute("Line", trigger[i].line_id);
str = trigger[i].real_data ? "true" : "false";
triggerItem.setAttribute("RealData", str);
str = trigger[i].soe_data ? "true" : "false";
triggerItem.setAttribute("SOEData", str);
triggerItem.setAttribute("Limit", trigger[i].limit);
triggerItem.setAttribute("Count", trigger[i].count);
funcItem.appendChild(triggerItem);
2025-01-16 16:17:01 +08:00
}
}
2025-04-29 15:05:36 +08:00
int create_3s_xml(trigger_3s_xml_t* trigger_3s_xml)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
QDomDocument doc;
doc.appendChild(doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"gb2312\""));
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDomElement root = doc.createElement("Trigger3S");
doc.appendChild(root);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
append_triggers(doc, root, "Work", trigger_3s_xml->work_triggers, trigger_3s_xml->work_trigger_num);
append_triggers(doc, root, "New", trigger_3s_xml->new_triggers, 0);
append_triggers(doc, root, "Delete", trigger_3s_xml->delete_triggers, 0);
append_triggers(doc, root, "Modify", trigger_3s_xml->modify_triggers, 0);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/");
QFile file(cfg_dir + THREE_SECS_CONFIG_FN /*+".bak.xml"*/);
if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) {
return -1;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QTextStream out(&file);
out.setCodec("gb2312");
doc.save(out, 4);
file.close();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return APR_SUCCESS;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD> .cfg <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ʼʱ<CABC><CAB1><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>뼶ʱ<EBBCB6><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// - comtrade_fn<66><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD>ڶ<EFBFBD>λ<EFBFBD><CEBB>Ӧ<EFBFBD><D3A6> .cfg <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// - start_tm<74><6D><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3A9>
// - trig_tm<74><6D><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3A9>
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
// - <20><><EFBFBD><EFBFBD> APR_SUCCESS <20><>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> APR_EBADF <20><>ʾ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int extract_timestamp_from_cfg_file(char* comtrade_fn, long long* start_tm, long long* trig_tm)
{
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡ
QFileInfo fi(QString::fromAscii(comtrade_fn));
QString fn = fi.fileName();
QString cfgFileName_temp = QString("../comtrade/") + fn; // ƴ<><C6B4>.cfg<66>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ƿ<EFBFBD><C7B7><EFBFBD> ".cfg" <20><> ".CFG" <20><>β
if (!cfgFileName_temp.endsWith(".cfg", Qt::CaseInsensitive) && !cfgFileName_temp.endsWith(".CFG", Qt::CaseInsensitive))
return APR_EBADF; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>󣬷<EFBFBD><F3A3ACB7><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
QFile cfgFile_temp(cfgFileName_temp);
if (!cfgFile_temp.exists()) { // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
qDebug() << QString("Cannot find corresponding .cfg file: %1").arg(cfgFileName_temp);
cfgFile_temp.close();
return APR_EBADF;
}
else if (!cfgFile_temp.open(QFile::ReadOnly | QFile::Text)) { // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>
qDebug() << QString("Cannot open file %1:\n%2.").arg(cfgFileName_temp).arg(cfgFile_temp.errorString());
return APR_EBADF;
}
else {
QStringList datContentList_temp;
QTextStream in_temp(&cfgFile_temp); // <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>
// <20><><EFBFBD><EFBFBD> GBK <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EBA3A8>ע<EFBFBD>͵<EFBFBD><CDB5>ˣ<EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString start_time_str(""); // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2>ʼʱ<CABC><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
QString trigger_time_str(""); // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
while (!in_temp.atEnd()) {
QString line_temp = in_temp.readLine().trimmed(); // <20><>ȡ<EFBFBD><C8A1>ȥ<EFBFBD><C8A5><EFBFBD>հ<EFBFBD><D5B0>ַ<EFBFBD>
QString upper_line_temp = line_temp.toUpper(); // ת<><D7AA>Ϊ<EFBFBD><CEAA>д<EFBFBD>ַ<EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1> "ASCII" <20><> "BINARY" <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if ((upper_line_temp == QString("ASCII")) || (upper_line_temp == QString("BINARY")))
break;
else {
// <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ʱ<EFBFBD><CAB1>
start_time_str = trigger_time_str;
trigger_time_str = line_temp;
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> start_time_str <20><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>Ǻ<EFBFBD><C7BA>벿<EFBFBD>֣<EFBFBD>
if (start_time_str.size() > 3)
start_time_str = start_time_str.left(start_time_str.size() - 3);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><> start_time_str ת<><D7AA>Ϊ QDateTime <20><><EFBFBD>󣬲<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>Լ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
QDateTime start_time_dt = QDateTime::fromString(start_time_str, "dd/MM/yyyy,hh:mm:ss.zzz");
*start_tm = start_time_dt.toMSecsSinceEpoch(); // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> start_tm
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ȥ<E4A3A8><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊʱ<CEAA><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (trigger_time_str.size() > 3)
trigger_time_str = trigger_time_str.left(trigger_time_str.size() - 3);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDateTime trigger_time_dt = QDateTime::fromString(trigger_time_str, "dd/MM/yyyy,hh:mm:ss.zzz");
*trig_tm = trigger_time_dt.toMSecsSinceEpoch(); // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> trig_tm
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
cfgFile_temp.close(); // <20>ر<EFBFBD><D8B1>ļ<EFBFBD>
}
return APR_SUCCESS; // <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////////////////////////////////////////////////
//WW 2023-11-01 <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>κŲ<CEBA><C5B2><EFBFBD>int<6E><74><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5>
int parse_file_names_by_fltnum(int fltnum, char* domname, char** filenames, int filenum, int* cfg_idx, int* dat_idx, char* file_base_name, char* file_yyyymm)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
int j;
printf(">>>>>>>>>>>>>>>>>>pares_file_names file list match fltnum=%d", fltnum);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
*cfg_idx = -1;
*dat_idx = -1;
for (j = 0; j < filenum; ++j) {
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
char fileNameTemp[64];
strcpy(fileNameTemp, filenames[j]); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> װ<><D7B0>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
printf(" %s ", fileNameTemp);
if (strstr(fileNameTemp, domname) == NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"PQMonitor_PQM1" <20><><EFBFBD><EFBFBD> װ<><D7B0>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>:"PQMonitor_PQM1_000001_20191121_154534_689.CFG/.DAT/.HDR"<22><><EFBFBD>Ӵ<EFBFBD>
continue;
char* p = strtok(fileNameTemp, "_"); //PQMonitor
p = strtok(NULL, "_"); //PQM1
p = strtok(NULL, "_"); //000001
int nFltNum = atoi(p); //<2F><><EFBFBD>ַ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (nFltNum == fltnum) {
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString fn_str = QString::fromAscii(filenames[j]);
if (fn_str.endsWith(".cfg", Qt::CaseInsensitive) || fn_str.endsWith(".CFG", Qt::CaseInsensitive)) {
//PQMonitor_PQM4_000349_20180531_113701_618.CFG
*cfg_idx = j;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QFileInfo fi(fn_str);
QString fn = fi.baseName();
strcpy(file_base_name, fn.toAscii().data());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString remain_str = fn_str.split(QString::fromAscii(p)).at(1);
QString yyyymm_str = remain_str.mid(1, 6);
strcpy(file_yyyymm, yyyymm_str.toAscii().data());
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
else if (fn_str.endsWith(".dat", Qt::CaseInsensitive) || fn_str.endsWith(".DAT", Qt::CaseInsensitive))
*dat_idx = j;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (*cfg_idx != -1 && *dat_idx != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE>ҵ<EFBFBD>
break;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
printf("\n<<<<<<<<<<<<<<<<<<<<<pares_file_names file list match end cfg_inx=%d dat_idx=%d \n", *cfg_idx, *dat_idx);
if ((*cfg_idx) >= 0 && (*dat_idx) >= 0)
return APR_SUCCESS;
else
return APR_EBADF;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//WW2023-11-01 end
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>////////////////////////////////////////////////////////////////////////////////
void parse_recall(recall_xml_t* recall_xml, QString parentTag, QDomElement& recall_e, char* id)
{
recall_t recall;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
recall.line_id = id;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDateTime start_dt = QDateTime::fromString(recall_e.attribute("StartTime"), "yyyy-MM-dd hh:mm:ss");
recall.start_time = start_dt.toMSecsSinceEpoch() / 1000;
QDateTime end_dt = QDateTime::fromString(recall_e.attribute("EndTime"), "yyyy-MM-dd hh:mm:ss");
recall.end_time = end_dt.toMSecsSinceEpoch() / 1000;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
recall.need_steady = recall_e.attribute("STEADY").toInt();
recall.need_voltage = recall_e.attribute("VOLTAGE").toInt();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
qDebug() << parentTag << "-> " << " " << recall.line_id << " " << recall.need_steady << " " << recall.need_voltage
<< " " << recall.start_time << " " << recall.end_time;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (parentTag == "Work") {
recall_xml->work_recalls[recall_xml->work_recall_num++] = recall;
}
else if (parentTag == "New") {
recall_xml->new_recalls[recall_xml->new_recall_num++] = recall;
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int delete_recall_xml(char* id)
{
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/recall");
QString file_name = QString(subdir) + QString("_") + QString(QString::number(g_front_seg_index, 10)) + QString("_") + QString(id) + QString("_") + QString("*") + QString("_Recall.xml");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//ָ<><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
QDir dir(cfg_dir);
if (!dir.exists()) {
qDebug() << "folder does not exist!";
return false;
}
//ָ<><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>׺<EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QStringList filter(file_name);
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>򣬰<EFBFBD><F2A3ACB0><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>޸<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ
QStringList files = dir.entryList(filter, QDir::Files | QDir::Readable | QDir::NoDotAndDotDot, QDir::Name | QDir::Time);
for (int i = 0; i < files.size(); i++) {//<2F><><EFBFBD>ն<EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>
QString qstrRecallPath = cfg_dir + QString("/") + files[i];
QFile::remove(qstrRecallPath);
}
return APR_SUCCESS;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int parse_recall_xml(recall_xml_t* recall_xml, char* id)
{
2025-04-30 10:22:57 +08:00
2025-04-29 15:05:36 +08:00
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/recall");
QString file_name = QString(subdir) + QString("_") + QString(QString::number(g_front_seg_index, 10)) + QString("_") + QString(id) + QString("_") + QString("*") + QString("_Recall.xml");
//lnk20241225<32><35><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
//ָ<><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
QDir dir(cfg_dir);
if (!dir.exists()) {
qDebug() << "folder does not exist!";
return false;
}
//ָ<><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>׺<EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QStringList filter(file_name);
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>򣬰<EFBFBD><F2A3ACB0><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>޸<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ
QStringList files = dir.entryList(filter, QDir::Files | QDir::Readable | QDir::NoDotAndDotDot, QDir::Name | QDir::Time);
for (int i = 0; i < files.size(); i++) {
QString qstrRecallPath = cfg_dir + QString("/") + files[i];
qDebug() << qstrRecallPath;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDomDocument doc; //<2F>½<EFBFBD>QDomDocument<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>XML<4D>ĵ<EFBFBD>
QFile file(qstrRecallPath);
if (!file.open(QIODevice::ReadOnly))
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
qDebug() << "file.open error";
continue; //<2F><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
bool ret = doc.setContent(&file);
file.close();
if (!ret)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
qDebug() << "doc.setContent error";
continue;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>doc<6F><63>
QDomElement docElem = doc.documentElement(); //<2F><><EFBFBD>ظ<EFBFBD>Ԫ<EFBFBD><D4AA>
QDomNode n = docElem.firstChild(); //<2F><><EFBFBD>ظ<EFBFBD><D8B8>ڵ<EFBFBD><DAB5>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ӽڵ<D3BD>
while (!n.isNull()) { //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ㲻Ϊ<E3B2BB><CEAA>
if (n.isElement()) { //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ԫ<EFBFBD><D4AA>
QDomElement e = n.toElement(); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪԪ<CEAA><D4AA>
QString strTag = e.tagName();
if (strTag == "Work" || strTag == "New") {
QDomNodeList list = e.childNodes(); //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>e<EFBFBD><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>б<EFBFBD>
for (int i = 0; i < list.count(); i++) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
QDomNode node = list.at(i);
if (node.isElement()) {
QDomElement recall_e = node.toElement();
QString strTag2 = recall_e.tagName();
if (strTag2 == "Recall") {
parse_recall(recall_xml, strTag, recall_e, id);
} //else if ( strTag == "Trigger" )
}
2025-01-16 16:17:01 +08:00
}
}
}
2025-04-29 15:05:36 +08:00
n = n.nextSibling(); //<2F><>һ<EFBFBD><D2BB><EFBFBD>ֵܽڵ<DCBD>
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return APR_SUCCESS;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void process_recall_config(recall_xml_t* recall_xml)
{
int i, j;
recall_t* recall;
recall_t* recall_work;
int recall_num;
int need_write_file;
QList<RecallInfo> recallinfo_list_hour; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>-<2D><>СʱΪ<CAB1><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
need_write_file = FALSE;
recall = recall_xml->new_recalls;
recall_num = recall_xml->new_recall_num;
for (i = 0; i < recall_num; i++) {
recall_xml->work_recalls[recall_xml->work_recall_num++] = recall[i];
need_write_file = TRUE;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
recall = recall_xml->work_recalls;
recall_num = recall_xml->work_recall_num;
if (recall_num > 0) {
LD_info_t* LD_info = find_LD_info_only_from_mp_id(recall[0].line_id);
printf("\n recall[0].line_id == %s \n", recall[0].line_id);
printf("\n recall[0].start_time == %d \n", recall[0].start_time);
2025-01-16 16:17:01 +08:00
if (LD_info == NULL || LD_info->read_flag == 0) {
2025-04-29 15:05:36 +08:00
printf("\n recall[0].line_id == NULL \n");
2025-01-16 16:17:01 +08:00
printf("\n Find LD_info == null \n");
}
else {
2025-04-29 15:05:36 +08:00
printf("\n Find LD_info != null \n");
if (LD_info->autorecallflag != 0 || LD_info->autorecallcount == 0) { //
if (LD_info->autorecallcount != 0) {
for (int j = 0; j < LD_info->autorecallcount; j++) {
delete LD_info->autorecall[j];
}
delete LD_info->autorecall;
LD_info->autorecallcount = 0;
}
LD_info->autorecallcount = recall_num;
LD_info->autorecall = new autorecall_t * [recall_num];
for (int j = 0; j < recall_num; j++) {
printf("\n %d ===== %d\n", recall[j].start_time, recall[j].end_time);
LD_info->autorecall[j] = new autorecall_t[1];
LD_info->autorecall[j]->start = recall[j].start_time;
LD_info->autorecall[j]->end = recall[j].end_time;
//lnk20241030<33><30><EFBFBD><EFBFBD><E4B2B9><EFBFBD><EFBFBD>̬<EFBFBD><CCAC>̬<EFBFBD><CCAC>־<EFBFBD><D6BE>ÿ<EFBFBD><C3BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>кܶ<D0BA><DCB6><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼
LD_info->autorecall[j]->need_steady = recall[j].need_steady;
LD_info->autorecall[j]->need_voltage = recall[j].need_voltage;
}
LD_info->autorecallflag = 0;
2025-01-16 16:17:01 +08:00
}
}
}
2025-04-29 15:05:36 +08:00
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
//////////////////////////////////////////////////////////////////////////////////
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void WebSocketThread::run()
{
//if (g_node_id != THREE_SECS_DATA_BASE_NODE_ID)
// return;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
printf("WebSocketThread::run() is called ...... \n");
struct sockaddr_in client_sockaddr;
memset(&client_sockaddr, 0, sizeof(client_sockaddr));
socklen_t address_len = 0;
while (1) {
address_len = sizeof(struct sockaddr_in);
int client_socket = accept(server_socket, (struct sockaddr*)&client_sockaddr, &address_len);
if (client_socket == -1)
{
printf("accept client %s:%d failed,error msg=%s\n\a", inet_ntoa(client_sockaddr.sin_addr), htons(client_sockaddr.sin_port), strerror(errno));
continue;
}
printf("\naccept client %s:%d succes<65><73>address_len= %d<><64>client_socket= %d\n", inet_ntoa(client_sockaddr.sin_addr), htons(client_sockaddr.sin_port), address_len, client_socket);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
char buffer[256];
int iRet = 0;
while (1) {
memset(buffer, 0, sizeof(buffer));
int recvLength = recv(client_socket, buffer, sizeof(buffer), 0);
if (recvLength > 0)
{
iRet = HandleReceiveMessage(client_socket, buffer);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//if (0 != iRet)
// iRet = SendMessageToWeb(client_socket, iRet);
break;
}
else
{
if (errno == EINTR)
continue;
printf("end socket client %d(%s:%d) msg,disconnetc Socket client\n", client_socket, inet_ntoa(client_sockaddr.sin_addr), htons(client_sockaddr.sin_port));
break;
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
close(client_socket);
printf("close socket client %d(%s:%d) \n", client_socket, inet_ntoa(client_sockaddr.sin_addr), htons(client_sockaddr.sin_port));
msleep(1);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
close(server_socket);
return;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
string MatchErrorMessage(int errorCode) //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
string strErrorMessage = "";
switch (errorCode)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
case 0:
strErrorMessage = "success"; //"<22>ɹ<EFBFBD>"
break;
default:
strErrorMessage = "error"; //"<22><><EFBFBD><EFBFBD>";
break;
//case 10002:
// strErrorMessage = "Incorrect message length structure"; //"<22><><EFBFBD>ij<EFBFBD><C4B3>Ƚṹ<C8BD><E1B9B9><EFBFBD><EFBFBD>";
// break;
//case 10003:
// strErrorMessage = "JSON string parsing error"; //"JSON<4F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
// break;
//case 10004:
// strErrorMessage = "Socket handling error"; //"socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣";
// break;
//case 10005:
// strErrorMessage = "The device corresponding to ID was not found"; //"ID<49><44>Ӧ<EFBFBD><D3A6>װ<EFBFBD><D7B0>δ<EFBFBD>ҵ<EFBFBD>";
// break;
//case 10006:
// strErrorMessage = "The monitoring point corresponding to ID has not been found"; //"ID<49><44>Ӧ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ҵ<EFBFBD>";
// break;
//case 10007:
// strErrorMessage = "Wrong parameter passed in"; //"<22><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>쳣";
// break;
//case 10008:
// strErrorMessage = "The same type of operation is being performed"; //"<22><>ͬһ<CDAC><D2BB><EFBFBD>͵IJ<CDB5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>";
// break;
//case 10009:
// strErrorMessage = "The device turned off the corresponding function"; //"װ<>ùر<C3B9><D8B1>˶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>";
// break;
//case 10010:
// strErrorMessage = "The TYPE parameter passed in is exceptional"; //"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TYPE<50><45><EFBFBD><EFBFBD><EFBFBD>쳣";
// break;
//default:
// strErrorMessage = "An unknown error"; //"δ֪<CEB4><D6AA><EFBFBD><EFBFBD>";
// break;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
return strErrorMessage;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int SendMessageToWeb(int socketClient, int iErrorCode) //<2F><>Web Socket<65>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
string strSendJson = "";
char cTemp[8];
string strErrorCode = "";
sprintf(cTemp, "%06d", iErrorCode);
strErrorCode = cTemp;
char sendBuffer[256];
int sendLength = 0;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
string strErrorMessage = MatchErrorMessage(iErrorCode);
//if (2 == Log_Enable)
// printf("<22><><EFBFBD><EFBFBD><EFBFBD>룺%d<><64>ƥ<EFBFBD><EFBFBD><E4B5BD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>%s\n", iErrorCode, strErrorMessage.c_str());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
strSendJson = "{\"errors\":\"" + strErrorMessage + "\",\"status\":\"" + strErrorCode + "\"}";
strcpy(sendBuffer, strSendJson.c_str());
sendLength = send(socketClient, strSendJson.c_str(), strSendJson.length() + 1, 0);
if (-1 == sendLength)
{
printf("server to client[%d] send[%d] message error,error message:%s\n", socketClient, iErrorCode, strSendJson.c_str());
return -1;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//if (1 == Log_Enable)
// printf("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>%d<><64><EFBFBD><EFBFBD>[%d]<5D><>Ϣ<EFBFBD><CFA2>%s\n", socketClient, iErrorCode, sendBuffer);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
return sendLength;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int ExecuteWebCommand(LD_info_t* LD_info, int iType) //ִ<><D6B4>Web Socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
try
{
//if (1 == Log_Enable)
// printf(">>><3E><>·%d<><64>\"%s\"<22><>iType= %d<><64>real_data= %s<><73>soe_data= %s<><73>limit= %d<><64>count= %d\n", LD_info->line_id, LD_info->name,
// iType, 0 == LD_info->real_data ? "False" : "True", 0 == LD_info->soe_data ? "False" : "True", 20, LD_info->count);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (0 == iType || 1 == iType)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
LD_info->count = 0;
if (0 == iType)
{
LD_info->real_data = 1;
LD_info->soe_data = 1;
//if (1 == Log_Enable)
// printf(">>><3E><><EFBFBD><EFBFBD>%d<><64>\"%s\"<22><>iType= %d<><64>real_data= %s<><73>soe_data= %s<><73>limit= %d<><64>count= %d\n", LD_info->line_id, LD_info->name,
// iType, 0 == LD_info->real_data ? "False" : "True", 0 == LD_info->soe_data ? "False" : "True", 20, LD_info->count);
}
else
{
//LD_info->heart_beat = 1;
//if (1 == Log_Enable)
// printf(">>><3E><><EFBFBD><EFBFBD>%d<><64>\"%s\"<22><>iType= %d<><64>real_data= %s<><73>soe_data= %s<><73>limit= %d<><64>count= %d\n", LD_info->line_id, LD_info->name,
// iType, 0 == LD_info->real_data ? "False" : "True", 0 == LD_info->soe_data ? "False" : "True", 20, LD_info->count);
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
if (2 == iType)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
LD_info->real_data = 0;
LD_info->soe_data = 0;
//if (1 == Log_Enable)
// printf(">>>ֹͣ%d<><64>\"%s\"<22><>iType= %d<><64>real_data= %s<><73>soe_data= %s<><73>limit= %d<><64>count= %d\n", LD_info->line_id, LD_info->name,
// iType, 0 == LD_info->real_data ? "False" : "True", 0 == LD_info->soe_data ? "False" : "True", 20, LD_info->count);
2025-01-16 16:17:01 +08:00
}
}
2025-04-29 15:05:36 +08:00
catch (exception& e)
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/ֹͣ<CDA3><D6B9>·%d<><64>\"%s\"ʧ<EFBFBD>ܣ<EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%s\n", LD_info->line_id, LD_info->name, e.what());
return 10004;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
return 10000;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void Get_Recall_Time_Char(char* start_time, char* end_time, QList<RecallInfo>& recallinfo_list_hour) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>ж<EFBFBD>
{
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QDateTime start_dt = QDateTime::fromString(start_time, "yyyy-MM-dd HH:mm:ss");
QDateTime end_dt = QDateTime::fromString(end_time, "yyyy-MM-dd HH:mm:ss");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
long long starttime = start_dt.toMSecsSinceEpoch() / 1000; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1>
long long endtime = end_dt.toMSecsSinceEpoch() / 1000; //<2F><><EFBFBD>н<EFBFBD><D0BD><EFBFBD>ʱ<EFBFBD><CAB1>
QList<long long> timestamp_list; //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>¼ʱ<C2BC><CAB1><EFBFBD><EFBFBD>
QList<RecallInfo> recallinfo_list; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
RecallInfo info;
info.starttime = starttime;
info.endtime = endtime;
recallinfo_list.append(info);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (int i = 0; i < recallinfo_list.size(); i++)
{
//printf("\n %lld ----- %11d\n", recallinfo_list[i].starttime, recallinfo_list[i].endtime);
long long duration = recallinfo_list[i].endtime - recallinfo_list[i].starttime;
long long max_interval = 3600;
for (long long j = 0; j <= duration; j += max_interval)
{
if (j + max_interval > duration) {
long long start = recallinfo_list[i].starttime + j;
long long end = recallinfo_list[i].endtime;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
RecallInfo info;
info.starttime = start;
info.endtime = end;
recallinfo_list_hour.append(info);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
else {
long long start = recallinfo_list[i].starttime + j;
long long end = recallinfo_list[i].starttime + j + max_interval;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
RecallInfo info;
info.starttime = start;
info.endtime = end - 1;
recallinfo_list_hour.append(info);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
int HandleReceiveMessage(int socketClient, char buffer[256]) //<2F><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD>Web Socket<65>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
int iErrorCode = 000000;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
try
{
QString qstrBuffer = QString(QLatin1String(buffer));
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ffe<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>%d<><64>Ϣ<EFBFBD><CFA2>qstrBur= %s\n", socketClient, qstrBuffer.toAscii().data());
cJSON* json_root = cJSON_Parse(qstrBuffer.toUtf8().constData()); //json<6F><6E>ʽ<EFBFBD><CABD><EFBFBD>л<EFBFBD>
if (json_root == NULL) {
return 10000;
}
QString qstrCode = NULL;//<2F><>¼ָ<C2BC><D6B8>
cJSON* json_code = NULL;
cJSON* json_param = NULL;
cJSON* json_program_param = NULL;
cJSON* json_recall_param = NULL;
cJSON* json_wave_param = NULL;
cJSON* json_update_time = NULL;
cJSON* json_node = NULL;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString update_time;
QList<QString> wave_param;
ProgramParam program_param;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
json_code = cJSON_GetObjectItem(json_root, "code"); //<2F><>ȡcode
if (json_code != NULL) {
qstrCode = json_code->valuestring;
}
else {
return 10000;
}
json_param = cJSON_GetObjectItem(json_root, "param"); //<2F><>ȡparam
if (json_param == NULL) {
return 10000;
}
if (qstrCode == "dev_update" || qstrCode == "model_update" || qstrCode == "program_update") {
//<2F><EFBFBD><E8B1B8><EFBFBD>¼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
json_update_time = cJSON_GetObjectItem(json_param, "update_time"); //<2F><>ȡupdate_time
if (json_update_time != NULL) {
update_time = json_update_time->valuestring;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
else if (qstrCode == "manual_wave") {
//<2F>ֶ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
json_wave_param = cJSON_GetObjectItem(json_param, "wave_param"); //<2F><>ȡwave_param
int array_size = cJSON_GetArraySize(json_wave_param); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int i;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (i = 0; i < array_size; i++)
{
json_node = cJSON_GetArrayItem(json_wave_param, i);//array
if (json_node != NULL) {
wave_param.append(json_node->valuestring);
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
else if (qstrCode == "model_update") {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>б<EFBFBD><D0B1>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>ļ<EFBFBD>
json_program_param = cJSON_GetObjectItem(json_param, "program_param"); //<2F><>ȡprogram_param
cJSON* json_temp = NULL;
json_temp = cJSON_GetObjectItem(json_program_param, "terminal_list"); //<2F><>ȡ
int array_size = cJSON_GetArraySize(json_temp); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int i;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (i = 0; i < array_size; i++)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
json_node = cJSON_GetArrayItem(json_temp, i);//array
if (json_node != NULL) {
program_param.terminal_list.append(json_node->valuestring);
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
json_node = cJSON_GetObjectItem(json_program_param, "file_name"); //<2F><>ȡfile_name
if (json_node != NULL) {
program_param.file_name = json_node->valuestring;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
else if (qstrCode == "manual_recall") {//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>е<EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
json_recall_param = cJSON_GetObjectItem(json_param, "recall_param"); //<2F><>ȡrecall_param
cJSON* json_temp = NULL;
int array_size = cJSON_GetArraySize(json_recall_param); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int i;
QList<RecallInfo> recallinfo_list_hour;
char start_time[64];
char end_time[64];
QString mp_id;
for (i = 0; i < array_size; i++)
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
json_temp = cJSON_GetArrayItem(json_recall_param, i);//array
if (json_temp != NULL) {
json_node = cJSON_GetObjectItem(json_temp, "mp_id"); //<2F><>ȡmp_id
if (json_node != NULL) {
mp_id = QString::fromUtf8(json_node->valuestring);
}
if (i == 0) {
json_node = cJSON_GetObjectItem(json_temp, "start"); //<2F><>ȡstart
if (json_node != NULL) {
apr_snprintf(start_time, sizeof(start_time), "%s", json_node->valuestring);//start_time
}
json_node = cJSON_GetObjectItem(json_temp, "end"); //<2F><>ȡend
if (json_node != NULL) {
apr_snprintf(end_time, sizeof(end_time), "%s", json_node->valuestring);//end_time
}
Get_Recall_Time_Char(start_time, end_time, recallinfo_list_hour);
}
for (int j = 0; j < recallinfo_list_hour.size(); j++) {
CJournalRecall jr;
jr.MonitorID = mp_id;
jr.StartTime = QDateTime::fromTime_t(recallinfo_list_hour[j].starttime).toString("yyyy-MM-dd hh:mm:ss");
jr.EndTime = QDateTime::fromTime_t(recallinfo_list_hour[j].endtime).toString("yyyy-MM-dd hh:mm:ss");
jr.STEADY = QString::number(1, 10);//Ĭ<>϶<EFBFBD><CFB6><EFBFBD>1<EFBFBD><31>1<EFBFBD><31>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
jr.VOLTAGE = QString::number(1, 10);
g_StatisticLackList_list_mutex.lock();
g_StatisticLackList.push_back(jr);
g_StatisticLackList_list_mutex.unlock();
}
2025-01-16 16:17:01 +08:00
}
}
2025-04-29 15:05:36 +08:00
}
cJSON_Delete(json_root);
SendMessageToWeb(socketClient, 000000);//<2F><>Ӧweb
}
catch (exception& e)
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>ˣ<EFBFBD>%d<><64><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>%s\n", socketClient, e.what());
return 10004;
}
return 000000;
}
2025-04-30 10:22:57 +08:00
///////////////////////////////////////////////////////////////////////////////////////
2025-04-29 15:05:36 +08:00
void Cout_account_information() {
ied_t* ied = NULL;
int iedno;
LD_info_t* LD_info = NULL;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied = g_node->clients[iedno];
if (ied) {
LD_info_t* LD_info = NULL;
ied_usr_t* ied_usr = GET_IEDEXT_ADDR(ied);
int cpuno;
QString text;//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>pgsql<71><6C><EFBFBD><EFBFBD>
text.append(QString("terminal_code: \"%1\" ,ip:\"%2\" ,port:\"%3\" ,cpucount:\"%4\" ").arg(ied_usr->terminal_code).arg(ied->channel[0].addr_str).arg(ied->channel[0].port).arg(ied->cpucount));
add_comm_log(const_cast<char*>(text.toLocal8Bit().constData()));
for (cpuno = 0; cpuno < ied->cpucount; cpuno++) {
LD_info = &(ied_usr->LD_info[cpuno]);
QString text2;//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>pgsql<71><6C><EFBFBD><EFBFBD>
text2.append(QString("mp_id: \"%1\" terminal_code:\"%2\" ").arg(LD_info->mp_id).arg(LD_info->terminal_code));
add_comm_log(const_cast<char*>(text2.toLocal8Bit().constData()));
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
/// <summary>
/// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>xml
/// </summary>
void DeletcRecallXml() {
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/recall");
QString file_name = QString(subdir) + QString("_") + QString("*") + QString("_Recall.xml");
//ָ<><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
QDir dir(cfg_dir);
if (!dir.exists()) {
qDebug() << "folder does not exist!";
return;
}
QStringList filter(file_name);
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>򣬰<EFBFBD><F2A3ACB0><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>޸<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ
QStringList files = dir.entryList(filter, QDir::Files | QDir::Readable | QDir::NoDotAndDotDot, QDir::Name | QDir::Time);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><EFBFBD><E8B6A8><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>ں<EFBFBD>ʱ<EFBFBD><CAB1>
QDateTime saveDaysAgo = QDateTime::currentDateTime().addDays(-2);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (int i = 0; i < files.size(); i++) {//<2F><><EFBFBD>ն<EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>
QFileInfo fileInfo(dir.filePath(files[i]));
if (fileInfo.lastModified() < saveDaysAgo) {
QFile::remove(fileInfo.absoluteFilePath());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void CreateRecallXml()
{
apr_time_t previousTime = apr_time_now();
long long stamp = static_cast<long long>(previousTime) / 1000000;
QDateTime deltime_Qtime = QDateTime::fromTime_t(stamp);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
g_StatisticLackList_list_mutex.lock();
if (g_StatisticLackList.size() > 0)
{
printf("insert ID_CJournalRecall_Map<61><70>\n");
QMap<QString, QList<CJournalRecall> > ID_CJournalRecall_Map;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
list<CJournalRecall>::iterator sl = g_StatisticLackList.begin();
while (sl != g_StatisticLackList.end())
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
CJournalRecall jr = *sl++;
if (ID_CJournalRecall_Map.contains(jr.MonitorID))
{
ID_CJournalRecall_Map[jr.MonitorID].append(jr);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
else
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
QList<CJournalRecall> TempList;
TempList.append(jr);
ID_CJournalRecall_Map.insert(jr.MonitorID, TempList);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
for (QMap<QString, QList<CJournalRecall> >::iterator it2 = ID_CJournalRecall_Map.begin(); it2 != ID_CJournalRecall_Map.end(); ++it2)
{
QString key2 = it2.key();
QList<CJournalRecall> value2 = it2.value();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
QString cfg_dir = QString("../")/*+QString::fromAscii(subdir)*/ + QString("etc/recall/");
QString qstrRecallPath = cfg_dir + QString(subdir) + QString("_") + QString(QString::number(g_front_seg_index, 10)) + QString("_") + key2 + QString("_") + QString(deltime_Qtime.toString("yyyyMMddhhmmss")) + QString("_Recall.xml");
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
std::string strRecallPath = qstrRecallPath.toStdString();
QFile file(strRecallPath.c_str());
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
printf("<EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>%sʧ<73><CAA7>,<2C>޷<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>\n", qstrRecallPath.toAscii().data());
QMap<QString, QList<CJournalRecall> >().swap(ID_CJournalRecall_Map);
return;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true);
writer.writeStartDocument();
writer.writeStartElement("RecallList");
writer.writeStartElement("Work");
writer.writeEndElement();
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
writer.writeStartElement("New");
while (!value2.isEmpty())
2025-01-16 16:17:01 +08:00
{
2025-04-29 15:05:36 +08:00
CJournalRecall jr = value2.takeFirst();
writer.writeStartElement("Recall");
writer.writeAttribute("MonitorID", jr.MonitorID);
writer.writeAttribute("StartTime", jr.StartTime);
writer.writeAttribute("EndTime", jr.EndTime);
writer.writeAttribute("STEADY", jr.STEADY);
writer.writeAttribute("VOLTAGE", jr.VOLTAGE);
writer.writeEndElement();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndDocument();
file.close();
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
QMap<QString, QList<CJournalRecall> >().swap(ID_CJournalRecall_Map);
}
g_StatisticLackList.clear();
g_StatisticLackList_list_mutex.unlock();
}
///////zw<7A>޸<EFBFBD> 2023-8-30 end
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
/*/////////////////////////////////////////////////////////lnk2024-10-11<31>Ƴ<EFBFBD>sql<71>IJ<EFBFBD><C4B2>Դ<EFBFBD><D4B4><EFBFBD>/////////////////////////////////////////////////////////////*/
std::string intToString(int number) {
if (number == 0) return "0";
std::string str;
bool isNegative = number < 0;
if (isNegative) number = -number;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
while (number > 0) {
str.insert(str.begin(), '0' + (number % 10));
number /= 10;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
if (isNegative) str.insert(str.begin(), '-');
return str;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
otl_datetime parseTimestamp(const std::string timestampStr) {
otl_datetime timestamp;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD><C2A1>ա<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int year, month, day, hour, minute, second;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// ʹ<><CAB9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
std::istringstream ss(timestampStr);
char discard; // <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
ss >> year >> discard >> month >> discard >> day >> hour >> discard >> minute >> discard >> second;
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> otl_datetime
timestamp.year = year;
timestamp.month = month;
timestamp.day = day;
timestamp.hour = hour;
timestamp.minute = minute;
timestamp.second = second;
return timestamp;
}
size_t req_reply_web(void* ptr, size_t size, size_t nmemb, void* stream)
{
string* str = (string*)stream;
(*str).append((char*)ptr, size * nmemb);
return size * nmemb;
}
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
void SendWebAPI_web(const string strUrl, const char* code, char** ptr)
{
// curl<72><6C>ʼ<EFBFBD><CABC>
CURL* curl = curl_easy_init();
// curl<72><6C><EFBFBD><EFBFBD>ֵ
CURLcode res;
if (curl)
{
char url[100];
sprintf(url, "%s?%s", strUrl.c_str(), code);
//printf(">>>json %s\n", url);//<2F><><EFBFBD>ٲ<EFBFBD><D9B2><EFBFBD>Ҫ<EFBFBD>Ĵ<EFBFBD>ӡ
// <20><><EFBFBD><EFBFBD>URL
curl_easy_setopt(curl, CURLOPT_URL, url);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EBBAAF>
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_web);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1>
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
//<2F><><EFBFBD><EFBFBD>header
curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// <20><><EFBFBD><EFBFBD>post<73><74><EFBFBD><EFBFBD>
res = curl_easy_perform(curl);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (res != CURLE_OK) {
printf("web failed res code: ");
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
else {
printf(">>> web return str:%s \n", resPost0.c_str());
2025-01-16 16:17:01 +08:00
2025-04-29 15:05:36 +08:00
*ptr = (char*)malloc(strlen(resPost0.c_str()) + 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9BB><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD>
if (*ptr != NULL) {
strcpy(*ptr, resPost0.c_str());
}
else {
printf("Memory allocation failed!\n");
}
}
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
else
{
printf(">>> web curl init failed");
}
curl_easy_cleanup(curl);
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
2025-01-16 16:17:01 +08:00
/*/////////////////////////////////////////////////////////lnk10-24<32><34><EFBFBD><EFBFBD>web<65>ӿ<EFBFBD><D3BF>޸<EFBFBD>/////////////////////////////////////////////////////////////*/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<6F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>׷<EFBFBD>ӵ<EFBFBD> *ptr <20><>
size_t req_reply_http(void* contents, size_t size, size_t nmemb, void* userp) {
size_t realsize = size * nmemb;
2025-04-02 15:16:11 +08:00
char** responsePtr = (char**)userp;
2025-01-16 16:17:01 +08:00
2025-04-02 15:16:11 +08:00
size_t oldLen = strlen(*responsePtr); // <20><>ǰ<EFBFBD><C7B0><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
char* temp = (char*)realloc(*responsePtr, oldLen + realsize + 1); // +1 <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD> '\0'
2025-01-16 16:17:01 +08:00
if (temp == NULL) {
2025-04-02 15:16:11 +08:00
printf("Memory reallocation failed!\n");
return 0;
2025-01-16 16:17:01 +08:00
}
2025-04-02 15:16:11 +08:00
*responsePtr = temp;
memcpy(*responsePtr + oldLen, contents, realsize); // ֱ<>ӿ<EFBFBD><D3BF><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
(*responsePtr)[oldLen + realsize] = '\0'; // <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
return realsize;
}
void SendJsonAPI_web(const std::string& strUrl, const char* code, const std::string& json, char** ptr) {
CURL* curl = curl_easy_init();
CURLcode res;
// <20><>ʼ<EFBFBD><CABC> *ptr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
*ptr = (char*)malloc(1);
if (*ptr == NULL) {
printf("Memory allocation failed!\n");
return;
}
(*ptr)[0] = '\0'; // Ϊ<><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ա<EFBFBD> strncat <20><><EFBFBD><EFBFBD>
if (curl) {
char url[256];
snprintf(url, sizeof(url), "%s?%s", strUrl.c_str(), code);
2025-02-27 16:28:04 +08:00
//printf(">>>json %s\n", url);//<2F><><EFBFBD>ٲ<EFBFBD><D9B2><EFBFBD>Ҫ<EFBFBD>Ĵ<EFBFBD>ӡ
2025-01-16 16:17:01 +08:00
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_http);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, ptr);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
if (!json.empty()) {
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json.c_str());
}
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
printf("web failed res code: %s\n", curl_easy_strerror(res));
} else {
//printf(">>> web return str: %s \n", *ptr);
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
} else {
printf(">>> web curl init failed\n");
}
}
/*void SendJsonAPI_web(const std::string& strUrl, const char* code, const std::string& json, char** ptr) {
// curl <20><>ʼ<EFBFBD><CABC>
CURL* curl = curl_easy_init();
CURLcode res;
if (curl) {
char url[100];
sprintf(url, "%s?%s", strUrl.c_str(), code);
printf(">>>json %s\n", url);
// <20><><EFBFBD><EFBFBD> URL
curl_easy_setopt(curl, CURLOPT_URL, url);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EBBAAF>
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_web);
// <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
std::string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
// <20><><EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1>
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
if(json != ""){
// <20><><EFBFBD><EFBFBD> HTTP <20><><EFBFBD><EFBFBD>Ϊ POST
curl_easy_setopt(curl, CURLOPT_POST, 1L);
// <20><><EFBFBD><EFBFBD> JSON <20><>ʽ<EFBFBD><CABD> body <20><><EFBFBD><EFBFBD>
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json.c_str());
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
res = curl_easy_perform(curl);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (res != CURLE_OK) {
printf("web failed res code: %s\n", curl_easy_strerror(res));
} else {
printf(">>> web return str: %s \n", resPost0.c_str());
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ沢<DAB4><E6B2A2><EFBFBD>Ʒ<EFBFBD><C6B7>ؽ<EFBFBD><D8BD><EFBFBD>
*ptr = (char*)malloc(resPost0.size() + 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9BB><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD>
if (*ptr != NULL) {
strcpy(*ptr, resPost0.c_str());
} else {
printf("Memory allocation failed!\n");
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
curl_slist_free_all(headers);
} else {
printf(">>> web curl init failed");
}
curl_easy_cleanup(curl);
}*/
// <20><>ӡ terminal_dev_map <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
void printTerminalDevMap(const QMap<QString, terminal_dev*>& terminal_dev_map) {
QMap<QString, terminal_dev*>::const_iterator it;
for (it = terminal_dev_map.constBegin(); it != terminal_dev_map.constEnd(); ++it) {
QString key = it.key();
terminal_dev* dev = it.value();
if (dev) {
qDebug() << "Key:" << key
<< ", Terminal ID:" << QString(dev->terminal_id)
<< ", Terminal Code:" << QString(dev->terminal_code)
<< ", Organization Name:" << QString(dev->org_name)
<< ", Maintenance Name:" << QString(dev->maint_name)
<< ", Station Name:" << QString(dev->station_name)
<< ", Factory:" << QString(dev->tmnl_factory)
<< ", Status:" << QString(dev->tmnl_status)
<< ", Device Type:" << QString(dev->dev_type)
<< ", Device Key:" << QString(dev->dev_key)
<< ", Device Series:" << QString(dev->dev_series)
2025-02-10 17:03:15 +08:00
<< ", Device processNo:" << QString(dev->processNo)
2025-01-16 16:17:01 +08:00
<< ", Address:" << QString(dev->addr_str)
<< ", Port:" << QString(dev->port)
<< ", Timestamp:" << QString(dev->timestamp);
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
for (int i = 0; i < 10; ++i) {
qDebug() << " Monitor ID:" << QString(dev->line[i].monitor_id)
<< ", Terminal Code:" << QString(dev->line[i].terminal_code)
<< ", Monitor Name:" << QString(dev->line[i].monitor_name)
<< ", Logical Device Seq:" << QString(dev->line[i].logical_device_seq)
<< ", Voltage Level:" << QString(dev->line[i].voltage_level)
<< ", Terminal Connect:" << QString(dev->line[i].terminal_connect)
<< ", Timestamp:" << QString(dev->line[i].timestamp)
<< ", Status:" << QString(dev->line[i].status);
}
} else {
qDebug() << "Key:" << key << ", Value is nullptr";
}
}
}
//<2F><>ӡ<EFBFBD><D3A1>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>̨<EFBFBD><CCA8>//////////////////////////////////////////////////////////////////////////
// <20><>ӡ<EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵݹ麯<DDB9><E9BAAF>
void printLedger(const ied_usr_t& ied_usr) {
std::cout << "------------------------------------" << std::endl;
std::cout << "|-- terminal_id: " << ied_usr.terminal_id << std::endl;
std::cout << "|-- dev_index: " << ied_usr.dev_idx << std::endl;
std::cout << "|-- dev_type: " << ied_usr.dev_type << std::endl;
std::cout << "|-- dev_key: " << ied_usr.dev_key << std::endl;
std::cout << "|-- dev_series: " << ied_usr.dev_series << std::endl;
std::cout << "|-- dev_flag: " << ied_usr.dev_flag << std::endl;
std::cout << "|-- last_call_wavelist_time: " << ied_usr.last_call_wavelist_time << std::endl;
std::cout << "|-- org_name: " << ied_usr.org_name << std::endl;
std::cout << "|-- maint_name: " << ied_usr.maint_name << std::endl;
std::cout << "|-- station_name: " << ied_usr.station_name << std::endl;
std::cout << "|-- tmnl_factory: " << ied_usr.tmnl_factory << std::endl;
std::cout << "|-- time: " << ied_usr.time << std::endl;
std::cout << "|-- tmnl_status: " << ied_usr.tmnl_status << std::endl;
std::cout << "|-- terminal_code: " << ied_usr.terminal_code << std::endl;
std::cout << "|-- update_flag: " << ied_usr.update_flag << std::endl;
// <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) {
std::cout << "|-- LD_info[" << i << "]:" << std::endl;
//name
std::cout << " |-- name: " << ied_usr.LD_info[i].name << std::endl;
std::cout << " |-- LD_name: "
<< (strlen(ied_usr.LD_info[i].LD_name) == 0 ? "NA" : ied_usr.LD_info[i].LD_name)
<< std::endl;
std::cout << " |-- read_flag: " << ied_usr.LD_info[i].read_flag << std::endl;
//index
std::cout << " |-- line_id: " << ied_usr.LD_info[i].line_id << std::endl;
//monitorledger
std::cout << " |-- mp_id: " << ied_usr.LD_info[i].mp_id << std::endl;
std::cout << " |-- terminal_code: " << ied_usr.LD_info[i].terminal_code << std::endl;
std::cout << " |-- voltage_level: " << ied_usr.LD_info[i].voltage_level << std::endl;
std::cout << " |-- v_wiring_type: " << ied_usr.LD_info[i].v_wiring_type << std::endl;
std::cout << " |-- time: " << ied_usr.LD_info[i].time << std::endl;
std::cout << " |-- update_flag: " << ied_usr.LD_info[i].update_flag << std::endl;
std::cout << " |-- monitor_status: " << ied_usr.LD_info[i].monitor_status << std::endl;
//count<6E>ݲ<EFBFBD><DDB2><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
std::cout << " |-- rptcount: " << ied_usr.LD_info[i].rptcount << std::endl;
std::cout << " |-- logcount: " << ied_usr.LD_info[i].logcount << std::endl;
//rpt
std::cout << " |-- rptRecvFlag: " << ied_usr.LD_info[i].rptRecvFlag << std::endl;
std::cout << " |-- rptRecvCheckFlag: " << ied_usr.LD_info[i].rptRecvCheckFlag << std::endl;
std::cout << " |-- rptPstRecvFlag: " << ied_usr.LD_info[i].rptPstRecvFlag << std::endl;
std::cout << " |-- rptPstRecvCheckFlag: " << ied_usr.LD_info[i].rptPstRecvCheckFlag << std::endl;
//rtdata
std::cout << " |-- real_data: " << ied_usr.LD_info[i].real_data << std::endl;
std::cout << " |-- soe_data: " << ied_usr.LD_info[i].soe_data << std::endl;
std::cout << " |-- limit: " << ied_usr.LD_info[i].limit << std::endl;
std::cout << " |-- count: " << ied_usr.LD_info[i].count << std::endl;
//RDRE
std::cout << " |-- RDRE_FltNum: " << ied_usr.LD_info[i].RDRE_FltNum << std::endl;
for (int j = 0; j < 256; ++j) {
if (ied_usr.LD_info[i].FltNum[j] != 0) {
std::cout << " |-- FltNum[" << j << "]:" << ied_usr.LD_info[i].FltNum[j] << std::endl;
}
}
//QVVR
std::cout << " |-- qvvr_idx: " << ied_usr.LD_info[i].qvvr_idx << std::endl;
std::cout << " |-- QVVRs:" << std::endl;
for (int j = 0; j < 256; ++j) {
if (ied_usr.LD_info[i].qvvr[j].used_status != 0) {
std::cout << " |-- QVVR[" << j << "]:" << std::endl;
std::cout << " |-- used_status: " << ied_usr.LD_info[i].qvvr[j].used_status << std::endl;
std::cout << " |-- QVVR_start: " << ied_usr.LD_info[i].qvvr[j].QVVR_start << std::endl;
std::cout << " |-- QVVR_type: " << ied_usr.LD_info[i].qvvr[j].QVVR_type << std::endl;
std::cout << " |-- QVVR_time: " << ied_usr.LD_info[i].qvvr[j].QVVR_time << std::endl;
std::cout << " |-- QVVR_PerTime: " << ied_usr.LD_info[i].qvvr[j].QVVR_PerTime << std::endl;
std::cout << " |-- QVVR_Amg: " << ied_usr.LD_info[i].qvvr[j].QVVR_Amg << std::endl;
std::cout << " |-- QVVR_Rptname: " << ied_usr.LD_info[i].qvvr[j].QVVR_Rptname << std::endl;
std::cout << " |-- timestamp: " << ied_usr.LD_info[i].qvvr[j].timestamp << std::endl;
}
}
}
}
std::cout << "------------------------------------" << std::endl;
}
void printLedgerinshell(const ied_usr_t& ied_usr, QIODevice* outputDevice) {
2025-02-21 16:24:41 +08:00
ied_t* ied;
ied = find_ied_from_dev_idx(ied_usr.dev_idx);
2025-03-05 17:47:47 +08:00
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");
2025-02-21 16:24:41 +08:00
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>
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write("|-- dev_port: " + QByteArray(portStr) + "\n");
2025-02-21 16:24:41 +08:00
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>
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
// <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) {
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write("|-- LD_info[" + QByteArray::number(i) + "]:\n");
2025-01-16 16:17:01 +08:00
// name
2025-03-05 17:47:47 +08:00
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: "
2025-01-16 16:17:01 +08:00
+ (strlen(ied_usr.LD_info[i].LD_name) == 0 ? QByteArray("NA") : QByteArray(ied_usr.LD_info[i].LD_name))
+ "\n");
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- read_flag: " + QByteArray::number(ied_usr.LD_info[i].read_flag) + "\n");
2025-01-16 16:17:01 +08:00
// index
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- line_id: " + QByteArray::number(ied_usr.LD_info[i].line_id) + "\n");
2025-01-16 16:17:01 +08:00
// monitorledger
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
// count<6E>ݲ<EFBFBD><DDB2><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
2025-03-07 18:27:03 +08:00
//recall
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- autorecallflag: " + QByteArray::number(ied_usr.LD_info[i].autorecallflag) + "\n");
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- autorecallcount: " + QByteArray::number(ied_usr.LD_info[i].autorecallcount) + "\n");
2025-03-13 16:35:19 +08:00
for (int j = 0;
j < ied_usr.LD_info[i].autorecallcount &&
ied_usr.LD_info[i].autorecall != NULL && // <20><><EFBFBD><EFBFBD> LD_info->autorecall <20><><EFBFBD><EFBFBD>
ied_usr.LD_info[i].autorecall[j] != NULL;
j++)
{
outputDevice->write("\r\x1B[K");
outputDevice->write(" |-- autorecall_t[" + QByteArray::number(j) + "]:\n");
if (ied_usr.LD_info[i].autorecall[j] == NULL) {
outputDevice->write(" |-- [Error] autorecall[j] is NULL\n");
continue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL ָ<><D6B8>
}
outputDevice->write("\r\x1B[K");
outputDevice->write(" |-- start_time: " + QByteArray::number(ied_usr.LD_info[i].autorecall[j]->start) + "\n");
outputDevice->write("\r\x1B[K");
outputDevice->write(" |-- end_time: " + QByteArray::number(ied_usr.LD_info[i].autorecall[j]->end) + "\n");
outputDevice->write("\r\x1B[K");
outputDevice->write(" |-- need_steady: " + QByteArray::number(ied_usr.LD_info[i].autorecall[j]->need_steady) + "\n");
outputDevice->write("\r\x1B[K");
outputDevice->write(" |-- need_voltage: " + QByteArray::number(ied_usr.LD_info[i].autorecall[j]->need_voltage) + "\n");
}
2025-01-16 16:17:01 +08:00
// rpt
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
// rtdata
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
// RDRE
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- RDRE_FltNum: " + QByteArray::number(ied_usr.LD_info[i].RDRE_FltNum) + "\n");
2025-01-16 16:17:01 +08:00
for (int j = 0; j < 256; ++j) {
if (ied_usr.LD_info[i].FltNum[j] != 0) {
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write(" |-- FltNum[" + QByteArray::number(j) + "]: "
2025-01-16 16:17:01 +08:00
+ QByteArray::number(ied_usr.LD_info[i].FltNum[j]) + "\n");
}
}
// QVVR
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
for (int j = 0; j < 256; ++j) {
2025-03-10 21:26:17 +08:00
if (ied_usr.LD_info[i].qvvr[j].used_status != QVVR_DATA_NOT_USED) {
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
}
}
}
}
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");outputDevice->write("------------------------------------\n");
2025-01-16 16:17:01 +08:00
}
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD>ض<EFBFBD><D8B6>ն<EFBFBD><D5B6><EFBFBD>Ϣ
void ledger(const char* terminal_id, QIODevice* outputDevice) {
2025-03-05 17:47:47 +08:00
outputDevice->write("\r\x1B[K");
2025-02-14 16:44:38 +08:00
outputDevice->write("print ledger in shell");
2025-02-24 16:45:42 +08:00
pthread_mutex_lock(&mtx); std::cout << "ledger()hold lock !!!!!!!!!!!" << std::endl;
2025-01-16 16:17:01 +08:00
bool found = false;
ied_t* ied;
ied_usr_t* ied_usr;
for (int t = 0; t < g_node->n_clients; t++) {
ied = (ied_t*)g_node->clients[t];
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)) {
2025-03-05 17:47:47 +08:00
printLedgerinshell(*ied_usr, outputDevice); // ʹ<><CAB9> QIODevice <20><><EFBFBD><EFBFBD>
2025-02-21 16:24:41 +08:00
//std::cout << "!!! print to log !!!"<< std::endl;
//printLedger(*ied_usr);
2025-03-05 17:47:47 +08:00
if(terminal_id != NULL && strcmp(ied_usr->terminal_id, terminal_id) == 0){
found = true;
}
2025-01-16 16:17:01 +08:00
}
}
}
2025-03-05 17:47:47 +08:00
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");
2025-01-16 16:17:01 +08:00
outputDevice->write(msg); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> QIODevice
}
2025-03-05 17:47:47 +08:00
2025-01-16 16:17:01 +08:00
}
2025-02-10 17:03:15 +08:00
//lnk20250210<31><30>ӡָ<D3A1><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
void value_print(const char *variableName, QTcpSocket *clientSocket) {
char buffer[256]; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>ֵ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
2025-02-24 16:45:42 +08:00
pthread_mutex_lock(&mtx); std::cout << "value_print hold lock !!!!!!!!!!!" << std::endl;
2025-02-10 17:03:15 +08:00
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>ֵ
2025-02-10 17:03:15 +08:00
if (strcmp(variableName, "frontindex") == 0) {
sprintf(buffer, "frontindex = %d", g_front_seg_index); // <20><> int ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-02-10 17:03:15 +08:00
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);
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write(buffer);
}
else if (strcmp(variableName, "iedcount") == 0) {
2025-02-12 16:08:36 +08:00
sprintf(buffer, "g_node->n_clients = %d, ied config count = %d",g_node->n_clients ,IED_COUNT);
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-02-10 17:03:15 +08:00
clientSocket->write(buffer);
} else if (strcmp(variableName, "frontfun") == 0) {
sprintf(buffer, "frontfun = %s", subdir);
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-03-03 18:20:00 +08:00
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);
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-03-03 18:20:00 +08:00
clientSocket->write(buffer);
2025-03-04 17:29:04 +08:00
}else if (strcmp(variableName, "init") == 0) {
sprintf(buffer, "INITFLAG = %d",INITFLAG);
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-03-04 17:29:04 +08:00
clientSocket->write(buffer);
2025-03-03 18:20:00 +08:00
}else {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-02-10 17:03:15 +08:00
clientSocket->write("Unknown variable name\n> ");
}
2025-02-24 16:45:42 +08:00
pthread_mutex_unlock(&mtx); std::cout << "value_print free lock !!!!!!!!!!!" << std::endl;
2025-02-10 17:03:15 +08:00
clientSocket->flush();
}
std::list<std::string>* getLogList(const QString& level) {
if (level == "ERROR") return &errorList;
if (level == "WARN") return &warnList;
if (level == "NORMAL") return &normalList;
if (level == "DEBUG") return &debugList;
return NULL;
}
pthread_mutex_t* getLogMutex(const QString& level) {
if (level == "ERROR") return &errorListMutex;
if (level == "WARN") return &warnListMutex;
if (level == "NORMAL") return &normalListMutex;
if (level == "DEBUG") return &debugListMutex;
return NULL;
}
void Worker::handleViewLogCommand(const QString& command, QTcpSocket* clientSocket) {
QStringList parts = command.split(" ");
if (parts.size() != 2) {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("Usage: viewlog [ERROR|WARN|NORMAL|DEBUG]\n> ");
clientSocket->flush();
return;
}
QString logLevel = parts[1].toUpper();
std::list<std::string>* logList = getLogList(logLevel);
pthread_mutex_t* logMutex = getLogMutex(logLevel);
if (!logList || !logMutex) {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("Invalid log level! Use ERROR, WARN, NORMAL, or DEBUG.\n> ");
clientSocket->flush();
return;
}
stopViewLog = false;
activeClient = clientSocket; // <20><>¼<EFBFBD><C2BC>ǰ shell socket
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
2025-03-06 15:24:49 +08:00
clientSocket->write(QString("Viewing logs for level: %1 (Press '`' to exit)\n> ").arg(logLevel).toUtf8());
clientSocket->flush();
while (!stopViewLog) {
2025-03-06 18:41:48 +08:00
// **1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> ``` <20>˳<EFBFBD>**
if (clientSocket->waitForReadyRead(500)) { // ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QByteArray input = clientSocket->readAll().trimmed();
2025-03-06 18:41:48 +08:00
if (input == "`") { // ? <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> ```<60><><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>־ģʽ
2025-03-06 15:24:49 +08:00
std::cout << "Received '`' from shell socket! Exiting viewlog...\n";
stopViewLog = true;
2025-03-03 18:20:00 +08:00
showinshellflag = false;
break;
}
}
// **2. <20><>ȡ<EFBFBD><C8A1>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>**
pthread_mutex_lock(logMutex);
if (!logList->empty()) {
std::string logEntry = logList->front();
logList->pop_front();
pthread_mutex_unlock(logMutex);
if (!logEntry.empty()) {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write((logEntry + "\n").c_str());
clientSocket->flush();
}
} else {
pthread_mutex_unlock(logMutex);
usleep(500000); // ? <20><>ֹ CPU 100% ռ<><D5BC>
}
}
// **3. <20>˳<EFBFBD> `viewlog`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shell**
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("\nLog view stopped. Returning to shell.\n> ");
clientSocket->flush();
}
2025-01-16 16:17:01 +08:00
//////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> JSON <20>ĺ<EFBFBD><C4BA><EFBFBD> <20><>ǰ<EFBFBD>ö<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
const std::vector<std::string>& codes,
int index,
int num)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>index<65><78><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6>̨<EFBFBD>ˣ<EFBFBD>num<75><6D>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>index<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ҳû<D2B2><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(1 == MULTIPLE_NODE_FLAG){
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
if (num <= 0) {
std::cerr << "Error: 'num' must be greater than 0." << std::endl;
return 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
}
index = index - 1;
if (index < 0 || index >= num) {
std::cerr << "Error: 'index' must be in the range [0, num-1]." << std::endl;
return 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
}
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (codes.empty()) {
std::cerr << "Error: 'codes' vector is empty." << std::endl;
return 1;
}
std::string parm = codes[0];
char* ptr = NULL;
// <20><><EFBFBD><EFBFBD> API <20><><EFBFBD><EFBFBD>
SendJsonAPI_web(WEB_DEVICE, "",parm.c_str(), &ptr);
if (ptr == NULL) {
std::cerr << "Error: Received NULL response from SendJsonAPI_web." << std::endl;
return 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("ptr:%s\n", ptr);
cJSON* root = cJSON_Parse(ptr); //json<6F><6E>ʽ<EFBFBD><CABD><EFBFBD>л<EFBFBD>
int retry = 0;
if (root == NULL) {
printf("web error %s\n", cJSON_GetErrorPtr());
//<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
while(root == NULL){
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ͷ<EFBFBD>֮ǰ<D6AE><C7B0> ptr <20>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ڴ<EFBFBD>й©
if (ptr != NULL) {
free(ptr);
ptr = NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>url<72><6C><EFBFBD><EFBFBD>
//SendJsonAPI_web("http://192.168.1.149:8091/powerQuality/getProperties", parm.c_str(), "",&ptr);
SendJsonAPI_web(WEB_DEVICE, "",parm.c_str(), &ptr);
if(ptr == NULL){
retry++;if(retry>3)break;
continue;
}
root = cJSON_Parse(ptr);
retry++;if(retry>3)break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ȼʧ<C8BB>ܣ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>˳<EFBFBD>ǰ<EFBFBD>ͷ<EFBFBD><CDB7>κ<EFBFBD><CEBA>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if (root == NULL) {
printf("web error %s\n", cJSON_GetErrorPtr());
return 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
}
}
// <20><>ȡ "code" <20><> "msg"
cJSON* codeItem = cJSON_GetObjectItem(root, "code");
cJSON* msgItem = cJSON_GetObjectItem(root, "msg");
// ʹ<><CAB9> std::string <20><>ȡֵ
std::string code = (codeItem != NULL && codeItem->type == cJSON_String) ? codeItem->valuestring : "not found";
std::string msg = (msgItem != NULL && msgItem->type == cJSON_String) ? msgItem->valuestring : "not found";
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
std::cout << "code: " << code << std::endl;
std::cout << "msg: " << msg << std::endl;
// <20><>ȡ "data" <20><><EFBFBD><EFBFBD>
cJSON* data = cJSON_GetObjectItem(root, "data");
if (!data || data->type != cJSON_Array) {
std::cerr << "Error: 'data' is not an array." << std::endl;
cJSON_Delete(root);
free(ptr);
return 1;
}
int data_size = cJSON_GetArraySize(data);
std::cout << "data_size " << data_size << std::endl;
if (data_size == 0) {
std::cerr << "Error: 'data' array is empty." << std::endl;
cJSON_Delete(root);
free(ptr);
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>index<65><78><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>پ<EFBFBD><D9BE>֣<EFBFBD><D6A3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2>жϽ<D0B6><CFBD>̺<EFBFBD>
2025-02-10 17:03:15 +08:00
#if 0
2025-01-16 16:17:01 +08:00
int base_size = 0;
int remainder = 0;
int start_index = 0;
int end_index = data_size;
if(1 == MULTIPLE_NODE_FLAG){
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>ݵĴ<DDB5>С
base_size = data_size / num;
remainder = data_size % num;
// <20><><EFBFBD>㵱ǰ<E3B5B1>ݵ<EFBFBD><DDB5><EFBFBD>ʼ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
start_index = index * base_size + (index < remainder ? index : remainder);
end_index = start_index + base_size + (index < remainder ? 1 : 0);
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
if (end_index > data_size) {
end_index = data_size;
}
}
2025-02-10 17:03:15 +08:00
#endif
int start_index = 0;
int end_index = data_size;
2025-01-16 16:17:01 +08:00
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD><D4AA>
for (int i = start_index; i < end_index; ++i) {
cJSON* item = cJSON_GetArrayItem(data, i);
if (!item || item->type != cJSON_Object) {
std::cerr << "Warning: Invalid item at index " << i << "." << std::endl;
continue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
}
terminal_dev* dev = new terminal_dev();
memset(dev, 0, sizeof(terminal_dev)); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E1B9B9>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
cJSON* id = cJSON_GetObjectItem(item, "id"); // terminal_id
if (id && id->type == cJSON_String) strncpy(dev->terminal_id, id->valuestring, sizeof(dev->terminal_id) - 1);
else strncpy(dev->terminal_id, "N/A", sizeof(dev->terminal_id) - 1);
cJSON* ip = cJSON_GetObjectItem(item, "ip"); // addr_str
if (ip && ip->type == cJSON_String) strncpy(dev->addr_str, ip->valuestring, sizeof(dev->addr_str) - 1);
else strncpy(dev->addr_str, "N/A", sizeof(dev->addr_str) - 1);
cJSON* terminalCode = cJSON_GetObjectItem(item, "name"); // terminal_code
if (terminalCode && terminalCode->type == cJSON_String) strncpy(dev->terminal_code, terminalCode->valuestring, sizeof(dev->terminal_code) - 1);
else strncpy(dev->terminal_code, "N/A", sizeof(dev->terminal_code) - 1);
cJSON* orgName = cJSON_GetObjectItem(item, "org_name"); // org_name
if (orgName && orgName->type == cJSON_String) strncpy(dev->org_name, orgName->valuestring, sizeof(dev->org_name) - 1);
else strncpy(dev->org_name, "N/A", sizeof(dev->org_name) - 1);
cJSON* maintName = cJSON_GetObjectItem(item, "maint_name"); // maint_name
if (maintName && maintName->type == cJSON_String) strncpy(dev->maint_name, maintName->valuestring, sizeof(dev->maint_name) - 1);
else strncpy(dev->maint_name, "N/A", sizeof(dev->maint_name) - 1);
cJSON* stationName = cJSON_GetObjectItem(item, "stationName"); // station_name
if (stationName && stationName->type == cJSON_String) strncpy(dev->station_name, stationName->valuestring, sizeof(dev->station_name) - 1);
else strncpy(dev->station_name, "N/A", sizeof(dev->station_name) - 1);
cJSON* manufacturer = cJSON_GetObjectItem(item, "manufacturer"); // tmnl_factory
if (manufacturer && manufacturer->type == cJSON_String) strncpy(dev->tmnl_factory, manufacturer->valuestring, sizeof(dev->tmnl_factory) - 1);
else strncpy(dev->tmnl_factory, "N/A", sizeof(dev->tmnl_factory) - 1);
cJSON* status = cJSON_GetObjectItem(item, "status"); // tmnl_status
if (status && status->type == cJSON_String) strncpy(dev->tmnl_status, status->valuestring, sizeof(dev->tmnl_status) - 1);
else strncpy(dev->tmnl_status, "N/A", sizeof(dev->tmnl_status) - 1);
cJSON* devType = cJSON_GetObjectItem(item, "devType"); // dev_type
if (devType && devType->type == cJSON_String) strncpy(dev->dev_type, devType->valuestring, sizeof(dev->dev_type) - 1);
else strncpy(dev->dev_type, "N/A", sizeof(dev->dev_type) - 1);
cJSON* devKey = cJSON_GetObjectItem(item, "devKey"); // dev_key
if (devKey && devKey->type == cJSON_String) strncpy(dev->dev_key, devKey->valuestring, sizeof(dev->dev_key) - 1);
else strncpy(dev->dev_key, "N/A", sizeof(dev->dev_key) - 1);
cJSON* series = cJSON_GetObjectItem(item, "series"); // dev_series
if (series && series->type == cJSON_String) strncpy(dev->dev_series, series->valuestring, sizeof(dev->dev_series) - 1);
else strncpy(dev->dev_series, "N/A", sizeof(dev->dev_series) - 1);
2025-02-10 17:03:15 +08:00
//lnk20250210̨<30>˽<EFBFBD><CBBD>̺<EFBFBD>
cJSON* processNo = cJSON_GetObjectItem(item, "processNo"); // processNoתΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
if (processNo && processNo->type == cJSON_Number) snprintf(dev->processNo, sizeof(dev->processNo), "%d", processNo->valueint);
else strncpy(dev->processNo, "N/A", sizeof(dev->processNo) - 1);
2025-01-16 16:17:01 +08:00
cJSON* port = cJSON_GetObjectItem(item, "port"); // port
if (port && port->type == cJSON_String) strncpy(dev->port, port->valuestring, sizeof(dev->port) - 1);
else strncpy(dev->port, "N/A", sizeof(dev->port) - 1);
cJSON* updateTime = cJSON_GetObjectItem(item, "updateTime"); // timestamp
if (updateTime && updateTime->type == cJSON_String) strncpy(dev->timestamp, updateTime->valuestring, sizeof(dev->timestamp) - 1);
else strncpy(dev->timestamp, "N/A", sizeof(dev->timestamp) - 1);
// <20><><EFBFBD><EFBFBD> monitorData <20><><EFBFBD><EFBFBD>
cJSON* monitorData = cJSON_GetObjectItem(item, "monitorData");
if (monitorData && monitorData->type == cJSON_Array) {
int j = 0;
cJSON* monitorItem;
cJSON_ArrayForEach(monitorItem, monitorData) {
if (j >= 10){
std::cout << "һ<EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << std::endl;
break; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>10<31><30>
}
cJSON* monitor_id = cJSON_GetObjectItem(monitorItem, "id"); // monitor_id
if (monitor_id && monitor_id->type == cJSON_String) strncpy(dev->line[j].monitor_id, monitor_id->valuestring, sizeof(dev->line[j].monitor_id) - 1);
else strncpy(dev->line[j].monitor_id, "N/A", sizeof(dev->line[j].monitor_id) - 1);
cJSON* monitor_name = cJSON_GetObjectItem(monitorItem, "name"); // monitor_name
if (monitor_name && monitor_name->type == cJSON_String) strncpy(dev->line[j].monitor_name, monitor_name->valuestring, sizeof(dev->line[j].monitor_name) - 1);
else strncpy(dev->line[j].monitor_name, "N/A", sizeof(dev->line[j].monitor_name) - 1);
cJSON* lineNo = cJSON_GetObjectItem(monitorItem, "lineNo"); // logical_device_seq
if (lineNo && lineNo->type == cJSON_String) strncpy(dev->line[j].logical_device_seq, lineNo->valuestring, sizeof(dev->line[j].logical_device_seq) - 1);
else strncpy(dev->line[j].logical_device_seq, "N/A", sizeof(dev->line[j].logical_device_seq) - 1);
cJSON* voltageLevel = cJSON_GetObjectItem(monitorItem, "voltageLevel"); // voltage_level
if (voltageLevel && voltageLevel->type == cJSON_String) strncpy(dev->line[j].voltage_level, voltageLevel->valuestring, sizeof(dev->line[j].voltage_level) - 1);
else strncpy(dev->line[j].voltage_level, "N/A", sizeof(dev->line[j].voltage_level) - 1);
cJSON* ptType = cJSON_GetObjectItem(monitorItem, "ptType"); // terminal_connect
if (ptType && ptType->type == cJSON_String) strncpy(dev->line[j].terminal_connect, ptType->valuestring, sizeof(dev->line[j].terminal_connect) - 1);
else strncpy(dev->line[j].terminal_connect, "N/A", sizeof(dev->line[j].terminal_connect) - 1);
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>״̬
cJSON* monitorstatus = cJSON_GetObjectItem(monitorItem, "status"); // status
if (monitorstatus && monitorstatus->type == cJSON_String) strncpy(dev->line[j].status, monitorstatus->valuestring, sizeof(dev->line[j].status) - 1);
else strncpy(dev->line[j].status, "N/A", sizeof(dev->line[j].status) - 1);
j++;
}
}
// ׼<><D7BC><EFBFBD><EFBFBD>
QString key = QString(dev->terminal_id);//<2F><>id<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>code<64><65><EFBFBD>֣<EFBFBD><D6A3>е<EFBFBD>code<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
if (terminal_dev_map->contains(key)) {
std::cerr << "Duplicate terminal_code found: " << key.toStdString() << std::endl;
// ɾ<><C9BE><EFBFBD>ɵ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ڴ<EFBFBD>й©
delete terminal_dev_map->value(key);
// <20>Ƴ<EFBFBD><C6B3>ɵļ<C9B5>ֵ<EFBFBD><D6B5>
terminal_dev_map->remove(key);
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD>
2025-02-14 16:44:38 +08:00
if(atoi(dev->processNo) == g_front_seg_index || g_front_seg_index == 0){//lnk20250210ƥ<30><C6A5><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>
2025-02-10 17:03:15 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout<< "process num match" << std::endl;
terminal_dev_map->insert(key, dev);}//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊֻ<CEAA>н<EFBFBD><D0BD>̺<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>index<65><78>¼<EFBFBD>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
} else {
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> terminal_dev <20><><EFBFBD><EFBFBD>
2025-02-14 16:44:38 +08:00
if(atoi(dev->processNo) == g_front_seg_index || g_front_seg_index == 0){//lnk20250210ƥ<30><C6A5><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>
2025-02-10 17:03:15 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout<< "process num match" << std::endl;
terminal_dev_map->insert(key, dev);}//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊֻ<CEAA>н<EFBFBD><D0BD>̺<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>index<65><78>¼<EFBFBD>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//std::cout << "i = " << i << std::endl;
//std::cout << "terminal_dev_map.size:" << terminal_dev_map->size() << std::endl;
}//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EEA3AC>־Ҫ<D6BE><D2AA><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ų<EFBFBD>
}
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ
cJSON_Delete(root);
free(ptr);
return 0; // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ
}
int parse_device_cfg_web()
{
std::cout << "parse_device_cfg_web" << endl;
2025-04-29 15:05:36 +08:00
std::vector<std::string> codes; //<2F><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>
ied_t* ied;
ied_usr_t* ied_usr;
chnl_usr_t* chnl_usr;
int count_cfg = 0; //<2F>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int count_real = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD>˵ļ<CBB5><C4BC><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
//<2F>ӿںϲ<DABA><CFB2><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>web<65>ӿڻ<D3BF>ȡ<EFBFBD>ն<EFBFBD>̨<EFBFBD>˺ͼ<CBBA><CDBC><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
QMap<QString, terminal_dev*> terminal_dev_map;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json
std::string input_jstr = "{";
input_jstr += "\"ip\":\"" + std::string(FRONT_IP) + "\",";
input_jstr += "\"runFlag\":" + TERMINAL_STATUS + "";
input_jstr += "}";
std::cout << "input_jstr: " << input_jstr << std::endl; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
codes.push_back(input_jstr); //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫɸѡ״ֱ̬<CCAC><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
terminal_ledger_web(&terminal_dev_map,codes,g_front_seg_index,g_front_seg_num);
codes.clear();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//printTerminalDevMap(terminal_dev_map);
count_cfg = terminal_dev_map.size();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
std::cout << "terminal_ledger_num:" << count_cfg << std::endl;
2025-01-21 17:48:37 +08:00
g_node->n_clients = count_cfg;
//<2F><><EFBFBD><EFBFBD>ٵ<EFBFBD>ied<65>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20250121
2025-02-17 16:58:14 +08:00
if(IED_COUNT < count_cfg){ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ܶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><EFBFBD>µı<C2B5><C4B1><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>̣<EFBFBD>IED_COUNTӦ<54><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD>򵥽<EFBFBD><F2B5A5BD><EFBFBD>Ӧ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><CCB2>־<EFBFBD><D6BE>޷<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>
g_node->clients = (ied_t**)apr_pcalloc(g_cfg_pool, count_cfg * sizeof(ied_t*));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
std::cout << "!!!!!!!!!!single process can not add any ledger unless reboot!!!!!!!"<< std::endl;
}
else{
g_node->clients = (ied_t**)apr_pcalloc(g_cfg_pool, IED_COUNT * sizeof(ied_t*));//g_node->clients <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD><D5BC><EFBFBD><E6B4A2> count_cfg <20><> ied_t* <20><><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD><EBA3A8>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3A9><EFBFBD>ǣ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3A9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
2025-01-21 17:48:37 +08:00
//<2F><>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-11 18:23:19 +08:00
for (int k = 0; k < count_cfg; k++){
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "!!!!!!!!!!gnodeindex:" << k << std::endl;
g_node->clients[k] = (ied_t*)apr_pcalloc(g_cfg_pool, sizeof(ied_t));}//ÿ<><C3BF> g_node->clients[k] ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>ģ<EFBFBD>ÿ<EFBFBD><C3BF> ied_t <20><EFBFBD><E1B9B9>ռ<EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4><EFBFBD><E9A3A9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
2025-01-16 16:17:01 +08:00
//<2F><>ȡ<EFBFBD>ն<EFBFBD>̨<EFBFBD>˱<EFBFBD><CBB1>滻Ϊweb<65>ӿ<EFBFBD>
//////////////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try {
char terminal_id[64];
char terminal_code[64];
char org_name[64];
char maint_name[64];
char station_name[64];
char tmnl_factory[64];
char tmnl_status[64];
char dev_type[64];
char dev_key[255];
char dev_series[255];
char addr_str[64];
char port_char[64];
2025-02-10 17:03:15 +08:00
//lnk20250210<31><30><EFBFBD>ӽ<EFBFBD><D3BD>̺<EFBFBD>
char processNo[64];
2025-01-16 16:17:01 +08:00
otl_datetime timestamp;
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QMap<QString, terminal_dev*>::iterator it;
for (it = terminal_dev_map.begin(); it != terminal_dev_map.end(); ++it) {
terminal_dev* value = it.value();
// ȷ<><C8B7> value <20><>Ϊ<EFBFBD><CEAA>
if (value != nullptr) {
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ʋ<EFBFBD>ȡֵ
strncpy(terminal_id, value->terminal_id, sizeof(terminal_id) - 1);
strncpy(terminal_code, value->terminal_code, sizeof(terminal_code) - 1);
strncpy(org_name, value->org_name, sizeof(org_name) - 1);
strncpy(maint_name, value->maint_name, sizeof(maint_name) - 1);
strncpy(station_name, value->station_name, sizeof(station_name) - 1);
strncpy(tmnl_factory, value->tmnl_factory, sizeof(tmnl_factory) - 1);
strncpy(tmnl_status, value->tmnl_status, sizeof(tmnl_status) - 1);
strncpy(dev_type, value->dev_type, sizeof(dev_type) - 1);
strncpy(dev_key, value->dev_key, sizeof(dev_key) - 1);
strncpy(dev_series, value->dev_series, sizeof(dev_series) - 1);
strncpy(addr_str, value->addr_str, sizeof(addr_str) - 1);
strncpy(port_char, value->port, sizeof(port_char) - 1);
2025-02-10 17:03:15 +08:00
strncpy(processNo, value->processNo, sizeof(processNo) - 1);//<2F><><EFBFBD>̺<EFBFBD>
2025-01-16 16:17:01 +08:00
timestamp = parseTimestamp(value->timestamp);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>
ied = g_node->clients[count_real++];
2025-01-21 17:48:37 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));//<2F>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>initpool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
2025-01-16 16:17:01 +08:00
ied->usr_ext = ied_usr;
if (ied_usr == NULL)
return APR_ENOMEM;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;
2025-01-21 17:48:37 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>initpool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
2025-01-16 16:17:01 +08:00
if (ied_usr->LD_info == NULL)
return APR_ENOMEM;
2025-01-21 17:48:37 +08:00
ied_usr->dev_flag = ENABLE;//<2F>ն<EFBFBD><D5B6><EFBFBD>Ч
2025-01-22 17:00:34 +08:00
ied->chncount = 1;//<2F>豸ͨ<E8B1B8>Ŷ˿<C5B6><CBBF><EFBFBD><EFBFBD><EFBFBD>
2025-01-21 17:48:37 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);//ͨ<>Žṹ<C5BD><E1B9B9>g_cfg_pool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC>ն˵<D5B6>ip<69>˿ڵ<CBBF>
2025-01-16 16:17:01 +08:00
ied->channel[0].ied = ied;
ied->channel[0].status = STATUS_BREAKOFF;
ied->cpucount = 0;
if (strlen(terminal_id) != 0) {
apr_snprintf(ied_usr->terminal_id, sizeof(ied_usr->terminal_id), "%s", terminal_id);//terminal_id
cout << "ied_usr->terminal_id:" << ied_usr->terminal_id << endl;
}
if (terminal_code != NULL) {
apr_snprintf(ied_usr->terminal_code, sizeof(ied_usr->terminal_code), "%s", terminal_code);//terminal_code
cout << "ied_usr->terminal_code:" << ied_usr->terminal_code << endl;
}
/*<2A><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if (org_name != NULL) {
apr_snprintf(ied_usr->org_name, sizeof(ied_usr->org_name), "%s", org_name);//org_name
cout << "ied_usr->org_name:" << ied_usr->org_name << endl;
}
if (maint_name != NULL) {
apr_snprintf(ied_usr->maint_name, sizeof(ied_usr->maint_name), "%s", maint_name);//maint_name
cout << "ied_usr->maint_name:" << ied_usr->maint_name << endl;
}
if (station_name != NULL) {
apr_snprintf(ied_usr->station_name, sizeof(ied_usr->station_name), "%s", station_name);//station_name
cout << "ied_usr->station_name:" << ied_usr->station_name << endl;
}
*/
if (tmnl_factory != NULL) {
apr_snprintf(ied_usr->tmnl_factory, sizeof(ied_usr->tmnl_factory), "%s", tmnl_factory);//tmnl_factory
cout << "ied_usr->tmnl_factory:" << ied_usr->tmnl_factory << endl;
}
if (tmnl_status != NULL) {
apr_snprintf(ied_usr->tmnl_status, sizeof(ied_usr->tmnl_status), "%s", tmnl_status);//tmnl_status
cout << "ied_usr->tmnl_status:" << ied_usr->tmnl_status << endl;
}
if (dev_type != NULL) {
apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", dev_type);//dev_type
cout << "ied_usr->dev_type:" << ied_usr->dev_type << endl;
}
2025-02-10 17:03:15 +08:00
//lnk20250210̨<30>˽<EFBFBD><CBBD>̺<EFBFBD>
if (processNo != NULL) {
apr_snprintf(ied_usr->processNo, sizeof(ied_usr->processNo), "%s", processNo);//processNo
cout << "ied_usr->processNo:" << ied_usr->processNo << endl;
}
2025-01-16 16:17:01 +08:00
if (dev_series != NULL) {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", dev_series);//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}
else
{
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", "");//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}
if (dev_key != NULL) {
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", dev_key);//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
}
else
{
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", "");//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
}
//lnk20241125ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ied_usr->dev_idx = count_real;
cout << "dev_idx:" << ied_usr->dev_idx << endl;
ied->channel[0].channel_type = CHANNEL_TYPE_IPV4;//channel
ied->channel[0].addr_str[LONGNAME - 1] = 0;//DEV_IP
if (addr_str != NULL) {
ied->channel[0].addr = ntohl(inet_addr(addr_str));//DEV_IP
strncpy(ied->channel[0].addr_str, addr_str, LONGNAME - 1);//DEV_IP
cout << "ied_usr->addr_str:" << ied->channel[0].addr_str << endl;
}
else
{
ied->channel[0].addr = ntohl(inet_addr("0.0.0.0"));//DEV_IP
strncpy(ied->channel[0].addr_str, addr_str, LONGNAME - 1);//DEV_IP
cout << "ied_usr->addr_str:" << ied->channel[0].addr_str << endl;
}
if (port_char != NULL) {
int port = 102;
if (stringToInt(port_char, &port)) {
// ת<><D7AA><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>portStrȫΪ<C8AB><CEAA><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ת<EFBFBD><D7AA>Ϊint<6E><74><EFBFBD>͵<EFBFBD>port
ied->channel[0].port = port;//DEV_PortID
cout << "ied_usr->port:" << ied->channel[0].port << endl;//DEV_PortID
}
else {
ied->channel[0].port = 102;//DEV_PortID
cout << "ied_usr->port:" << port_char << ",<2C>ǺϷ<C7BA><CFB7>˿<EFBFBD>.ʹ<><CAB9>Ĭ<EFBFBD>϶˿<CFB6>:" << ied->channel[0].port << endl;//DEV_PortID
}
}
if (timestamp.year != 0) {
//// <20><><EFBFBD><EFBFBD>struct tm<74><6D><EFBFBD><EFBFBD>
struct tm timeinfo;
timeinfo.tm_year = timestamp.year - 1900; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȥ1900
timeinfo.tm_mon = timestamp.month - 1; // <20>·<EFBFBD><C2B7><EFBFBD>Ҫ<EFBFBD><D2AA>ȥ1
timeinfo.tm_mday = timestamp.day;
timeinfo.tm_hour = timestamp.hour;
timeinfo.tm_min = timestamp.minute;
timeinfo.tm_sec = timestamp.second;
time_t time = std::mktime(&timeinfo);
ied_usr->time = static_cast<long long>(time);
cout << "ied_usr->time:" << ied_usr->time << endl;
}
2025-01-21 17:48:37 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));//<2F><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Žṹ<C5BD><E1B9B9>g_init_pool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4A3BA>չ<EFBFBD><D5B9>¼һЩ<D2BB><D0A9><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
2025-01-16 16:17:01 +08:00
ied->channel[0].connect = chnl_usr;
chnl_usr->chnl = &(ied->channel[0]);
chnl_usr->chnl_id = 0;
chnl_usr->m_state = CHANNEL_DISCONNECTED;
chnl_usr->m_ClosedMsTime = NEXT_CONNECT_TIME * (-1);
g_pt61850app->chnl_counts++;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//std::cout << "value:" << terminal_id <<" "<<terminal_code <<" "<<tmnl_factory <<" "<<dev_series <<" "<<dev_key <<" "<< tmnl_status <<" "<<dev_type <<" "<<addr_str <<" "<<port_char <<" "<< timestamp.year << std::endl;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
LD_info_t line_info;
int count_real_monitor = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵ļ<CBB5><C4BC><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//std::cout << "n_clients:" << g_node->n_clients << std::endl;
if (g_node->n_clients <= 0) {
std::cout << "no terminal exist " << std::endl;
return APR_EBADF;
}
char monitor_id[64];
//char terminal_code[64];
char monitor_name[64];
char logical_device_seq[64];
char voltage_level[64];
char terminal_connect[64];
char monitor_status[64];
//otl_datetime timestamp;
//for (int j = 0; j < 10; ++j) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int j = 0; value->line[j].monitor_id[0] != '\0'; ++j){
ledger_monitor& monitor = value->line[j];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <20>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
/*if (monitor.monitor_id[0] != '\0') {
std::cout << " Monitor ID: " << monitor.monitor_id << std::endl;
std::cout << " Terminal Code: " << monitor.terminal_code << std::endl; //Ӧ<><D3A6>Ϊ<EFBFBD>գ<EFBFBD>json<6F><6E><EFBFBD><EFBFBD>
std::cout << " Monitor Name: " << monitor.monitor_name << std::endl;
std::cout << " Logical Device Seq: " << monitor.logical_device_seq << std::endl;
std::cout << " Voltage Level: " << monitor.voltage_level << std::endl;
std::cout << " Terminal Connect: " << monitor.terminal_connect << std::endl;
std::cout << " Timestamp: " << monitor.timestamp << std::endl; //Ӧ<><D3A6>Ϊ<EFBFBD><CEAA>json<6F><6E><EFBFBD><EFBFBD>
std::cout << " monitor_status: " << monitor.status << std::endl;*/
strncpy(monitor_id, monitor.monitor_id, sizeof(monitor_id) - 1);
//strncpy(terminal_code, monitor.terminal_code, sizeof(terminal_code) - 1); //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ȡ
strncpy(monitor_name, monitor.monitor_name, sizeof(monitor_name) - 1);
strncpy(logical_device_seq, monitor.logical_device_seq, sizeof(logical_device_seq) - 1);
strncpy(voltage_level, monitor.voltage_level, sizeof(voltage_level) - 1);
strncpy(terminal_connect, monitor.terminal_connect, sizeof(terminal_connect) - 1);
//timestamp = parseTimestamp(monitor.timestamp); //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ȡ
strncpy(monitor_status, monitor.status, sizeof(monitor_status) - 1);//<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˴<EFBFBD><CBB4><EFBFBD>
count_real_monitor++;
memset(&line_info, 0, sizeof(line_info));
line_info.line_id = count_real_monitor; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
cout << "line_id:" << line_info.line_id << endl;
strcpy(line_info.mp_id, monitor_id);
cout << "mp_id:" << line_info.mp_id << endl;
strcpy(line_info.terminal_code, terminal_code); //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ն˺<D5B6>
cout << "terminal_code:" << line_info.terminal_code << endl;
if (isCharPtrEmpty(logical_device_seq)) {
line_info.cpuno = 1; //Ĭ<>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>1
cout << "logical_device_seq:is null,set cpuno:"<< line_info.cpuno << endl;
}
else {
line_info.cpuno = std::atoi(logical_device_seq);
cout << "logical_device_seq:"<< line_info.cpuno << endl;
}
//cout << "cpuno:" << line_info.cpuno << endl;
strcpy(line_info.voltage_level, voltage_level);
cout << "voltage_level:" << line_info.voltage_level << endl;
strcpy(line_info.v_wiring_type, terminal_connect);
cout << "v_wiring_type:" << line_info.v_wiring_type << endl;
2025-02-14 16:44:38 +08:00
//lnk2024-8-14<31><34>¼<EFBFBD><C2BC><EFBFBD>߱<EFBFBD>־
2025-03-18 11:25:20 +08:00
if (strcmp(line_info.v_wiring_type, "0") != 0)
2025-02-14 16:44:38 +08:00
{
isdelta_flag = 1; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>þ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
cout << "monitor_id" << monitor_id << "v_wiring_type:" << line_info.v_wiring_type << "is delta wiring:" << isdelta_flag << endl;
}
2025-01-16 16:17:01 +08:00
strcpy(line_info.monitor_status, monitor_status);
cout << "monitor_status:" << line_info.monitor_status << endl;
//// <20><><EFBFBD><EFBFBD>struct tm<74><6D><EFBFBD><EFBFBD>
struct tm timeinfo;
timeinfo.tm_year = timestamp.year - 1900; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȥ1900 //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ȡ<EFBFBD><C8A1>timestamp
timeinfo.tm_mon = timestamp.month - 1; // <20>·<EFBFBD><C2B7><EFBFBD>Ҫ<EFBFBD><D2AA>ȥ1
timeinfo.tm_mday = timestamp.day;
timeinfo.tm_hour = timestamp.hour;
timeinfo.tm_min = timestamp.minute;
timeinfo.tm_sec = timestamp.second;
time_t time = std::mktime(&timeinfo);
line_info.time = static_cast<long long>(time);
cout << "time:" << line_info.time << endl;
strcpy(line_info.name, monitor_name);
cout << "name:" << line_info.name << endl;
2025-01-21 17:48:37 +08:00
line_info.read_flag = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
2025-01-16 16:17:01 +08:00
//ied = find_ied_from_dev_code(line_info.terminal_code); //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC>ն<EFBFBD><D5B6>ˣ<EFBFBD><CBA3>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
if (ied && ied->usr_ext && line_info.cpuno && (static_cast<int>(line_info.cpuno) < 10)) {
2025-02-08 17:04:39 +08:00
char str[256]; //256<35><36>С
2025-01-16 16:17:01 +08:00
byte_t cpuno = line_info.cpuno;
2025-02-14 16:44:38 +08:00
cout << "cpuno:" << (int)line_info.cpuno << endl;
2025-01-16 16:17:01 +08:00
cout << "index cpuno:" << cpuno-1 << endl;
ied_usr = (ied_usr_t*)ied->usr_ext;
ied_usr->LD_info[cpuno - 1] = line_info; //cpunoĬ<6F><C4AC><EFBFBD><EFBFBD>1
ied_usr->LD_info[cpuno - 1].ied = ied;
2025-01-21 17:48:37 +08:00
apr_snprintf(str, sizeof(str), "PQMonitorPQM%d", cpuno);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>תΪPQMonitorPQM+<2B>߼<EFBFBD><DFBC><EFBFBD>
2025-02-08 17:04:39 +08:00
//lnk20250208<30><38>ʹ<EFBFBD><CAB9>apr_pstrdup<75><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD>
//ied_usr->LD_info[cpuno - 1].LD_name = apr_pstrdup(g_init_pool, str);//<2F><> str <20>еĸ<D0B5>ʽ<EFBFBD><CABD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ڴ<EFBFBD><DAB4><EFBFBD> g_init_pool <20>С<EFBFBD>ied_usr->LD_info[cpuno - 1].LD_name <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>LD_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PQMonitorPQM{cpuno} <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
// <20><> g_init_pool <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>̶<EFBFBD> 256 <20>ֽڵ<D6BD><DAB5>ڴ<EFBFBD>
2025-02-12 16:08:36 +08:00
ied_usr->LD_info[cpuno - 1].LD_name = (char *)apr_palloc(g_init_pool, 256);
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(ied_usr->LD_info[cpuno - 1].LD_name, 0, 256);
2025-02-08 17:04:39 +08:00
// <20><> str <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD>Ԥ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><E0B8B4> 256 <20>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-12 16:08:36 +08:00
apr_cpystrn(ied_usr->LD_info[cpuno - 1].LD_name, str, 256);
2025-02-08 17:04:39 +08:00
2025-01-21 17:48:37 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied_usr->LD_info[cpuno - 1].ht_fcd = apr_hash_make(g_init_pool); //<2F><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֱ<EFBFBD>Ϊ ied_usr->LD_info[cpuno - 1] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ht_fcd <20><> ht_full_fcda<64><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿յĹ<D5B5>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>apr_hash_make(g_init_pool) <20><><EFBFBD><EFBFBD> g_init_pool <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD>
ied_usr->LD_info[cpuno - 1].ht_full_fcda = apr_hash_make(g_init_pool);//<2F><><EFBFBD>ǵ<EFBFBD> key ֵ<><D6B5> value <20>ں<EFBFBD><DABA><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>п<EFBFBD><D0BF>ܻᱻ<DCBB><E1B1BB><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
ied_usr->LD_info[cpuno - 1].rptcount = 0;
cout << "rptcount:" << ied_usr->LD_info[cpuno - 1].rptcount << endl;
if (cpuno > ied->cpucount) {
ied->cpucount = cpuno;
}
}
//}
}
}
}
2025-01-21 17:48:37 +08:00
//////////////////////////////////////////////////////////////////////////////////////////////////
2025-01-16 16:17:01 +08:00
if (count_real < count_cfg)
g_node->n_clients = count_real;
if (count_cfg != count_real)
return APR_EBADF;
cout << "dev init create count:" << count_real;
return APR_SUCCESS;
}
catch (otl_exception& e)
{
2025-04-30 10:22:57 +08:00
printf("\n device error,ERROR code= %d,msg= %s \n", e.code, e.msg);
2025-01-16 16:17:01 +08:00
return e.code;
}
}
int parse_model_web(QMap<QString, icd_model*>* icd_model_map,const std::vector<std::string>& codes)
{
std::string parm = codes[0]; //װ<><D7B0><EFBFBD>ͺ<EFBFBD><CDBA>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ʽ["<22>ͺ<EFBFBD>1","<22>ͺ<EFBFBD>2"...]
char* ptr=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>url<72><6C><EFBFBD><EFBFBD>
//SendJsonAPI_web("http://192.168.1.149:8091/powerQuality/getProperties", parm.c_str(), "",&ptr);
SendJsonAPI_web(WEB_ICD,"",parm.c_str(),&ptr);
// <20><><EFBFBD><EFBFBD> ptr <20>Ƿ<EFBFBD>Ϊ NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD> std::string <20><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7>
if (ptr == NULL) {
// <20><><EFBFBD><EFBFBD> ptr Ϊ NULL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "Error: Received NULL response"<< std::endl;
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("ptr:%s\n",ptr);
cJSON* root = cJSON_Parse(ptr); //json<6F><6E>ʽ<EFBFBD><CABD><EFBFBD>л<EFBFBD>
int retry = 0;
if (root == NULL) {
printf("web error %s\n", cJSON_GetErrorPtr());
//<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
while(root == NULL){
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ͷ<EFBFBD>֮ǰ<D6AE><C7B0> ptr <20>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ڴ<EFBFBD>й©
if (ptr != NULL) {
free(ptr);
ptr = NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>url<72><6C><EFBFBD><EFBFBD>
//SendJsonAPI_web("http://192.168.1.149:8091/powerQuality/getProperties", parm.c_str(), "",&ptr);
SendJsonAPI_web(WEB_ICD,"",parm.c_str(),&ptr);
if(ptr == NULL){
retry++;if(retry>3)break;
continue;
}
root = cJSON_Parse(ptr);
retry++;if(retry>3)break;
}
if (root == NULL) {
printf("web error %s\n", cJSON_GetErrorPtr());
return 1;
}
}
cJSON* codeItem = cJSON_GetObjectItem(root, "code");
cJSON* msgItem = cJSON_GetObjectItem(root, "msg");
// ʹ<><CAB9> std::string <20><>ȡֵ
std::string code = (codeItem != NULL) ? codeItem->valuestring : "not found";
std::string msg = (msgItem != NULL) ? msgItem->valuestring : "not found";
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
std::cout << "code: " << code << std::endl;
std::cout << "msg: " << msg << std::endl;
cJSON* data = cJSON_GetObjectItem(root, "data");
if (data && data->type == cJSON_Array) {
cJSON* item;
cJSON_ArrayForEach(item, data) {
icd_model* model = new icd_model;
cJSON* id = cJSON_GetObjectItem(item, "id");//model_id
if (id && id->type == cJSON_String) strncpy(model->model_id, id->valuestring, sizeof(model->model_id) - 1);
cJSON* fileName = cJSON_GetObjectItem(item, "fileName");//file_name
if (fileName && fileName->type == cJSON_String) strncpy(model->file_name, fileName->valuestring, sizeof(model->file_name) - 1);
cJSON* filePath = cJSON_GetObjectItem(item, "filePath");//<2F><><EFBFBD><EFBFBD>
if (filePath && filePath->type == cJSON_String) strncpy(model->file_path, filePath->valuestring, sizeof(model->file_path) - 1);
cJSON* devType = cJSON_GetObjectItem(item, "devType");//tmnl_type
if (devType && devType->type == cJSON_String) strncpy(model->tmnl_type, devType->valuestring, sizeof(model->tmnl_type) - 1);
cJSON* updateTime = cJSON_GetObjectItem(item, "updateTime");//timestamp
if (updateTime && updateTime->type == cJSON_String) strncpy(model->timestamp, updateTime->valuestring, sizeof(model->timestamp) - 1);
// <20><><EFBFBD>ӵ<EFBFBD> QMap
icd_model_map->insert(model->model_id, model);
}
}
cJSON_Delete(root);
free(ptr); // <20><><EFBFBD><EFBFBD> SendJsonAPI_web <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4>ǵ<EFBFBD><C7B5>ͷ<EFBFBD>
return 0; // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ
}
int parse_model_cfg_web()
{
std::vector<std::string> codes;//<2F><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>
QMap<QString, icd_model*> icd_model_map;
/////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//codes.push_back("code1=model1"); //<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>ͺ<EFBFBD><CDBA>б<EFBFBD>
//ʹ<><CAB9><EFBFBD>ж<EFBFBD><D0B6>ͺ<EFBFBD><CDBA>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<6F>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
ied_t* ied;
ied_usr_t* ied_usr;
std::cout << "g_node->n_clients" << g_node->n_clients << std::endl;
std::set<std::string> devTypes; // <20><><EFBFBD><EFBFBD>ȥ<EFBFBD>صļ<D8B5><C4BC><EFBFBD>set
for (int t = 0; t < g_node->n_clients; t++) {
ied = (ied_t*)g_node->clients[t];
ied_usr = (ied_usr_t*)ied->usr_ext;
// <20><><EFBFBD><EFBFBD> dev_type <20><>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EBBCAF> ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5>
if (strlen(ied_usr->dev_type) > 0) {
devTypes.insert(std::string(ied_usr->dev_type));
}
}
// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD> JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
std::string input_jstr = "[";
bool first = true; // <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (std::set<std::string>::iterator it = devTypes.begin(); it != devTypes.end(); ++it) {
if (!first) {
input_jstr += ","; // <20><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
}
first = false; // <20><>һ<EFBFBD><D2BB>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
input_jstr += "\"" + *it + "\""; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
}
input_jstr += "]"; // <20><><EFBFBD><EFBFBD> JSON <20><><EFBFBD><EFBFBD>
std::cout << "input_jstr: " << input_jstr << std::endl; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(ICD_FLAG == "1"){
codes.push_back(input_jstr); //<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>ͺ<EFBFBD><CDBA>б<EFBFBD>-<2D><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>icd<63><64><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
}
else{
codes.push_back("[]"); //<2F><><EFBFBD><EFBFBD>-<2D><>ȡ<EFBFBD><C8A1><EFBFBD>е<EFBFBD>icd<63><64><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
}
/////////////////////////////////////////////////////////////////////////
parse_model_web(&icd_model_map,codes);
codes.clear();
try {
char model_id[64];
char tmnl_type[64];
//char tmnl_factory[64];
char file_name[128];
char file_path[128];
//char timestamp[64];
otl_datetime timestamp;
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QMap<QString, icd_model*>::iterator it;
for (it = icd_model_map.begin(); it != icd_model_map.end(); ++it) {
icd_model* value = it.value();
// ȷ<><C8B7> value <20><>Ϊ<EFBFBD><CEAA>
if (value != nullptr) {
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ʋ<EFBFBD>ȡֵ
strncpy(model_id, value->model_id, sizeof(model_id) - 1);
strncpy(tmnl_type, value->tmnl_type, sizeof(tmnl_type) - 1);
strncpy(file_path, value->file_path, sizeof(file_path) - 1);
strncpy(file_name, value->file_name, sizeof(file_name) - 1);
//strncpy(timestamp, value->timestamp, sizeof(timestamp) - 1);
std::cout << "model_id" << model_id << std::endl;
std::cout << "tmnl_type" << tmnl_type << std::endl;
std::cout << "filepath" << file_path << std::endl;
std::cout << "filename" << file_name << std::endl;
//lnk20241125<32><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//strncpy(tmnl_type, "PS_NET", sizeof(tmnl_type) - 1);
Set_xml_databaseinfo(model_id, tmnl_type, file_path, file_name, timestamp.year, timestamp.month, timestamp.day, timestamp.hour, timestamp.minute, timestamp.second);
}
}
return APR_SUCCESS;
}
catch (otl_exception& e)
{
2025-04-30 10:22:57 +08:00
printf("\n icd model error,ERROR code= %d,msg= %s \n", e.code, e.msg);
2025-01-16 16:17:01 +08:00
return e.code;
}
}
2025-01-17 17:10:18 +08:00
////////////////////////////////////////////////////////////icdģ<64><C4A3><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>lnk20250116
char* parse_model_cfg_web_one(ied_t* ied)
{
std::vector<std::string> codes;//<2F><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>
QMap<QString, icd_model*> icd_model_map;
ied_usr_t* ied_usr;
ied_usr = (ied_usr_t*)ied->usr_ext;
// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD> JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
std::string input_jstr = "[";
input_jstr += "\"" + std::string(ied_usr->dev_type) + "\"";
input_jstr += "]"; // <20><><EFBFBD><EFBFBD> JSON <20><><EFBFBD><EFBFBD>
std::cout << "input_jstr: " << input_jstr << std::endl; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
codes.push_back(input_jstr); //<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>ͺ<EFBFBD><CDBA>б<EFBFBD>-<2D><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>icd<63><64><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
parse_model_web(&icd_model_map,codes);
codes.clear();
try {
char model_id[64];
char tmnl_type[64];
char file_name[128];
char file_path[128];
otl_datetime timestamp;//<2F><>ʹ<EFBFBD><CAB9>
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QMap<QString, icd_model*>::iterator it;
for (it = icd_model_map.begin(); it != icd_model_map.end(); ++it) {
icd_model* value = it.value();
// ȷ<><C8B7> value <20><>Ϊ<EFBFBD><CEAA>
if (value != nullptr) {
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ʋ<EFBFBD>ȡֵ
strncpy(model_id, value->model_id, sizeof(model_id) - 1);
strncpy(tmnl_type, value->tmnl_type, sizeof(tmnl_type) - 1);
strncpy(file_path, value->file_path, sizeof(file_path) - 1);
strncpy(file_name, value->file_name, sizeof(file_name) - 1);
std::cout << "model_id" << model_id << std::endl;
std::cout << "tmnl_type" << tmnl_type << std::endl;
std::cout << "filepath" << file_path << std::endl;
std::cout << "filename" << file_name << std::endl;
2025-01-16 16:17:01 +08:00
2025-01-17 17:10:18 +08:00
Set_xml_databaseinfo(model_id, tmnl_type, file_path, file_name, timestamp.year, timestamp.month, timestamp.day, timestamp.hour, timestamp.minute, timestamp.second);
}
}
return model_id;
}
catch (otl_exception& e)
{
2025-04-30 10:22:57 +08:00
printf("\n icd model error,ERROR code= %d,msg= %s \n", e.code, e.msg);
2025-01-17 17:10:18 +08:00
return NULL;
}
}
////////////////////////////////////////////////////////////
2025-01-16 16:17:01 +08:00
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD><CAB1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD>ܣ<EFBFBD>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
void OnTimerThread::run()
{
msleep(10000);
printf("OnTimerThread::run() is called ...... \n");
bool account_update = true;
bool asd = true;
//<2F><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD>ȡ
apr_time_t previousTime = apr_time_now();//
apr_time_exp_t localTime;
apr_time_exp_gmt(&localTime, previousTime);
cout << "Local Time: "
<< localTime.tm_year + 1900 << "-" << localTime.tm_mon + 1 << "-" << localTime.tm_mday << " "
<< localTime.tm_hour << ":" << localTime.tm_min << ":" << localTime.tm_sec
<< endl;
//<2F><><EFBFBD><EFBFBD>ģʽ
if (g_onlyIP[0] != 0)
{
printf("g_onlyIP[0]=!0 ontimer--%s--\n", g_onlyIP);
add_comm_log(const_cast<char*>("g_onlyIP[0]=!0,g_onlyIP is --%s--", g_onlyIP));
}
else
{
printf("g_onlyIP[0] == 0!");
}
int pgflag = 0;
int pgmin = 0;
int mp_num_hour = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector<std::string> codes;
while (1)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʱ<EFBFBD><CAB1>
previousTime = apr_time_now();
apr_time_exp_gmt(&localTime, previousTime);
if (strcmp(subdir, "cfg_stat_data") == 0 || strcmp(subdir, "cfg_newhis_data") == 0) {//̨<>˸<EFBFBD><CBB8><EFBFBD>,<2C><><EFBFBD>ڵ<EFBFBD>,ͨѶ
2025-02-11 18:23:19 +08:00
2025-01-16 16:17:01 +08:00
//<2F><>־<EFBFBD><D6BE>¼
if (mp_num_hour != localTime.tm_hour) {
2025-02-24 16:45:42 +08:00
pthread_mutex_lock(&mtx); std::cout << "ontime hold lock !!!!!!!!!!!" << std::endl;
2025-01-16 16:17:01 +08:00
std::string mp_num_str = "";
mp_num_str.append("connected device count:");
2025-01-21 17:48:37 +08:00
mp_num_str.append(QString::number(FRONT_MP_NUM).toStdString());//<2F><>¼<EFBFBD><C2BC><EFBFBD>ӵļ<D3B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
mp_num_str.append(",g_node clients:");
mp_num_str.append(QString::number(g_node->n_clients).toStdString());
add_comm_log(const_cast<char*>(mp_num_str.c_str()));
mp_num_hour = localTime.tm_hour;
2025-02-24 16:45:42 +08:00
pthread_mutex_unlock(&mtx); std::cout << "ontime free lock !!!!!!!!!!!" << std::endl;
2025-01-16 16:17:01 +08:00
}
2025-04-29 15:05:36 +08:00
}
2025-01-16 16:17:01 +08:00
msleep(1000);
}
printf(">>>OnTimerThread::run() is end!!!\n");
}
//<2F><><EFBFBD><EFBFBD>web<65><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int recall_json_handle(const char* jstr)
{
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>̬/<2F><>̬<EFBFBD><CCAC>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int stat = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int voltage= 0;
try{
std::vector<RecallParam> recallParams;
cJSON* json_root = cJSON_Parse(jstr); //json<6F><6E>ʽ<EFBFBD><CABD><EFBFBD>л<EFBFBD> //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (json_root == NULL) {
std::cout << "json root<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<< std::endl;
return 10000;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (json_root->type == cJSON_Array) {
for (cJSON* item = json_root->child; item != nullptr; item = item->next) {
// <20><>ȡ monitorId <20><><EFBFBD><EFBFBD>
cJSON* monitorIdArray = cJSON_GetObjectItem(item, "monitorId");
cJSON* timeIntervalArray = cJSON_GetObjectItem(item, "timeInterval");
//<2F>ж<EFBFBD>dataType<70>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
cJSON* datatype = cJSON_GetObjectItem(item, "dataType");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
if(monitorIdArray == NULL || timeIntervalArray == NULL || datatype == NULL ){
std::cout << "json<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<< std::endl;
return 10000;
}
if(strcmp(datatype->valuestring, "") != 0)//<2F>ǿ<EFBFBD>
{
stat = (strcmp(datatype->valuestring, "0") == 0) ? 1 : 0;//<2F><>̬
voltage= (strcmp(datatype->valuestring, "1") == 0) ? 1 : 0;//<2F><>̬
}
else //<2F>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
{
stat = 1;
voltage= 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(monitorIdArray != nullptr && monitorIdArray->child != nullptr)std::cout << "monitorIdArray<EFBFBD>ij<EFBFBD>ԱΪ"<< monitorIdArray->child->valuestring << std::endl;
if(monitorIdArray != nullptr && monitorIdArray->child == nullptr)std::cout << "monitorIdArrayû<EFBFBD>г<EFBFBD>Ա"<< std::endl;
//monitorIdArray<61><79><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
if (monitorIdArray != nullptr && monitorIdArray->type == cJSON_Array && timeIntervalArray->type == cJSON_Array && monitorIdArray->child != nullptr) {
// <20><><EFBFBD><EFBFBD> monitorId <20><><EFBFBD><EFBFBD>
for (cJSON* idItem = monitorIdArray->child; idItem != nullptr; idItem = idItem->next) {
QString monitorId = QString(idItem->valuestring);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>20241230<33><30><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>ַDZ<D6B7><C7B1><EFBFBD><EFBFBD>̵ļ<CCB5><C4BC><EFBFBD><EFBFBD><EFBFBD><E3B4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int mppair = 0;
ied_t* ied;
ied_usr_t* ied_usr;
for (int t = 0; t < g_node->n_clients; t++){
ied = (ied_t*)g_node->clients[t];
ied_usr = (ied_usr_t*)ied->usr_ext;
for (int m = 0; m<10; m++){//<2F><><EFBFBD><EFBFBD>10<31><30>
if(strcmp(ied_usr->LD_info[m].mp_id,"") == 0)continue;//<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>
if(strcmp(ied_usr->LD_info[m].mp_id,monitorId.toStdString().c_str()) == 0){//ƥ<><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mppair = 1;
break;//<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
}
if(mppair == 1)break;//<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>ն<EFBFBD>ѭ<EFBFBD><D1AD>
}
if(mppair == 0)continue;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>̵ļ<CCB5><C4BC><EFBFBD><EFBFBD>㶼û<E3B6BC><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD>̵ļ<CCB5><C4BC><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "find mpid:" << monitorId.toStdString() << "in this process,mppair=" << mppair <<std::endl;
// <20><><EFBFBD><EFBFBD> timeInterval <20><><EFBFBD><EFBFBD>
for (cJSON* timeItem = timeIntervalArray->child; timeItem != nullptr; timeItem = timeItem->next) {
QString timeInterval = QString(timeItem->valuestring);
QString start = timeInterval.left(timeInterval.indexOf("~"));
QString end = timeInterval.mid(timeInterval.indexOf("~") + 1);
// <20><><EFBFBD><EFBFBD> RecallParam <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD><D0B1><EFBFBD>
RecallParam param;
param.mp_id = monitorId;
param.start = start;
param.end = end;
param.stat = stat;
param.voltage = voltage;
recallParams.push_back(param);
}
}
}
//monitorIdArrayΪ<79>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
else if (monitorIdArray != nullptr && monitorIdArray->type == cJSON_Array && monitorIdArray->child == nullptr) {
// monitorIdArray Ϊ<><CEAA>
std::cout << "monitorIdArray is null" << std::endl;
//<2F><><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><E3B2B9>
// <20><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
ied_t* ied;
ied_usr_t* ied_usr;
std::cout << "g_node->n_clients" << g_node->n_clients << std::endl;
for (int t = 0; t < g_node->n_clients; t++){
ied = (ied_t*)g_node->clients[t];
ied_usr = (ied_usr_t*)ied->usr_ext;
for (int m = 0; m<10; m++){
if(strcmp(ied_usr->LD_info[m].mp_id,"") == 0)continue;
std::cout << "ied_usr->LD_info[m].mp_id" << m << " "<< ied_usr->LD_info[m].mp_id << std::endl;
QString monitorId = QString(ied_usr->LD_info[m].mp_id);
// <20><><EFBFBD><EFBFBD> timeInterval <20><><EFBFBD><EFBFBD>
for (cJSON* timeItem = timeIntervalArray->child; timeItem != nullptr; timeItem = timeItem->next) {
QString timeInterval = QString(timeItem->valuestring);
QString start = timeInterval.left(timeInterval.indexOf("~"));
QString end = timeInterval.mid(timeInterval.indexOf("~") + 1);
// <20><><EFBFBD><EFBFBD> RecallParam <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD><D0B1><EFBFBD>
RecallParam param;
param.mp_id = monitorId;
param.start = start;
param.end = end;
param.stat = stat;
param.voltage = voltage;
recallParams.push_back(param);
}
}
}
}
else{
std::cout << "monitorIdArray <20><><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>ȷ" << std::endl;
}
}
}
cJSON_Delete(json_root); //web<65><62><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
for (std::vector<RecallParam>::iterator it = recallParams.begin(); it != recallParams.end(); ++it) {
QList<RecallInfo> recallinfo_list_hour;
char start_time[64];
char end_time[64];
QString mp_id;
mp_id = it->mp_id;
apr_snprintf(start_time, sizeof(start_time), "%s", it->start.toStdString().c_str());//start_time
apr_snprintf(end_time, sizeof(end_time), "%s", it->end.toStdString().c_str());//end_time
qDebug() << "mp_id" << mp_id << " " << "start_time" << start_time << " " << "end_time" << " " << "stat" << it->stat << " " << "voltage" << it->voltage<< end_time;
Get_Recall_Time_Char(start_time, end_time, recallinfo_list_hour);
for (int j = 0; j < recallinfo_list_hour.size(); j++) {
CJournalRecall jr;
jr.MonitorID = mp_id;
jr.StartTime = QDateTime::fromTime_t(recallinfo_list_hour[j].starttime).toString("yyyy-MM-dd hh:mm:ss");
jr.EndTime = QDateTime::fromTime_t(recallinfo_list_hour[j].endtime).toString("yyyy-MM-dd hh:mm:ss");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>web<65><62>ȡ
//jr.STEADY = QString::number(1, 10); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//jr.VOLTAGE = QString::number(1, 10);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//std::cout << "stat" << it->stat << "voltage" << it->voltage << std::endl;
jr.STEADY = QString::number(it->stat);
jr.VOLTAGE = QString::number(it->voltage);
g_StatisticLackList_list_mutex.lock();
g_StatisticLackList.push_back(jr);
g_StatisticLackList_list_mutex.unlock();
}
}
}
catch (exception& e)
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%s\n", e.what());
return 10004;
}
return 000000;
}
int rtdata_http(const char* jstr)
{
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef __cplusplus
extern "C" {
#endif
void httprun();
const char* getReceivedData(int fun);
void threadmsgweb(int fun);
bool threadmsghttp(int fun);
#ifdef __cplusplus
}
#endif
#if 0
void RecallJsonResponse(int result) {
char* ptr=NULL;
// <20><><EFBFBD><EFBFBD> JSON <20><><EFBFBD><EFBFBD>
cJSON* json_response = cJSON_CreateObject();
// <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
if(result == 000000){
cJSON_AddStringToObject(json_response, "code", "A0000");
cJSON_AddStringToObject(json_response, "msg", "<EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<EFBFBD>");
}
else{
cJSON_AddStringToObject(json_response, "code", "A0002");
cJSON_AddStringToObject(json_response, "msg", "<EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
}
cJSON_AddNullToObject(json_response, "data"); // <20><><EFBFBD><EFBFBD>Ϊ null
// <20><> JSON <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
char* json_string = cJSON_Print(json_response);
std::cout << json_string << std::endl;
//<2F><><EFBFBD>ͻظ<CDBB><D8B8><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>
SendJsonAPI_web("<EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>", "", json_string ,&ptr);
// <20><><EFBFBD><EFBFBD>
cJSON_Delete(json_response);
free(json_string); // <20>ͷŴ<CDB7>ӡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
}
#endif
void WebhttpThread::run()
{
int ret = 1;
printf("WebhttpThread::run() is called ...... \n");
while(1){
//<2F><><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
if (!threadmsghttp(1) && g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) {//http<74><70><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ,״̬<D7B4><CCAC>Ϊfalse<73><65><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>http<74><70>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̿<DFB3>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
const char* data = getReceivedData(1);//<2F><>http<74><70>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><><D6B8>
std::cout << "recall data cfg:" << data <<std::endl;
2025-02-24 16:45:42 +08:00
pthread_mutex_lock(&mtx); std::cout << "recall http hold lock !!!!!!!!!!!" << std::endl;
2025-01-16 16:17:01 +08:00
ret = recall_json_handle(data);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
2025-02-24 16:45:42 +08:00
pthread_mutex_unlock(&mtx); std::cout << "recall http free lock !!!!!!!!!!!" << std::endl;
2025-01-16 16:17:01 +08:00
threadmsgweb(1);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD>http<74><70>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>Ż<C5BB><E1B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѭ<EFBFBD><D1AD>
}
//3s<33><73><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
if (!threadmsghttp(2) && g_node_id == THREE_SECS_DATA_BASE_NODE_ID) {//http<74><70><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ,״̬<D7B4><CCAC>Ϊfalse<73><65><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>http<74><70>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̿<DFB3>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
const char* data = getReceivedData(2);//<2F><>http<74><70>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><><D6B8>
std::cout << "rt data cfg:" << data <<std::endl;
ret = rtdata_http(data);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
threadmsgweb(2);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD>http<74><70>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>Ż<C5BB><E1B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѭ<EFBFBD><D1AD>
}
}
printf("WebhttpThread::run() is end ...... \n");
}
void httpThread::run()
{
printf("httpThread::run() is called ...... \n");
std::cout << "Server started at" << HTTP_IP << ":" << HTTP_PORT << std::endl;
httprun(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip<69><70><EFBFBD>˿<EFBFBD>10004
printf("httpThread::run() is end ...... \n");
}
// Base64 <20><><EFBFBD><EFBFBD><EBBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ Base64 <20><>ʽ //ʵ<><CAB5>json<6F>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD>
std::string base64_encode(const std::string& in) {
// Base64 <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 64 <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
std::string out; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
int val = 0; // <20><>ǰֵ
int valb = -6; // ֵ<><D6B5>λƫ<CEBB><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼΪ -6
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>ַ<EFBFBD>
for (std::string::const_iterator it = in.begin(); it != in.end(); ++it) {
// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> ASCII ֵ<><D6B5><EFBFBD><EFBFBD> 8 λ<><CEBB><EFBFBD>ӵ<EFBFBD> val <20><>
val = (val << 8) + *it;
valb += 8; // <20><><EFBFBD><EFBFBD>λƫ<CEBB><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ַ<EFBFBD>ռ 8 λ
// <20><> valb <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> 0 ʱ<><CAB1>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9BB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>б<EFBFBD><D0B1><EFBFBD>
while (valb >= 0) {
// <20><> val <20>ĸ<EFBFBD> 6 λת<CEBB><D7AA>Ϊ Base64 <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
out.push_back(base64_chars[(val >> valb) & 0x3F]);
valb -= 6; // ÿ<>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λƫ<CEBB><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 λ
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '=' <20>ַ<EFBFBD>
while (valb > -6) {
out.push_back('=');
valb -= 6; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> '='<27><>λƫ<CEBB><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6 λ
}
return out; // <20><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
}
void handleUploadResponse(const std::string& response, char* wavepath) {
// <20><><EFBFBD><EFBFBD> JSON <20><>Ӧ
cJSON* json_data = cJSON_Parse(response.c_str());
if (json_data == nullptr) {
std::cerr << "Error parsing response: " << cJSON_GetErrorPtr() << std::endl;
return;
}
// <20><>ȡ<EFBFBD>ֶ<EFBFBD>
cJSON* codeItem = cJSON_GetObjectItem(json_data, "code");
cJSON* msgItem = cJSON_GetObjectItem(json_data, "msg");
cJSON* dataItem = cJSON_GetObjectItem(json_data, "data");
if (codeItem && dataItem) {
std::string code = codeItem->valuestring;
std::cout << "Response Code: " << code << std::endl;
std::string msg = (msgItem != NULL) ? msgItem->valuestring : "not found";
std::cout << "Message: " << msg << std::endl;
cJSON* nameItem = cJSON_GetObjectItem(dataItem, "name");
cJSON* fileNameItem = cJSON_GetObjectItem(dataItem, "fileName");
cJSON* urlItem = cJSON_GetObjectItem(dataItem, "url");
if (nameItem && fileNameItem && urlItem) {
std::string name = nameItem->valuestring;
std::string fileName = fileNameItem->valuestring;
std::string url = urlItem->valuestring;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::cout << "File Path: " << name << std::endl;
std::cout << "Uploaded File Name: " << fileName << std::endl;
std::cout << "File URL: " << url << std::endl;
2025-03-11 11:29:24 +08:00
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> '.'
size_t pos = fileName.find_last_of('.');
std::string nameWithoutExt;
if (pos != std::string::npos) {
// <20><>ȡȥ<C8A1><C8A5><EFBFBD><EFBFBD>׺<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
nameWithoutExt = fileName.substr(0, pos);
2025-03-10 21:26:17 +08:00
} else {
2025-03-11 11:29:24 +08:00
// <20><><EFBFBD><EFBFBD>û<EFBFBD>к<EFBFBD>׺<EFBFBD><D7BA>ֱ<EFBFBD><D6B1>ʹ<EFBFBD><CAB9>ԭ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
nameWithoutExt = fileName;
2025-03-10 21:26:17 +08:00
}
2025-03-11 11:29:24 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wavepath
strcpy(wavepath, nameWithoutExt.c_str());
2025-03-10 21:26:17 +08:00
std::cout << "wavepath: " << wavepath << std::endl;
2025-01-16 16:17:01 +08:00
}
} else {
std::cerr << "Error: Missing expected fields in JSON response." << std::endl;
}
// <20>ͷ<EFBFBD> JSON <20><><EFBFBD><EFBFBD>
cJSON_Delete(json_data);
}
//<2F><><EFBFBD><EFBFBD>json<6F><EFBFBD><E1B9B9><EFBFBD>͵ķ<CDB5>ʽ
/*void SendFileWeb(const std::string& strUrl, const char* localpath, const char* cloudpath, char* wavepath) {
// <20>ӱ<EFBFBD><D3B1><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
std::ifstream file(localpath, std::ios::binary);
if (!file) {
std::cerr << "Failed to open file: " << localpath << std::endl;
return;
}
std::ostringstream ss;
ss << file.rdbuf();
std::string fileContent = ss.str();//<2F>ļ<EFBFBD><C4BC><EFBFBD>
std::string encodedFile = base64_encode(fileContent);//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> JSON <20><><EFBFBD><EFBFBD> ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
cJSON* json_root = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "multipartFile", cJSON_CreateString(encodedFile.c_str()));
cJSON_AddItemToObject(json_root, "path", cJSON_CreateString(cloudpath));//Զ<><D4B6>·<EFBFBD><C2B7>
cJSON_AddItemToObject(json_root, "isReserveName", cJSON_CreateBool(true)); // <20><><EFBFBD><EFBFBD>ֵ
char* szjson = cJSON_Print(json_root);
std::cout << ">>> json: " << szjson << std::endl;
// curl <20><>ʼ<EFBFBD><CABC>
CURL* curl = curl_easy_init();
if (curl) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ POST <20><><EFBFBD><EFBFBD>
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curl_slist_append(NULL, "Content-Type: application/json"));
// <20><><EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1>
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
std::string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_web); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EBBAAF>
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "lnk web failed: " << curl_easy_strerror(res) << std::endl;
} else {
std::cout << "lnk web success, response: " << resPost0 << std::endl;
handleUploadResponse(resPost0,wavepath); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
}
// <20><><EFBFBD><EFBFBD>
free(szjson);
} else {
std::cerr << ">>> curl init failed" << std::endl;
}
curl_easy_cleanup(curl);
cJSON_Delete(json_root);
}*/
//<2F><><EFBFBD><EFBFBD>dataform<72><6D><EFBFBD>ͷ<EFBFBD>ʽ
void SendFileWeb(const std::string& strUrl, const char* localpath, const char* cloudpath, char* wavepath) {
// <20><>ʼ<EFBFBD><CABC> curl
CURL* curl = curl_easy_init();
if (curl) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> URL <20><> POST <20><><EFBFBD><EFBFBD>
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_POST, 1);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curl_httppost* formpost = nullptr;
curl_httppost* lastptr = nullptr;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ֶΣ<D6B6>ֱ<EFBFBD>Ӵӱ<D3B4><D3B1><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "file",
CURLFORM_FILE, localpath,
CURLFORM_END);
// <20><><EFBFBD><EFBFBD> `path` <20>ֶ<EFBFBD>
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "path",
CURLFORM_COPYCONTENTS, cloudpath,
CURLFORM_END);
// <20><><EFBFBD><EFBFBD> `isReserveName` <20>ֶ<EFBFBD>
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "isReserveName",
CURLFORM_COPYCONTENTS, "true",
CURLFORM_END);
// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>Ϣ
struct curl_slist* header_list = nullptr;
header_list = curl_slist_append(header_list, "Content-Type: multipart/form-data");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
// <20><><EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1>
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
// <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
std::string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_web);
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "http web failed: " << curl_easy_strerror(res) << std::endl;
} else {
std::cout << "http web success, response: " << resPost0 << std::endl;
handleUploadResponse(resPost0, wavepath); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
}
// <20><><EFBFBD><EFBFBD>
curl_formfree(formpost); // <20>ͷű<CDB7><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
curl_slist_free_all(header_list); // <20>ͷ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>б<EFBFBD>
curl_easy_cleanup(curl);
} else {
std::cerr << ">>> curl init failed" << std::endl;
}
}
void SOEFileWeb(char* localpath,char* cloudpath, char* wavepath)
{
//ʾ<><CABE>ip<69><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʵ<CEAA><CAB5>ip<69><70><EFBFBD><EFBFBD>
SendFileWeb(WEB_FILEUPLOAD,localpath,cloudpath,wavepath);
}
void SOEFileWeb_test()
{
2025-03-11 11:29:24 +08:00
char localpath[128] = {"/FeProject/comtrade/his/PQMonitor_PQM1_000420_20250310_151030_923.cfg"};
char cloudpath[128] = {"/comtrade/192.168.1.105/"};
2025-01-16 16:17:01 +08:00
char wavepath[128] = {""};
SOEFileWeb(localpath,cloudpath,wavepath);
2025-03-11 11:29:24 +08:00
std::cout << "wavepath:" << wavepath << std::endl;
2025-01-16 16:17:01 +08:00
}
/*/////////////////////////////////////////////////////////lnk10-24<32><34><EFBFBD><EFBFBD>web<65>ӿ<EFBFBD><D3BF>޸<EFBFBD>/////////////////////////////////////////////////////////////*/
/*<2A><>װC<D7B0>ɵ<EFBFBD><C9B5>õ<EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>º<EFBFBD><C2BA><EFBFBD> */////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2025-01-21 17:48:37 +08:00
int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_index,int ied_take)
2025-01-16 16:17:01 +08:00
{
chnl_usr_t* chnl_usr = NULL;
ied_usr_t* ied_usr = NULL;
ied_usr = (ied_usr_t*)ied->usr_ext;
// <20><> update[i] <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뵽 ied_usr <20><>
if (strlen(update[i].terminal_id) != 0) {
apr_snprintf(ied_usr->terminal_id, sizeof(ied_usr->terminal_id), "%s", update[i].terminal_id);
printf("ied_usr->terminal_id: %s\n", ied_usr->terminal_id);
}
if (update[i].terminal_code != NULL) {
apr_snprintf(ied_usr->terminal_code, sizeof(ied_usr->terminal_code), "%s", update[i].terminal_code);
printf("ied_usr->terminal_code: %s\n", ied_usr->terminal_code);
}
if (update[i].tmnl_factory != NULL) {
apr_snprintf(ied_usr->tmnl_factory, sizeof(ied_usr->tmnl_factory), "%s", update[i].tmnl_factory);
printf("ied_usr->tmnl_factory: %s\n", ied_usr->tmnl_factory);
}
if (update[i].tmnl_status != NULL) {
apr_snprintf(ied_usr->tmnl_status, sizeof(ied_usr->tmnl_status), "%s", update[i].tmnl_status);
printf("ied_usr->tmnl_status: %s\n", ied_usr->tmnl_status);
}
if (update[i].dev_type != NULL) {
apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", update[i].dev_type);
printf("ied_usr->dev_type: %s\n", ied_usr->dev_type);
}
2025-02-11 18:23:19 +08:00
if (update[i].processNo != NULL) {
apr_snprintf(ied_usr->processNo, sizeof(ied_usr->processNo), "%s", update[i].processNo);
printf("ied_usr->processNo: %s\n", ied_usr->processNo);
}
2025-01-16 16:17:01 +08:00
if (update[i].dev_series != NULL) {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", update[i].dev_series);
printf("ied_usr->dev_series: %s\n", ied_usr->dev_series);
} else {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", ""); // Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
printf("ied_usr->dev_series (default): %s\n", ied_usr->dev_series);
}
if (update[i].dev_key != NULL) {
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", update[i].dev_key);
printf("ied_usr->dev_key: %s\n", ied_usr->dev_key);
} else {
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", ""); // Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
printf("ied_usr->dev_key (default): %s\n", ied_usr->dev_key);
}
2025-01-21 17:48:37 +08:00
2025-01-22 17:00:34 +08:00
ied_usr->dev_idx = terminal_index; //<2F>ն<EFBFBD><D5B6>źţ<C5BA>g_node<64>±<EFBFBD>
2025-01-16 16:17:01 +08:00
printf("dev_idx: %d\n", ied_usr->dev_idx);
2025-01-21 17:48:37 +08:00
2025-01-16 16:17:01 +08:00
ied->channel[0].channel_type = CHANNEL_TYPE_IPV4; // channel
ied->channel[0].addr_str[LONGNAME - 1] = 0; // DEV_IP
if (update[i].addr_str != NULL) {
ied->channel[0].addr = ntohl(inet_addr(update[i].addr_str)); // DEV_IP
strncpy(ied->channel[0].addr_str, update[i].addr_str, LONGNAME - 1); // DEV_IP
printf("ied_usr->addr_str: %s\n", ied->channel[0].addr_str);
} else {
ied->channel[0].addr = ntohl(inet_addr("0.0.0.0")); // DEV_IP
strncpy(ied->channel[0].addr_str, update[i].addr_str, LONGNAME - 1); // DEV_IP
printf("ied_usr->addr_str: %s\n", ied->channel[0].addr_str);
}
if (update[i].port != NULL) {
int port = 102;
if (stringToInt(update[i].port, &port)) {
// ת<><D7AA><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>portStrȫΪ<C8AB><CEAA><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ת<EFBFBD><D7AA>Ϊint<6E><74><EFBFBD>͵<EFBFBD>port
ied->channel[0].port = port; // DEV_PortID
printf("ied_usr->port: %d\n", ied->channel[0].port); // DEV_PortID
} else {
ied->channel[0].port = 102; // DEV_PortID
printf("ied_usr->port: %s, <20>ǺϷ<C7BA><CFB7>˿<EFBFBD>. ʹ<><CAB9>Ĭ<EFBFBD>϶˿<CFB6>: %d\n", update[i].port, ied->channel[0].port); // DEV_PortID
}
}
2025-01-21 17:48:37 +08:00
2025-01-16 16:17:01 +08:00
if (update[i].timestamp != NULL && strlen(update[i].timestamp) > 0) {
// <20><><EFBFBD><EFBFBD>struct tm<74><6D><EFBFBD><EFBFBD>
struct tm timeinfo = {0}; // <20><>ʼ<EFBFBD><CABC>Ϊ0
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽΪ "YYYY-MM-DD HH:MM:SS"
// ʹ<><CAB9>sscanf<6E><66><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ֶ<EFBFBD>
if (sscanf(update[i].timestamp, "%4d-%2d-%2d %2d:%2d:%2d",
&timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday,
&timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec) == 6) {
// <20><><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>1900<30><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
timeinfo.tm_year -= 1900;
// <20>·ݴ<C2B7>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E3A3AC>ȥ1
timeinfo.tm_mon -= 1;
// <20><>tm_isdst<73><74><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ-1<><31><EFBFBD><EFBFBD>mktime<6D>Զ<EFBFBD><D4B6>ж<EFBFBD>
timeinfo.tm_isdst = -1;
// ʹ<><CAB9>mktime<6D><65>struct tmת<6D><D7AA>Ϊtime_t
time_t raw_time = mktime(&timeinfo);
// <20>ж<EFBFBD>mktime<6D>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (raw_time != -1) {
ied_usr->time = (long long)raw_time;
printf("ied_usr->time: %lld\n", ied_usr->time);
} else {
printf("Error: mktime failed.\n");
}
} else {
printf("Error: sscanf failed. Invalid timestamp format.\n");
return -1;
}
}
2025-01-21 17:48:37 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>пռ<D0BF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(!ied_take){
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));
ied->channel[0].connect = chnl_usr;
g_pt61850app->chnl_counts++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
else{
chnl_usr = (chnl_usr_t*)ied->channel[0].connect;
}
2025-01-22 17:00:34 +08:00
chnl_usr->chnl = &(ied->channel[0]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ԭ<EFBFBD><D4AD><EFBFBD>ʹ<EFBFBD><CDB4>ڵģ<DAB5><C4A3>ٸ<EFBFBD>ֵһ<D6B5><D2BB>
2025-01-16 16:17:01 +08:00
chnl_usr->chnl_id = 0;
chnl_usr->m_state = CHANNEL_DISCONNECTED;
chnl_usr->m_ClosedMsTime = NEXT_CONNECT_TIME * (-1);
2025-01-21 17:48:37 +08:00
2025-01-16 16:17:01 +08:00
// <20><> monitorData <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뵽 LD_info <20><>
int count_real_monitor = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵ļ<CBB5><C4BC><EFBFBD><EFBFBD><EFBFBD>
int j;
for (j = 0; j < 10 && update[i].line[j].monitor_id[0] != '\0'; ++j) {
monitor monitor_data = update[i].line[j];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
count_real_monitor++;
2025-01-21 17:48:37 +08:00
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LD_info<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>漰ָ<E6BCB0><D6B8><EFBFBD>IJ<EFBFBD><C4B2>ֶ<EFBFBD>Ϊ<EFBFBD><CEAA>
2025-01-16 16:17:01 +08:00
LD_info_t line_info;
memset(&line_info, 0, sizeof(line_info));
2025-01-21 17:48:37 +08:00
2025-01-16 16:17:01 +08:00
char logical_device_seq[64];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
strncpy(line_info.mp_id, monitor_data.monitor_id, sizeof(line_info.mp_id) - 1);
strncpy(line_info.name, monitor_data.monitor_name, sizeof(line_info.name) - 1);
strncpy(line_info.voltage_level, monitor_data.voltage_level, sizeof(line_info.voltage_level) - 1);
strncpy(line_info.v_wiring_type, monitor_data.terminal_connect, sizeof(line_info.v_wiring_type) - 1);
strncpy(line_info.monitor_status, monitor_data.status, sizeof(line_info.monitor_status) - 1);
strncpy(line_info.terminal_code, monitor_data.terminal_code, sizeof(line_info.terminal_code) - 1);
strncpy(logical_device_seq, monitor_data.logical_device_seq, sizeof(logical_device_seq) - 1);
if (isCharPtrEmpty(logical_device_seq)) {
line_info.cpuno = 1; // Ĭ<>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>1
2025-02-14 16:44:38 +08:00
printf("logical_device_seq: is null, set cpuno: %d\n", (int)line_info.cpuno);
2025-01-16 16:17:01 +08:00
} else {
line_info.cpuno = atoi(logical_device_seq);
2025-02-14 16:44:38 +08:00
printf("logical_device_seq: %d\n", (int)line_info.cpuno);
2025-01-16 16:17:01 +08:00
}
line_info.line_id = count_real_monitor; // <20><>¼<EFBFBD>ն<EFBFBD><D5B6>ź<EFBFBD>
2025-01-21 17:48:37 +08:00
2025-01-16 16:17:01 +08:00
printf("line_id: %d\n", line_info.line_id);
2025-01-16 19:16:26 +08:00
printf("mp_id: %s\n", line_info.mp_id);
2025-01-16 16:17:01 +08:00
printf("terminal_code: %s\n", line_info.terminal_code);
2025-01-16 19:16:26 +08:00
printf("voltage_level: %s\n", line_info.voltage_level);
printf("v_wiring_type: %s\n", line_info.v_wiring_type);
printf("monitor_status: %s\n", line_info.monitor_status);
2025-01-16 16:17:01 +08:00
printf("name: %s\n", line_info.name);
2025-01-21 17:48:37 +08:00
2025-02-14 16:44:38 +08:00
//lnk20250214<31><34><EFBFBD><EFBFBD>
2025-03-18 11:25:20 +08:00
if (strcmp(line_info.v_wiring_type, "0") != 0)
2025-02-14 16:44:38 +08:00
{
isdelta_flag = 1; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>þ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
cout << "monitor_id" << line_info.mp_id << "v_wiring_type:" << line_info.v_wiring_type << "is delta wiring:" << isdelta_flag << endl;
}
2025-01-16 16:17:01 +08:00
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
if (update[i].timestamp[0] != '\0') {
struct tm timeinfo;
char timestamp[64];
// <20><><EFBFBD><EFBFBD>update[i].timestamp<6D><70>ʽΪ "YYYY-MM-DD HH:MM:SS"
// <20><><EFBFBD>磺"2023-01-14 12:34:56"
sscanf(update[i].timestamp, "%4d-%2d-%2d %2d:%2d:%2d",
&timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday,
&timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec);
// <20><><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>1900<30>ʼ<EABFAA><CABC><EFBFBD><EFBFBD>
timeinfo.tm_year -= 1900;
// <20>·ݴ<C2B7>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>1
timeinfo.tm_mon -= 1;
// <20><>tm_isdst<73><74><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ-1<><31><EFBFBD><EFBFBD>mktime<6D>Զ<EFBFBD><D4B6>ж<EFBFBD>
timeinfo.tm_isdst = -1;
// ʹ<><CAB9>mktime<6D><65>struct tmת<6D><D7AA>Ϊtime_t
time_t raw_time = mktime(&timeinfo);
// <20>ж<EFBFBD>mktime<6D>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (raw_time != -1) {
line_info.time = (long long)raw_time;
printf("time: %lld\n", line_info.time);
} else {
printf("Error: mktime failed.\n");
return -1;
}
}
line_info.read_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
// <20><><EFBFBD><EFBFBD> LD_info
if (ied && ied->usr_ext && line_info.cpuno && ((int)line_info.cpuno < 10)) {
char str[256];
2025-01-22 17:00:34 +08:00
byte_t cpuno = line_info.cpuno; //ʹ<><CAB9><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD><CBB5>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>кţ<D0BA><C5A3><EFBFBD>ʹ<EFBFBD><CAB9>ԭ<EFBFBD><D4AD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>µIJ<C2B5><C4B2>ֻᱻ<D6BB><E1B1BB><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>ʱû<CAB1><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<E1B1BB><CAB9>
2025-02-14 16:44:38 +08:00
printf("cpuno: %d\n", (int)line_info.cpuno);
2025-01-16 16:17:01 +08:00
printf("index cpuno: %d\n", cpuno - 1);
2025-01-22 17:00:34 +08:00
2025-01-16 16:17:01 +08:00
ied_usr = (ied_usr_t*)ied->usr_ext;
2025-01-22 17:00:34 +08:00
//ied_usr->LD_info[cpuno - 1] = line_info;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><E6A3AC>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD><D2AA><EFBFBD>ж<EFBFBD>ԭ<EFBFBD>е<EFBFBD>ָ<EFBFBD><D6B8>
//ied_usr->LD_info[cpuno - 1].ied = ied; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><E6A3AC>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD><D2AA><EFBFBD>ж<EFBFBD>ԭ<EFBFBD>е<EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD>е<EFBFBD>ldname
char *ldname = NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еı<D0B5><C4B1><EFBFBD><E6A1A2>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
loginfo_t **loginfo = NULL;
rptinfo_t **rptinfo = NULL;
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
//printf("check error111 !!!!!!!!!!!!!!\n");
2025-02-08 17:04:39 +08:00
2025-02-12 16:08:36 +08:00
2025-01-22 17:00:34 +08:00
///////// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>ÿռ<C3BF>
2025-02-07 16:46:53 +08:00
if (ied_usr->LD_info[cpuno - 1].autorecallcount != 0) {
for (int j = 0; j < ied_usr->LD_info[cpuno - 1].autorecallcount; j++) {
if(NULL != ied_usr->LD_info[cpuno - 1].autorecall[j]){
delete ied_usr->LD_info[cpuno - 1].autorecall[j];
2025-01-22 17:00:34 +08:00
}
}
2025-02-07 16:46:53 +08:00
if(NULL != ied_usr->LD_info[cpuno - 1].autorecall){
delete ied_usr->LD_info[cpuno - 1].autorecall;
2025-01-22 17:00:34 +08:00
}
2025-02-07 16:46:53 +08:00
ied_usr->LD_info[cpuno - 1].autorecallcount = 0;
2025-01-22 17:00:34 +08:00
}
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
//printf("check error112 !!!!!!!!!!!!!!\n");
2025-02-12 16:08:36 +08:00
2025-01-22 17:00:34 +08:00
//////// //<2F><>¼ԭ<C2BC>еı<D0B5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
loginfo = ied_usr->LD_info[cpuno - 1].loginfo?ied_usr->LD_info[cpuno - 1].loginfo:NULL;
rptinfo = ied_usr->LD_info[cpuno - 1].rptinfo?ied_usr->LD_info[cpuno - 1].rptinfo:NULL;
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
//printf("check error113 !!!!!!!!!!!!!!\n");
2025-01-21 17:48:37 +08:00
2025-01-22 17:00:34 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>Ѵ<EFBFBD><D1B4>ڵ<EFBFBD>ied<65><64><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>֮ǰ<D6AE><C7B0>ʼ<EFBFBD><CABC><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>˹<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>̨<EFBFBD><CCA8>ʱû<CAB1><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (ied_usr->LD_info[cpuno - 1].ht_fcd != NULL) {
2025-02-07 16:46:53 +08:00
apr_hash_clear(ied_usr->LD_info[cpuno - 1].ht_fcd);
2025-01-21 17:48:37 +08:00
}
2025-01-22 17:00:34 +08:00
if (ied_usr->LD_info[cpuno - 1].ht_full_fcda != NULL) {
2025-02-07 16:46:53 +08:00
apr_hash_clear(ied_usr->LD_info[cpuno - 1].ht_full_fcda);
2025-01-21 17:48:37 +08:00
}
2025-01-22 17:00:34 +08:00
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
//printf("check error116 !!!!!!!!!!!!!!\n");
2025-02-12 16:08:36 +08:00
//<2F><>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ɾ<EFBFBD><C9BE>ʱ<EFBFBD><CAB1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
apr_snprintf(str, sizeof(str), "PQMonitorPQM%d", cpuno);
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD> LD_name<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
2025-02-14 16:44:38 +08:00
if (ied_usr->LD_info[cpuno - 1].LD_name == NULL) {
2025-02-12 16:08:36 +08:00
//lnk20250208<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "new space for LD_name" << std::endl;
//lnk20250208<30><38>ʹ<EFBFBD><CAB9>apr_pstrdup<75><70>ʹ<EFBFBD>ù̶<C3B9><CCB6><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD>
//ied_usr->LD_info[cpuno - 1].LD_name = apr_pstrdup(g_init_pool, str);
// <20><> g_init_pool <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>̶<EFBFBD> 256 <20>ֽڵ<D6BD><DAB5>ڴ<EFBFBD>
ied_usr->LD_info[cpuno - 1].LD_name = (char *)apr_palloc(g_init_pool, 256);
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(ied_usr->LD_info[cpuno - 1].LD_name, 0, 256);
// <20><> str <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD>Ԥ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><E0B8B4> 256 <20>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
apr_cpystrn(ied_usr->LD_info[cpuno - 1].LD_name, str, 256);
} else {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD><EFBFBD>ԭ<EFBFBD>пռ<D0BF><D5BC>ϸ<EFBFBD><CFB8><EFBFBD>
//lnk20250208<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-14 16:44:38 +08:00
std::cout << "old space for LD_name:" << ied_usr->LD_info[cpuno - 1].LD_name <<std::endl;
2025-02-12 16:08:36 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(ied_usr->LD_info[cpuno - 1].LD_name, 0, 256);
2025-02-27 16:28:04 +08:00
//printf("check error333 !!!!!!!!!!!!!!\n");
2025-02-14 16:44:38 +08:00
2025-02-12 16:08:36 +08:00
apr_cpystrn(ied_usr->LD_info[cpuno - 1].LD_name, str, 256); //ԭ<>пռ<D5BC><E4B8B2>
2025-02-14 16:44:38 +08:00
2025-02-27 16:28:04 +08:00
//printf("check error222 !!!!!!!!!!!!!!\n");
2025-02-12 16:08:36 +08:00
}
ldname = ied_usr->LD_info[cpuno - 1].LD_name;
//<2F><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
//printf("check error114 !!!!!!!!!!!!!!\n");
2025-02-12 16:08:36 +08:00
2025-01-22 17:00:34 +08:00
ied_usr->LD_info[cpuno - 1] = line_info;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><E6A3AC>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD><D2AA><EFBFBD>ж<EFBFBD>ԭ<EFBFBD>е<EFBFBD>ָ<EFBFBD><D6B8>
ied_usr->LD_info[cpuno - 1].ied = ied; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><E6A3AC>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD><D2AA><EFBFBD>ж<EFBFBD>ԭ<EFBFBD>е<EFBFBD>ָ<EFBFBD><D6B8>
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
//printf("check error115 !!!!!!!!!!!!!!\n");
2025-02-12 16:08:36 +08:00
2025-01-22 17:00:34 +08:00
ied_usr->LD_info[cpuno - 1].LD_name = ldname;//<2F><>¼ԭ<C2BC>еĻ<D0B5><C4BB><EFBFBD><EFBFBD>µ<EFBFBD>ldname
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
printf("ledger ied_usr->LD_info[cpuno - 1].LD_name: %s\n", ied_usr->LD_info[cpuno - 1].LD_name);
2025-01-22 17:00:34 +08:00
ied_usr->LD_info[cpuno - 1].ht_fcd = apr_hash_make(g_init_pool); //<2F><><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>
ied_usr->LD_info[cpuno - 1].ht_full_fcda = apr_hash_make(g_init_pool);
ied_usr->LD_info[cpuno - 1].rptcount = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ied_usr->LD_info[cpuno - 1] = line_info;ʱӦ<CAB1>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
2025-01-16 16:17:01 +08:00
printf("rptcount: %d\n", ied_usr->LD_info[cpuno - 1].rptcount);
2025-01-22 17:00:34 +08:00
//ʹ<><CAB9>ԭ<EFBFBD>еı<D0B5><C4B1><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ռ<EFBFBD>
2025-02-12 16:08:36 +08:00
ied_usr->LD_info[cpuno - 1].loginfo = loginfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĻ<C2B5><C4BB>ǾɵĿռ<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-22 17:00:34 +08:00
ied_usr->LD_info[cpuno - 1].rptinfo = rptinfo;
if (cpuno > ied->cpucount) {//<2F><>̨<EFBFBD>˵<EFBFBD><CBB5>߼<EFBFBD><DFBC>Ŵ<EFBFBD><C5B4><EFBFBD>iedԭ<64>е<EFBFBD>cpu<70><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cpu<70><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ied->cpucount = cpuno;
2025-01-16 16:17:01 +08:00
}
}
printf("Monitor Info [ID: %s, Name: %s] saved in LD_info\n", line_info.mp_id, line_info.name);
}
return 0;
}
2025-01-17 17:10:18 +08:00
////////////////////////////////////////////////////////////////////////̨<>˸<EFBFBD><CBB8>¼<EFBFBD>¼<EFBFBD><C2BC>־
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><EFBFBD><E4B2A2>ʽ<EFBFBD><CABD>Ϊ "YYYY-MM-DD HH:MM:SS"
std::string get_current_time() {
std::time_t t = std::time(NULL);
struct std::tm tm = *std::localtime(&t);
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm);
return std::string(buffer);
}
// д<><D0B4><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ŀ
void write_log_entry(std::ofstream &log_file, const std::string &action, const std::string &terminal_id, const std::string &current_time) {
log_file << terminal_id << "\t" << action << "time:" << current_time << "\n";
}
2025-02-07 16:46:53 +08:00
// <20><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>־
2025-01-17 17:10:18 +08:00
void create_ledger_log(trigger_update_xml_t* ledger_update_xml) {
2025-02-11 18:23:19 +08:00
std::cout << "create_ledger_log." << std::endl;
2025-01-17 17:10:18 +08:00
std::string log_filename = "../etc/" + std::string(LEDGER_UPDATE_FN);
std::ofstream log_file(log_filename.c_str(), std::ios::app); // <20><>׷<EFBFBD><D7B7>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
if (!log_file.is_open()) {
std::cerr << "Failed to open log file: " << log_filename << std::endl;
return;
}
std::vector<std::pair<std::string, std::string> > new_entries; // <20><><EFBFBD>ڴ洢new<65><77>terminal_id<69><64>ʱ<EFBFBD><CAB1>
std::vector<std::pair<std::string, std::string> > modify_entries; // <20><><EFBFBD>ڴ洢modify<66><79>terminal_id<69><64>ʱ<EFBFBD><CAB1>
std::vector<std::pair<std::string, std::string> > delete_entries; // <20><><EFBFBD>ڴ洢delete<74><65>terminal_id<69><64>ʱ<EFBFBD><CAB1>
std::string current_time = get_current_time(); // <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
// <20><><EFBFBD><EFBFBD> new_updates
for (int i = 0; i < ledger_update_xml->new_update_num; ++i) {
std::string terminal_id = ledger_update_xml->new_updates[i].terminal_id;
new_entries.push_back(std::make_pair(terminal_id, current_time));
}
2025-01-16 16:17:01 +08:00
2025-01-17 17:10:18 +08:00
// <20><><EFBFBD><EFBFBD> modify_updates
for (int i = 0; i < ledger_update_xml->modify_update_num; ++i) {
std::string terminal_id = ledger_update_xml->modify_updates[i].terminal_id;
modify_entries.push_back(std::make_pair(terminal_id, current_time));
}
// <20><><EFBFBD><EFBFBD> delete_updates
for (int i = 0; i < ledger_update_xml->delete_update_num; ++i) {
std::string terminal_id = ledger_update_xml->delete_updates[i].terminal_id;
delete_entries.push_back(std::make_pair(terminal_id, current_time));
}
// д<><D0B4><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
if (!new_entries.empty()) {
log_file << "<new>\n";
for (size_t i = 0; i < new_entries.size(); ++i) {
write_log_entry(log_file, "add", new_entries[i].first, new_entries[i].second);
}
log_file << "</new>\n";
}
if (!modify_entries.empty()) {
log_file << "<modify>\n";
for (size_t i = 0; i < modify_entries.size(); ++i) {
write_log_entry(log_file, "modify", modify_entries[i].first, modify_entries[i].second);
}
log_file << "</modify>\n";
}
if (!delete_entries.empty()) {
log_file << "<delete>\n";
for (size_t i = 0; i < delete_entries.size(); ++i) {
write_log_entry(log_file, "delete", delete_entries[i].first, delete_entries[i].second);
}
log_file << "</delete>\n";
}
log_file.close();
std::cout << "Ledger log has been updated." << std::endl;
}
2025-01-21 17:48:37 +08:00
///////////////////////////////////////////////////////////////////////////̨<><CCA8><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>䲿<EFBFBD>ֹ<EFBFBD><D6B9>ܴ<EFBFBD><DCB4>룺δʹ<CEB4><CAB9>
// ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>
void delete_sub_pool(const char* terminal_id) {
std::list<std::pair<std::string, apr_pool_t*> >::iterator it;
for (it = pool_list.begin(); it != pool_list.end(); ++it) {
if (it->first == terminal_id) {
apr_pool_destroy(it->second); // <20><><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>
pool_list.erase(it); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
break;
}
2025-01-17 17:10:18 +08:00
}
}
2025-01-21 17:48:37 +08:00
//<2F>Ҷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
apr_pool_t* find_sub_pool(const char* terminal_id) {
std::list<std::pair<std::string, apr_pool_t*> >::iterator it;
for (it = pool_list.begin(); it != pool_list.end(); ++it) {
if (it->first == terminal_id) {
return it->second; // <20>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
}
}
return NULL; // û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ӳز<D3B3><D8B2><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
apr_pool_t* create_sub_pool(apr_pool_t* parent_pool, const char* terminal_id) {
apr_pool_t* new_sub_pool = NULL;
// <20>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ӳ<EFBFBD>
apr_pool_create(&new_sub_pool, parent_pool);
if (new_sub_pool == NULL) {
return NULL; // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
}
// <20><><EFBFBD>ӳغ<D3B3><D8BA>ն<EFBFBD> ID <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pool_list.push_back(std::make_pair(std::string(terminal_id), new_sub_pool));
return new_sub_pool;
}
2025-01-22 17:00:34 +08:00
//////////////////////////////////////////////////////////////////////////////////////////////////
//̨<>˱<EFBFBD><CBB1><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
int parse_rpt_log_ini_one(ied_t* ied)
{
QMap<QString, QStringList*> rpt_cfg_strlists;
QMap<QString, QStringList*> log_cfg_strlists;
int iedno, cpuno;
ied_usr_t* ied_usr;
LD_info_t* LD_info;
char buf[256];
ied_usr = GET_IEDEXT_ADDR(ied);
QString type;
type.append(ied_usr->dev_type);
if (!rpt_cfg_strlists.contains(type))
{
QStringList* rpt_temp = new QStringList();
QStringList* log_temp = new QStringList();
rpt_cfg_strlists.insert(type, rpt_temp);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
log_cfg_strlists.insert(type, log_temp);//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
//g_DevFlagû<67><C3BB>ʹ<EFBFBD><CAB9>
parse_one_rpt_log_ini(g_DevFlag, rpt_cfg_strlists[type], log_cfg_strlists[type], ied_usr->dev_type);
}
2025-02-08 17:04:39 +08:00
//lnk20250208<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "ied->cpucount:" << (int)(ied->cpucount) <<std::endl;
2025-01-22 17:00:34 +08:00
for (cpuno = 0; cpuno < ied->cpucount; cpuno++) {//<2F><><EFBFBD><EFBFBD>iedʵ<64>ʵļ<CAB5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-08 17:04:39 +08:00
//lnk20250208<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "cpuno:" << cpuno << "log init !!!!!!" <<std::endl;
2025-01-22 17:00:34 +08:00
LD_info = &(ied_usr->LD_info[cpuno]);
2025-02-07 16:46:53 +08:00
//<2F><>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD>жϲ<D0B6><CFB2>ܴ<EFBFBD>g_init_pool<6F>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ڴ棬lnk20250122
2025-01-22 17:00:34 +08:00
char str[256];
char* tmp = Get_IED(ied_usr->dev_type);
2025-03-13 16:35:19 +08:00
if(tmp == NULL){std::cerr << "front read ied config error!" << std::endl;continue;}
2025-01-22 17:00:34 +08:00
qDebug() << tmp << endl;
apr_snprintf(str, sizeof(str), tmp, cpuno + 1);
2025-02-12 16:08:36 +08:00
//<2F><><EFBFBD><EFBFBD>
printf("logini ied_usr->LD_info[cpuno - 1].LD_name: %s\n", ied_usr->LD_info[cpuno].LD_name);
2025-01-22 17:00:34 +08:00
2025-02-07 16:46:53 +08:00
delete[] tmp;//Get_IED<45>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬ʹ<E6A3AC>ú<EFBFBD>ɾ<EFBFBD><C9BE>
2025-01-22 17:00:34 +08:00
2025-02-08 17:04:39 +08:00
//lnk20250208<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "cpuno:" << cpuno << " fill report control" <<std::endl;
2025-01-22 17:00:34 +08:00
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
init_rptctrl_by_count(LD_info, rpt_cfg_strlists[type]->size());
for (int i = 0; i < rpt_cfg_strlists[type]->size(); ++i) {
apr_snprintf(buf, sizeof(buf), "%s", rpt_cfg_strlists[type]->at(i).toAscii().constData());
fill_rptctrl_by_cfg(LD_info, i, buf);
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
init_logctrl_by_count(LD_info, log_cfg_strlists[type]->size());
for (int i = 0; i < log_cfg_strlists[type]->size(); ++i) {
apr_snprintf(buf, sizeof(buf), "%s", log_cfg_strlists[type]->at(i).toAscii().constData());
char* tmp = Get_LDevice(ied_usr->dev_type);
2025-03-13 16:35:19 +08:00
if(tmp == NULL){std::cerr << "front read monitor config error!" << std::endl;continue;}
2025-01-22 17:00:34 +08:00
fill_logctrl_by_cfg(LD_info, i, buf, tmp);
delete[] tmp;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ƿ鴦<C6BF><E9B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (QMap<QString, QStringList*>::iterator it1 = log_cfg_strlists.begin(); it1 != log_cfg_strlists.end(); ++it1)
{
delete it1.value();
}
for (QMap<QString, QStringList*>::iterator it2 = rpt_cfg_strlists.begin(); it2 != rpt_cfg_strlists.end(); ++it2)
{
delete it2.value();
}
rpt_cfg_strlists.clear();
log_cfg_strlists.clear();
return APR_SUCCESS;
}
////////////////////////////////////////////////////////////remdibtable
apr_status_t init_rem_dib_table_one(ied_t *ied)
{
int pos = 0;
int iedno,chnl_no;
struct in_addr ip;
chnl_usr_t *chnl_usr;
ied_usr_t* ied_usr;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ú<EFBFBD>g_nodeһ<65><D2BB>
ied_usr = (ied_usr_t*)ied->usr_ext;
2025-02-11 18:23:19 +08:00
pos = ied_usr->dev_idx - 1;
std::cout << "!!!!!!!!!rem_dib_table pos is " << pos << std::endl;
2025-01-22 17:00:34 +08:00
for(chnl_no=0 ; chnl_no<ied->chncount; chnl_no++) {
2025-02-07 16:46:53 +08:00
chnl_usr = (chnl_usr_t*)ied->channel[chnl_no].connect;//<2F><>ʼ<EFBFBD><CABC>ʱ<EFBFBD>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
2025-01-22 17:00:34 +08:00
g_pt61850app->chnl_usr[pos] = chnl_usr;
2025-02-11 18:23:19 +08:00
std::cout << "!!!!!!!!!g_pt61850app pos " << pos << "is " << ied_usr->terminal_id << "is" << (chnl_usr == NULL?"NULL":"NOTNULL") << std::endl;
2025-01-22 17:00:34 +08:00
ip.s_addr = htonl(ied->channel[chnl_no].addr);
strcpy(chnl_usr->ip_str,inet_ntoa(ip));
printf( " add_rem_dib_table %s:%d \n",chnl_usr->ip_str ,ied->channel[chnl_no].port );
add_rem_dib_table (pos++,chnl_usr->ip_str,ied->channel[chnl_no].port );//<2F><>ǰ<EFBFBD>ն˵<D5B6>IP<49>˿ڼ<CBBF>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>±꣬<C2B1><EAA3AC><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>նˣ<D5B6><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ڣ<EFBFBD><DAA3>ٴ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><EFBFBD>
{
char comm_str[256];
memset(comm_str,0,256);
apr_snprintf(comm_str,sizeof(comm_str),"%16s:%d\t\tinited",chnl_usr->ip_str,ied->channel[chnl_no].port);
add_comm_log(comm_str);
}
}
return APR_SUCCESS;
}
2025-01-23 16:32:26 +08:00
///////////////////////////////////////////////////////////////////////////////////////////////////<2F><><EFBFBD><EFBFBD>ied
void clearLogInfo(loginfo_t *loginfo) {
if (loginfo == nullptr) {
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ϊ<EFBFBD>գ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
memset(loginfo->logName, 0, sizeof(loginfo->logName));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ա
loginfo->IntgPd = 0;
loginfo->reasonCode = 0;
loginfo->TrgOpt = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
loginfo->start_time = 0;
loginfo->end_time = 0;
loginfo->need_steady = 0;
loginfo->need_voltage = 0;
// <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
if (loginfo->lcbName != nullptr) {
memset(loginfo->lcbName, 0, strlen(loginfo->lcbName)); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if (loginfo->datasetName != nullptr) {
memset(loginfo->datasetName, 0, strlen(loginfo->datasetName)); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD><EFBFBD> LD_info <20><>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ָ<EFBFBD><D6B8><EFBFBD>ϼ<EFBFBD>
}
void clearRptInfo(rptinfo_t *rptinfo) {
if (rptinfo == nullptr) {
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ϊ<EFBFBD>գ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ա
2025-02-07 16:46:53 +08:00
rptinfo->instanceNeedSuffix = 0;
rptinfo->TrgOpt = 0;
2025-01-23 16:32:26 +08:00
memset(rptinfo->OptFlds, 0, sizeof(rptinfo->OptFlds));
rptinfo->IntgPd = 0;
rptinfo->report_PQ_type = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
rptinfo->rpt_registered = 0;
rptinfo->chnl_id = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
rptinfo->m_LastDataTime = 0;
rptinfo->m_LastGITime = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
rptinfo->m_LastRegisterFailedTime = 0;
rptinfo->m_LastUnRegisterFailedTime = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
memset(rptinfo->m_EntryID, 0, sizeof(rptinfo->m_EntryID));
rptinfo->m_curRptSuffix = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
rptinfo->count = 0;
rptinfo->rptNo = 0;
rptinfo->flickerflag = 0;
2025-02-07 16:46:53 +08:00
2025-01-23 16:32:26 +08:00
rptinfo->pstflag = 0;
// <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
if (rptinfo->rptID != nullptr) {
memset(rptinfo->rptID, 0, strlen(rptinfo->rptID)); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD><EFBFBD> LD_info <20><>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>򸸼<EFBFBD>
//rptinfo->LD_info = nullptr;
2025-02-07 16:46:53 +08:00
// <20><> RCBC_INFO <20><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
2025-01-23 16:32:26 +08:00
if (rptinfo->m_rcb_info != nullptr) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
2025-02-07 16:46:53 +08:00
rptinfo->m_rcb_info = nullptr;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><EFBFBD><E1B1BB><EFBFBD><EFBFBD>
2025-01-23 16:32:26 +08:00
}
}
void clearLDInfo(LD_info_t *ld_info) {
if (ld_info == nullptr) {
std::cout << "ldinfo is null" << std::endl;
return;
}
2025-02-07 16:46:53 +08:00
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>iedָ<64><D6B8>
//<2F><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
if (ld_info->rptinfo != nullptr) {
for (int i = 0; i < ld_info->rptcount; ++i) {
if (ld_info->rptinfo[i] != nullptr) {
clearRptInfo(ld_info->rptinfo[i]); //<2F><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
}
}
}
std::cout << "clean RptInfo!!!" << std::endl;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
2025-01-23 16:32:26 +08:00
if (ld_info->loginfo != nullptr) {
for (int i = 0; i < ld_info->logcount; ++i) {
if (ld_info->loginfo[i] != nullptr) {
2025-02-07 16:46:53 +08:00
clearLogInfo(ld_info->loginfo[i]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ƿ<EFBFBD>
2025-01-23 16:32:26 +08:00
}
}
}
std::cout << "clean loginfo_t!!!" << std::endl;
2025-02-07 16:46:53 +08:00
//<2F><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>
2025-01-23 16:32:26 +08:00
if (ld_info->autorecall != nullptr) {
for (int i = 0; i < ld_info->autorecallcount; ++i) {
if (ld_info->autorecall[i] != nullptr) {
memset(ld_info->autorecall[i], 0, sizeof(autorecall_t));
2025-02-07 16:46:53 +08:00
delete ld_info->autorecall[i]; //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ؿռ<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4A3AC>Ҫ<EFBFBD>ͷ<EFBFBD>
2025-01-23 16:32:26 +08:00
}
}
delete ld_info->autorecall; //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
}
std::cout << "clean autorecall_t!!!" << std::endl;
if (ld_info->ht_fcd != nullptr) {
apr_hash_clear(ld_info->ht_fcd);
}
if (ld_info->ht_full_fcda != nullptr) {
apr_hash_clear(ld_info->ht_full_fcda);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ա
2025-02-07 16:46:53 +08:00
if (ld_info->name != nullptr) {
memset(ld_info->name, 0, sizeof(char) * 256);
}
2025-01-23 16:32:26 +08:00
if (ld_info->LD_name != nullptr) {
memset(ld_info->LD_name, 0, sizeof(char) * 256);
}
if (ld_info->mp_id != nullptr) {
memset(ld_info->mp_id, 0, sizeof(char) * 256);
}
if (ld_info->voltage_level != nullptr) {
memset(ld_info->voltage_level, 0, sizeof(char) * 256);
}
if (ld_info->v_wiring_type != nullptr) {
memset(ld_info->v_wiring_type, 0, sizeof(char) * 256);
}
if (ld_info->monitor_status != nullptr) {
memset(ld_info->monitor_status, 0, sizeof(char) * 64);
}
if (ld_info->terminal_code != nullptr) {
memset(ld_info->terminal_code, 0, sizeof(char) * 256);
}
2025-02-07 16:46:53 +08:00
ld_info->cpuno = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>к<EFBFBD>
ld_info->time = 0; //̨<>˸<EFBFBD><CBB8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>0
ld_info->update_flag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD>ʹ<EFBFBD><CAB9>
ld_info->rptRecvFlag = 0;//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>־
ld_info->rptRecvCheckFlag = 0;
ld_info->rptPstRecvFlag = 0;
ld_info->rptPstRecvCheckFlag = 0;
ld_info->read_flag = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
2025-01-23 16:32:26 +08:00
ld_info->rptcount = 0;
ld_info->logcount = 0;
ld_info->autorecallflag = 0;
ld_info->autorecallcount = 0;
2025-02-07 16:46:53 +08:00
//ld_info->group = 0; //<2F><>ʹ<EFBFBD><CAB9>
//<2F><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
2025-01-23 16:32:26 +08:00
ld_info->line_id = 0;
ld_info->real_data = 0;
ld_info->soe_data = 0;
ld_info->limit = 0;
ld_info->count = 0;
2025-02-07 16:46:53 +08:00
//ld_info->SubV_Index = 0; //<2F><>ʹ<EFBFBD><CAB9>
//ld_info->Dev_Index = 0; //<2F><>ʹ<EFBFBD><CAB9>
//ld_info->Sub_Index = 0; //<2F><>ʹ<EFBFBD><CAB9>
//ld_info->GD_Index = 0; //<2F><>ʹ<EFBFBD><CAB9>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD>
for (int i = 0; i < QVVR_NUM; ++i) {
ld_info->qvvr[i].used_status = 0;
ld_info->qvvr[i].QVVR_start = 0;
ld_info->qvvr[i].QVVR_type = 0;
ld_info->qvvr[i].QVVR_time = 0;
ld_info->qvvr[i].QVVR_PerTime = 0.0f;
ld_info->qvvr[i].QVVR_Amg = 0.0f;
memset(ld_info->qvvr[i].QVVR_Rptname, 0, sizeof(ld_info->qvvr[i].QVVR_Rptname)); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
ld_info->qvvr[i].timestamp = 0;
}
ld_info->qvvr_idx = 0;
memset(ld_info->FltNum, 0, sizeof(ld_info->FltNum));
ld_info->RDRE_FltNum = 0; //¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-23 16:32:26 +08:00
}
void clearIedUsr(ied_usr_t *ied_usr) {
if (ied_usr == nullptr) {
std::cout << "ied_usr is null" << std::endl;
return;
}
// <20><><EFBFBD><EFBFBD> ied_usr_t <20>еķ<D0B5>ָ<EFBFBD>벿<EFBFBD><EBB2BF>
//ied_usr->dev_idx = 0;//<2F><><EFBFBD><EFBFBD>index
ied_usr->dev_flag = UNUSED;
ied_usr->last_call_wavelist_time = 0;
2025-02-07 16:46:53 +08:00
ied_usr->time = 0; //̨<>˸<EFBFBD><CBB8><EFBFBD>ʱ<EFBFBD><CAB1>
ied_usr->update_flag = 0; //̨<>˸<EFBFBD><CBB8>±<EFBFBD>־<EFBFBD>ݲ<EFBFBD>ʹ<EFBFBD><CAB9>
2025-01-23 16:32:26 +08:00
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD>벿<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>ָ<EFBFBD><D6B8>
if (ied_usr->LD_info != nullptr) {
2025-02-14 16:44:38 +08:00
2025-01-23 16:32:26 +08:00
// <20><><EFBFBD><EFBFBD> LD_info <20><>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < MAX_CPUNO; ++i) {
2025-02-14 16:44:38 +08:00
LD_info_t * ld =NULL;
ld = (LD_info_t *)&ied_usr->LD_info[i];
if (ld != NULL) {
clearLDInfo(ld);
2025-01-23 16:32:26 +08:00
}
}
}
2025-02-07 16:46:53 +08:00
if (ied_usr->cookie != nullptr) { //<2F><>ʹ<EFBFBD><CAB9>
2025-01-23 16:32:26 +08:00
std::cout << "cookie not null" << std::endl;
}
2025-02-07 16:46:53 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>벿<EFBFBD>֣<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B8B2>
2025-01-23 16:32:26 +08:00
memset(ied_usr->dev_type, 0, sizeof(ied_usr->dev_type));
memset(ied_usr->dev_key, 0, sizeof(ied_usr->dev_key));
memset(ied_usr->dev_series, 0, sizeof(ied_usr->dev_series));
memset(ied_usr->terminal_id, 0, sizeof(ied_usr->terminal_id));
memset(ied_usr->org_name, 0, sizeof(ied_usr->org_name));
memset(ied_usr->maint_name, 0, sizeof(ied_usr->maint_name));
memset(ied_usr->station_name, 0, sizeof(ied_usr->station_name));
memset(ied_usr->tmnl_factory, 0, sizeof(ied_usr->tmnl_factory));
memset(ied_usr->tmnl_status, 0, sizeof(ied_usr->tmnl_status));
memset(ied_usr->terminal_code, 0, sizeof(ied_usr->terminal_code));
}
2025-02-07 16:46:53 +08:00
// <20><><EFBFBD><EFBFBD> channel <20><> cpuinfo <20>ķ<EFBFBD>ָ<EFBFBD>벿<EFBFBD><EBB2BF>
void clear_channel_and_cpuinfo(byte_t chncount, channel_t *channel, byte_t cpucount, cpuinfo_t *cpuinfo) {
// <20><><EFBFBD><EFBFBD> channel <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ÿ<EFBFBD><C3BF>Ԫ<EFBFBD>صķ<D8B5>ָ<EFBFBD><D6B8><EFBFBD>ֶ<EFBFBD>
for (byte_t i = 0; i < chncount && (&channel[i] != NULL); ++i) {
channel[i].master = 0;
channel[i].channel_type = 0;
memset(channel[i].addr_str, 0, LONGNAME);
channel[i].addr = 0;
channel[i].port = 0;
channel[i].status = 0;
channel[i].last_ticks = 0;
channel[i].last_send_ticks = 0;
channel[i].ied_id = 0;
// <20><><EFBFBD><EFBFBD> channel <20><><EFBFBD><EFBFBD> chnl_usr_t <20><><EFBFBD><EFBFBD>
// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBB1BE>
}
// <20><><EFBFBD><EFBFBD> cpuinfo <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ÿ<EFBFBD><C3BF>Ԫ<EFBFBD>صķ<D8B5>ָ<EFBFBD><D6B8><EFBFBD>ֶ<EFBFBD>
for (byte_t i = 0; i < cpucount && (&cpuinfo[i] != NULL); ++i) {
cpuinfo[i].addr = 0;
cpuinfo[i].status = 0;
cpuinfo[i].templ = 0;
memset(cpuinfo[i].name, 0, LONGNAME);
cpuinfo[i].last_gi = 0;
cpuinfo[i].last_gi_send = 0;
cpuinfo[i].next_gi_send = 0;
cpuinfo[i].last_ticks = 0;
cpuinfo[i].last_send_ticks = 0;
}
}
2025-01-23 16:32:26 +08:00
void clearIed(ied_t *ied) {
if (ied == nullptr) {
return;
}
2025-02-07 16:46:53 +08:00
// <20><><EFBFBD><EFBFBD> ied_t <20><>id
ied->id = 0;
//ied->flags = 0; //δʹ<CEB4><CAB9>
//ied->type = 0; //δʹ<CEB4><CAB9>
//<2F><><EFBFBD><EFBFBD>channel //<2F><><EFBFBD><EFBFBD>cpuinfo
clear_channel_and_cpuinfo(ied->chncount,ied->channel,ied->cpucount,ied->cpuinfo);
ied->chncount = 0; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
ied->cpucount = 0; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(ied->name, 0, LONGNAME);
//ied->station = 0; //δʹ<CEB4><CAB9>
//ied->node = 0; //δʹ<CEB4><CAB9>
//ied->frequency = 0; //δʹ<CEB4><CAB9>
//ied->delay = 0; //δʹ<CEB4><CAB9>
//ied->count = 0; //δʹ<CEB4><CAB9>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>岿<EFBFBD><E5B2BF>δʹ<CEB4><CAB9>
//ied->groups = NULL;
//ied->htgroups = NULL;
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>δʹ<CEB4><CAB9>
//ied->systoken_st = 0;
2025-01-23 16:32:26 +08:00
2025-02-07 16:46:53 +08:00
//ied->index = 0; //δʹ<CEB4><CAB9>
ied->status = STATUS_NOINIT; //<2F>豸״̬<D7B4><CCAC>Ϊδ<CEAA><CEB4>ʼ<EFBFBD><CABC>
//ied->last_ticks = 0; //δʹ<CEB4><CAB9>
//ied->last_gi = 0; //δʹ<CEB4><CAB9>
2025-01-23 16:32:26 +08:00
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD>벿<EFBFBD><EBB2BF>
if (ied->usr_ext != nullptr) {
ied_usr_t *ied_usr = (ied_usr_t*)ied->usr_ext;
clearIedUsr(ied_usr);
}
2025-02-07 16:46:53 +08:00
if (ied->sys_ext != nullptr) {
//<2F><>ʹ<EFBFBD><CAB9>
}
if (ied->app_ext != nullptr) {
//<2F><>ʹ<EFBFBD><CAB9>
}
2025-01-23 16:32:26 +08:00
}
2025-01-16 16:17:01 +08:00
/*<2A><>װC<D7B0>ɵ<EFBFBD><C9B5>õ<EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>º<EFBFBD><C2BA><EFBFBD> */////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2025-02-18 17:10:22 +08:00
//<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
2025-03-28 13:43:55 +08:00
std::string my_to_string(long long value) {
2025-02-18 17:10:22 +08:00
std::stringstream ss;
ss << value;
return ss.str();
}
2025-03-28 13:43:55 +08:00
//lnk20250328<32><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD><E4B5BD><EFBFBD>ն<EFBFBD>
bool shouldSkipTerminal(const char* terminal_id) {
for (size_t i = 0; i < TESTARRAY.size(); ++i) {
if (TESTARRAY[i] == terminal_id) {
return true;
}
}
return false;
}
2025-02-18 17:10:22 +08:00
void rocketmq_test_300(int mpnum,int front_index) {
Ckafka_data_t data;
data.strTopic = QString::fromStdString(G_ROCKETMQ_TOPIC);
data.mp_id = "0";
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
std::ifstream file("long_string.txt"); // <20>ļ<EFBFBD><C4BC>д洢<D0B4><E6B4A2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
std::stringstream buffer;
buffer << file.rdbuf();
std::string file_contents = buffer.str(); // <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
std::string base_strText = file_contents;
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʼʱ<CABC><CAB1>
std::time_t t = std::time(NULL);//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ϵͳʱ<CDB3><EFBFBD><E4A3A8> 1970 <20><> 1 <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>Ϊ UNIX ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::tm* time_info = std::localtime(&t);//<2F><> std::time_t<5F><74><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0> UNIX ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨std::tm <20><EFBFBD><E1B9B9>
time_info->tm_sec = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
//time_info->tm_msec = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>ʹ<EFBFBD>ø߾<C3B8><DFBE><EFBFBD>ʱ<EFBFBD>
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::time_t base_time_t = std::mktime(time_info);//<2F><> std::tm <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣩ת<E4A3A9><D7AA><EFBFBD><EFBFBD> std::time_t<5F><74>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long long current_time_ms = static_cast<long long>(base_time_t) * 1000; // ÿ<><C3BF><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
// <20><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
int total_messages = mpnum;
ied_t* ied;
ied_usr_t* ied_usr;
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 300 <20><><EFBFBD><EFBFBD>Ϣ
2025-02-24 16:45:42 +08:00
for (int i = 0; (total_messages != 0 && g_front_seg_index == 1 && g_node_id == 100) && i < g_node->n_clients; ++i) {
2025-02-18 17:10:22 +08:00
ied = (ied_t*)g_node->clients[i];
if(ied != NULL){
ied_usr = (ied_usr_t*)ied->usr_ext;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
2025-03-28 13:43:55 +08:00
if (shouldSkipTerminal(ied_usr->terminal_id)) {
std::cout << ied_usr->terminal_id << " use true message " << std::endl;
2025-02-18 17:10:22 +08:00
continue;
}
2025-01-16 16:17:01 +08:00
2025-02-18 17:10:22 +08:00
for (int j = 0; j < 10 && ied_usr->LD_info[j].mp_id[0] != '\0'; j++){
// <20>޸<EFBFBD> Monitor ֵ
char monitor_id[256] = {};
strncpy(monitor_id, ied_usr->LD_info[j].mp_id, sizeof(monitor_id) - 1);
monitor_id[sizeof(monitor_id) - 1] = '\0';
data.mp_id = QString(monitor_id);
data.monitor_id = i + j;
2025-03-28 13:43:55 +08:00
std::string modified_time = my_to_string(current_time_ms); // ʱ<><CAB1>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>Unixʱ<78><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-18 17:10:22 +08:00
// <20><EFBFBD><E6BBBB>Ϣ<EFBFBD>е<EFBFBD> Monitor <20><> TIME <20>ֶΣ<D6B6>ֻƥ<D6BB><C6A5><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
std::string modified_strText = base_strText;
// <20>滻 Monitor <20>ֶ<EFBFBD>
size_t monitor_pos = modified_strText.find("\"Monitor\"");
if (monitor_pos != std::string::npos) {
size_t colon_pos = modified_strText.find(":", monitor_pos);
size_t quote_pos = modified_strText.find("\"", colon_pos);
size_t end_quote_pos = modified_strText.find("\"", quote_pos + 1);
if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) {
modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, data.mp_id.toStdString());
}
}
// <20>滻 TIME <20>ֶ<EFBFBD>
size_t time_pos = modified_strText.find("\"TIME\"");
if (time_pos != std::string::npos) {
size_t colon_pos = modified_strText.find(":", time_pos);
size_t quote_pos = colon_pos;
size_t end_quote_pos = modified_strText.find(",", quote_pos + 1);
if (colon_pos != std::string::npos && quote_pos != std::string::npos && end_quote_pos != std::string::npos) {
modified_strText.replace(quote_pos + 1, end_quote_pos - quote_pos - 1, modified_time);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data.strText = QString::fromStdString(modified_strText);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
my_rocketmq_send(data);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::cout << "Sent message " << (i + 1) << " with Monitor " << data.monitor_id << " and TIME " << modified_time << std::endl;
// <20>ȴ<EFBFBD><C8B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ<EFBFBD>ķ<EFBFBD><C4B7>ͣ<EFBFBD><CDA3>̶<EFBFBD>Ϊ1<CEAA><31><EFBFBD>ӣ<EFBFBD>
//QThread::sleep(60); // ÿ<>η<EFBFBD><CEB7>ͼ<EFBFBD><CDBC><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
}
}
}
std::cout << "Finished sending " << total_messages << " messages." << std::endl;
}
2025-01-16 16:17:01 +08:00
2025-02-25 16:33:11 +08:00
///////////////////////////////////////////////////////////////////////////////lnkʵʱ<CAB5><CAB1>־<EFBFBD><D6BE><EFBFBD><EFBFBD>20250205
2025-02-27 16:28:04 +08:00
// ------------------ ȫ<><C8AB><EFBFBD><EFBFBD>־<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD> ------------------
2025-02-25 16:33:11 +08:00
std::list<std::string> errorList;
std::list<std::string> warnList;
std::list<std::string> normalList;
std::list<std::string> debugList; // <20><><EFBFBD><EFBFBD> debugList
2025-02-25 16:33:11 +08:00
2025-02-27 16:28:04 +08:00
pthread_mutex_t errorListMutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t warnListMutex = PTHREAD_MUTEX_INITIALIZER;
2025-02-25 16:33:11 +08:00
pthread_mutex_t normalListMutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t debugListMutex = PTHREAD_MUTEX_INITIALIZER; // <20><><EFBFBD><EFBFBD> debugList <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
// ------------------ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------
bool errorOutputEnabled = false; // <20>Ƿ<EFBFBD><C7B7><EFBFBD> error <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> errorList
bool warnOutputEnabled = false; // <20>Ƿ<EFBFBD><C7B7><EFBFBD> warn <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> warnList
bool normalOutputEnabled = false; // <20>Ƿ<EFBFBD><C7B7><EFBFBD> normal <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> normalList
bool debugOutputEnabled = false; // <20><><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
// ------------------ <20><><EFBFBD>ڻָ<DABB>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------
static std::streambuf* g_originalCoutBuf = NULL;
static std::streambuf* g_originalClogBuf = NULL;
static std::streambuf* g_originalCerrBuf = NULL;
2025-03-03 18:20:00 +08:00
2025-02-27 16:28:04 +08:00
// ------------------ <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ö<EFBFBD>٣<EFBFBD>C++98<39><38> ------------------
enum LogLevel {
LOGERROR,
LOGWARN,
LOGNORMAL,
LOGDEBUG // <20><><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD>
2025-02-25 16:33:11 +08:00
};
2025-02-27 16:28:04 +08:00
// ------------------------------------------------------------------
// TeeStreamBuf: <20><>д<EFBFBD><D0B4>ԭʼbuf(<28><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>list<73><74>
// ------------------------------------------------------------------
class TeeStreamBuf : public std::streambuf
{
public:
// Ĭ<>Ϲ<EFBFBD><CFB9><EFBFBD>Ȱ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ΪNULL
TeeStreamBuf()
: m_originalBuf(NULL), m_level(LOGNORMAL)
2025-02-27 16:28:04 +08:00
{
2025-03-05 17:47:47 +08:00
pthread_mutex_init(&m_mutex, NULL);
2025-02-27 16:28:04 +08:00
}
// <20><><EFBFBD>ι<EFBFBD><CEB9>죺ֱ<ECA3BA>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
TeeStreamBuf(std::streambuf* originalBuf, LogLevel level)
: m_originalBuf(originalBuf), m_level(level)
{
2025-03-05 17:47:47 +08:00
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);
2025-02-27 16:28:04 +08:00
}
// <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>
void init(std::streambuf* originalBuf, LogLevel level)
{
m_originalBuf = originalBuf;
m_level = level;
2025-03-05 17:47:47 +08:00
pthread_mutex_lock(&m_mutex);
2025-02-27 16:28:04 +08:00
m_buffer.clear();
2025-03-05 17:47:47 +08:00
pthread_mutex_unlock(&m_mutex);
2025-02-27 16:28:04 +08:00
}
protected:
// <20><> flush <20><> std::endl ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sync()
virtual int sync()
{
// <20><><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ͬ<EFBFBD><CDAC>
if (m_originalBuf) {
m_originalBuf->pubsync();
}
// <20>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD> flush
flushBuffer();
return 0; // <20>ɹ<EFBFBD>
}
// <20><>д<EFBFBD><D0B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʱ<EFBFBD><CAB1>overflow() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual int_type overflow(int_type ch)
{
if (ch == traits_type::eof()) {
return ch;
}
// 1) д<><D0B4>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
if (m_originalBuf) {
if (m_originalBuf->sputc(static_cast<char>(ch)) == traits_type::eof()) {
return traits_type::eof();
}
}
2025-03-05 17:47:47 +08:00
// 2) <20><EFBFBD><E6B5BD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>棬ע<E6A3AC><D7A2><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));
2025-02-27 16:28:04 +08:00
// 3) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD> flushBuffer()
if (ch == '\n') {
2025-03-05 17:47:47 +08:00
flushBuffer_locked();
2025-02-27 16:28:04 +08:00
}
2025-03-05 17:47:47 +08:00
pthread_mutex_unlock(&m_mutex);
2025-02-27 16:28:04 +08:00
return ch;
}
private:
2025-03-05 17:47:47 +08:00
// <20>ڲ<EFBFBD><DAB2><EFBFBD><E6B1BE><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void flushBuffer_locked()
2025-02-27 16:28:04 +08:00
{
if (m_buffer.empty()) {
return;
}
2025-03-05 17:47:47 +08:00
// <20><><EFBFBD>ݵȼ<DDB5><C8BC>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>أ<EFBFBD><D8A3><EFBFBD> m_buffer д<><D0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6> list
2025-02-27 16:28:04 +08:00
switch (m_level) {
case LOGERROR:
2025-03-05 17:47:47 +08:00
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
2025-03-03 18:20:00 +08:00
else if (normalOutputEnabled) {
pthread_mutex_lock(&normalListMutex);
normalList.push_back(m_buffer);
pthread_mutex_unlock(&normalListMutex);
2025-02-27 16:28:04 +08:00
}
2025-03-05 17:47:47 +08:00
else if (warnOutputEnabled) {
2025-02-27 16:28:04 +08:00
pthread_mutex_lock(&warnListMutex);
warnList.push_back(m_buffer);
pthread_mutex_unlock(&warnListMutex);
}
2025-03-05 17:47:47 +08:00
else if (errorOutputEnabled) {
2025-03-03 18:20:00 +08:00
pthread_mutex_lock(&errorListMutex);
errorList.push_back(m_buffer);
pthread_mutex_unlock(&errorListMutex);
2025-02-27 16:28:04 +08:00
}
break;
case LOGWARN:
2025-03-05 17:47:47 +08:00
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
2025-03-03 18:20:00 +08:00
else if (normalOutputEnabled) {
2025-02-27 16:28:04 +08:00
pthread_mutex_lock(&normalListMutex);
normalList.push_back(m_buffer);
pthread_mutex_unlock(&normalListMutex);
}
2025-03-05 17:47:47 +08:00
else if (warnOutputEnabled) {
2025-03-03 18:20:00 +08:00
pthread_mutex_lock(&warnListMutex);
warnList.push_back(m_buffer);
pthread_mutex_unlock(&warnListMutex);
}
2025-02-27 16:28:04 +08:00
break;
case LOGNORMAL:
2025-03-05 17:47:47 +08:00
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
debugList.push_back(m_buffer);
pthread_mutex_unlock(&debugListMutex);
}
2025-03-03 18:20:00 +08:00
else if (normalOutputEnabled) {
2025-02-27 16:28:04 +08:00
pthread_mutex_lock(&normalListMutex);
normalList.push_back(m_buffer);
pthread_mutex_unlock(&normalListMutex);
}
2025-03-03 18:20:00 +08:00
break;
2025-02-27 16:28:04 +08:00
}
m_buffer.clear();
}
2025-03-05 17:47:47 +08:00
// <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);
}
2025-02-27 16:28:04 +08:00
private:
// <20><>ֹ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ɵĸ<C9B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
2025-03-05 17:47:47 +08:00
TeeStreamBuf& operator=(const TeeStreamBuf&);
2025-02-27 16:28:04 +08:00
private:
std::streambuf* m_originalBuf;
LogLevel m_level;
std::string m_buffer;
2025-03-05 17:47:47 +08:00
pthread_mutex_t m_mutex;
2025-02-27 16:28:04 +08:00
};
// ------------------ ȫ<><C8AB>Tee<65><65><EFBFBD>󣨱<EFBFBD><F3A3A8B1><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5> ------------------
static TeeStreamBuf g_errorTeeBuf;
static TeeStreamBuf g_warnTeeBuf;
static TeeStreamBuf g_normalTeeBuf;
// ------------------ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<E1B9A9><D2BB>ȫ<EFBFBD>ֵ<EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------
// <20><>ԭʼbufĬ<66><C4AC>Ϊ NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>նˣ<D5B6><CBA3><EFBFBD>ֻ<EFBFBD>浽 debugList(<28><><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD>)
2025-03-03 18:20:00 +08:00
//static std::ostream g_debug(&g_debugTeeBuf);
// <20><> qDebug() ӳ<><EFBFBD><E4B5BD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
2025-03-03 18:20:00 +08:00
//#define qDebug() g_debug
2025-02-27 16:28:04 +08:00
// ------------------ <20>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------
// ֻ<>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> init(...) <20><>ʼ<EFBFBD><CABC> TeeStreamBuf<75><66>
// ֮<><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> new <20><> <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>õĶ<C3B5><C4B6><EFBFBD><EFBFBD><EFBFBD>
void redirectErrorOutput(bool enabled)
{
errorOutputEnabled = enabled;
if (enabled) {
if (g_originalCerrBuf == NULL) {
g_originalCerrBuf = std::cerr.rdbuf();
g_errorTeeBuf.init(g_originalCerrBuf, LOGERROR);
2025-02-27 16:28:04 +08:00
}
std::cerr.rdbuf(&g_errorTeeBuf);
} else {
if (g_originalCerrBuf) {
std::cerr.rdbuf(g_originalCerrBuf);
}
}
2025-02-25 16:33:11 +08:00
}
2025-02-27 16:28:04 +08:00
void redirectWarnOutput(bool enabled)
{
warnOutputEnabled = enabled;
if (enabled) {
if (g_originalClogBuf == NULL) {
g_originalClogBuf = std::clog.rdbuf();
g_warnTeeBuf.init(g_originalClogBuf, LOGWARN);
2025-02-27 16:28:04 +08:00
}
std::clog.rdbuf(&g_warnTeeBuf);
} else {
if (g_originalClogBuf) {
std::clog.rdbuf(g_originalClogBuf);
}
}
2025-02-25 16:33:11 +08:00
}
2025-02-27 16:28:04 +08:00
void redirectNormalOutput(bool enabled)
{
normalOutputEnabled = enabled;
if (enabled) {
if (g_originalCoutBuf == NULL) {
g_originalCoutBuf = std::cout.rdbuf();
g_normalTeeBuf.init(g_originalCoutBuf, LOGNORMAL);
2025-02-27 16:28:04 +08:00
}
std::cout.rdbuf(&g_normalTeeBuf);
} else {
if (g_originalCoutBuf) {
std::cout.rdbuf(g_originalCoutBuf);
}
}
}
2025-01-16 16:17:01 +08:00
2025-03-03 18:20:00 +08:00
// ------------------ <20>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------
void redirectDebugOutput(bool enable)
{
2025-03-03 18:20:00 +08:00
debugOutputEnabled = enable;
// <20><>ȥ<EFBFBD><C8A5> clog.rdbuf()
// <20><>ȥ install <20>κ<EFBFBD> msg handler
}
// ------------------ Qt4 <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------
void myQtMsgHandler(QtMsgType type, const char *msg)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD>д<EFBFBD><D0B4> debugList
if (debugOutputEnabled) {
pthread_mutex_lock(&debugListMutex);
2025-03-04 17:29:04 +08:00
debugList.push_back(msg);
2025-03-03 18:20:00 +08:00
pthread_mutex_unlock(&debugListMutex);
}
2025-03-04 17:29:04 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FILE* output = nullptr;
2025-03-03 18:20:00 +08:00
const char* typeStr = "";
switch (type) {
case QtDebugMsg:
typeStr = "Debug";
2025-03-04 17:29:04 +08:00
output = stdout; // Debug <20>߱<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
2025-03-03 18:20:00 +08:00
break;
case QtWarningMsg:
typeStr = "Warning";
2025-03-04 17:29:04 +08:00
output = stderr; // Warning <20>߱<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
2025-03-03 18:20:00 +08:00
break;
case QtCriticalMsg:
typeStr = "Critical";
2025-03-04 17:29:04 +08:00
output = stderr; // Critical <20>߱<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
2025-03-03 18:20:00 +08:00
break;
case QtFatalMsg:
typeStr = "Fatal";
2025-03-04 17:29:04 +08:00
output = stderr; // Fatal <20>߱<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
2025-03-03 18:20:00 +08:00
break;
}
2025-03-03 18:20:00 +08:00
2025-03-04 17:29:04 +08:00
fprintf(output, "[%s] %s\n", typeStr, msg);
fflush(output);
// Fatal ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
if (type == QtFatalMsg) {
2025-03-03 18:20:00 +08:00
abort();
2025-03-04 17:29:04 +08:00
}
}
2025-02-27 16:28:04 +08:00
// ------------------ <20>Զ<EFBFBD><D4B6><EFBFBD> printf <20><><EFBFBD><EFBFBD> ------------------
// <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> normal <20><><EFBFBD><EFBFBD> => <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>normalList(<28><><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȫ<EFBFBD>־<EFBFBD>̬<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ printfmtx
static pthread_mutex_t printfmtx = PTHREAD_MUTEX_INITIALIZER;
// RAII<49><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
class LockGuard {
public:
explicit LockGuard(pthread_mutex_t& mutex) : mtx(mutex) {
pthread_mutex_lock(&mtx);
}
~LockGuard() {
pthread_mutex_unlock(&mtx);
}
private:
pthread_mutex_t& mtx;
};
2025-02-27 16:28:04 +08:00
int customPrintf(const char* format, ...)
{
// <20>ڽ<EFBFBD><DABD><EFBFBD><EBBAAF>ʱ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
LockGuard lock(printfmtx);
2025-02-25 16:33:11 +08:00
va_list args;
va_start(args, format);
2025-02-27 16:28:04 +08:00
2025-02-25 16:33:11 +08:00
char buffer[1024];
2025-02-26 16:39:10 +08:00
int written = vsnprintf(buffer, sizeof(buffer), format, args);
2025-02-25 16:33:11 +08:00
va_end(args);
2025-02-26 16:39:10 +08:00
if (written < 0) {
return -1;
2025-02-25 16:33:11 +08:00
}
// <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> std::cout
2025-02-27 16:28:04 +08:00
std::cout << buffer << std::endl;
2025-02-25 16:33:11 +08:00
2025-02-27 16:28:04 +08:00
return written;
2025-02-25 16:33:11 +08:00
}
2025-03-04 17:29:04 +08:00
///////////////////////////////////////////////////////////////////////////////
void echo_msg_errexy(const char *file_name, int line_no, int rv, const char *fmt, ...) {
char __buf[1024];
va_list __ap;
va_start(__ap, fmt);
vsnprintf(__buf, sizeof(__buf), fmt, __ap);
va_end(__ap);
// <20>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
printf("[ERROR] rv=%d %s:%d => %s", rv, file_name, line_no, __buf);
fflush(stdout);
// д<><D0B4> errorList
if (errorOutputEnabled) {
pthread_mutex_lock(&errorListMutex);
errorList.push_back(std::string(__buf));
pthread_mutex_unlock(&errorListMutex);
}
}
void echo_msg_warnexy(const char *file_name, int line_no, const char *fmt, ...) {
char __buf[1024];
va_list __ap;
va_start(__ap, fmt);
vsnprintf(__buf, sizeof(__buf), fmt, __ap);
va_end(__ap);
// <20>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
printf("[WARN ] %s:%d => %s", file_name, line_no, __buf);
fflush(stdout);
2025-03-03 18:20:00 +08:00
2025-03-04 17:29:04 +08:00
// д<><D0B4> warnList
if (warnOutputEnabled) {
pthread_mutex_lock(&warnListMutex);
warnList.push_back(std::string(__buf));
pthread_mutex_unlock(&warnListMutex);
}
}
void echo_msg_debugexy(const char *file_name, int line_no, const char *fmt, ...) {
char __buf[1024];
va_list __ap;
va_start(__ap, fmt);
vsnprintf(__buf, sizeof(__buf), fmt, __ap);
va_end(__ap);
// <20>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
printf("[DEBUG] %s:%d => %s", file_name, line_no, __buf);
fflush(stdout);
// д<><D0B4> normalList
if (normalOutputEnabled) {
pthread_mutex_lock(&normalListMutex);
normalList.push_back(std::string(__buf));
pthread_mutex_unlock(&normalListMutex);
}
}
2025-02-25 16:33:11 +08:00
///////////////////////////////////////////////////////////////////////////////
2025-03-07 18:27:03 +08:00
void Worker::telnetetst(QTcpSocket* clientSocket) {
2025-03-06 18:41:48 +08:00
int ip_count = 0;
int telnet_count = 0;
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>̨<EFBFBD>˼<EFBFBD><CBBC><EFBFBD>lnk20250114
pthread_mutex_lock(&mtx); std::cout << "testping hold lock !!!!!!!!!!!" << std::endl;
2025-03-07 18:27:03 +08:00
Worker::init_ping_telnet(clientSocket,ip_count, telnet_count);
2025-03-06 18:41:48 +08:00
Cout_account_information();
pthread_mutex_unlock(&mtx); std::cout << "testping free lock !!!!!!!!!!!" << std::endl;
}
2025-01-16 16:17:01 +08:00