2025-01-16 16:17:01 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @file: $RCSfile: save2json.h,v $
|
|
|
|
|
|
* @brief: $IEC 61850 Protocol
|
|
|
|
|
|
*
|
|
|
|
|
|
* @version: $Revision: 1.5 $
|
|
|
|
|
|
* @date: $Date: 2018/12/23 12:39:52 $
|
|
|
|
|
|
* @author: $Author: lizhongming $
|
|
|
|
|
|
* @state: $State: Exp $
|
|
|
|
|
|
*
|
|
|
|
|
|
* @latest: $Id: save2json.h,v 1.5 2018/12/23 12:39:52 lizhongming Exp $
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef SAVE2DB_8ue3hy0923r_H
|
|
|
|
|
|
#define SAVE2DB_8ue3hy0923r_H
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
|
#endif
|
|
|
|
|
|
extern int g_front_seg_index;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <map>
|
|
|
|
|
|
#include <list>
|
|
|
|
|
|
|
2025-02-28 16:28:15 +08:00
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
#include <QThread>
|
|
|
|
|
|
|
|
|
|
|
|
//lnk20250106
|
|
|
|
|
|
#include "../include/rocketmq/SimpleProducer.h"
|
2025-02-28 16:28:15 +08:00
|
|
|
|
//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
|
|
|
|
|
#include "../cfg_parse/custom_printf.h"//lnk20250225
|
|
|
|
|
|
#include <csignal>
|
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
#include <QTcpServer>
|
|
|
|
|
|
#include <QTcpSocket>
|
|
|
|
|
|
#include <QMutex>
|
|
|
|
|
|
#include <QMutexLocker>
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
#include <QTimer>
|
|
|
|
|
|
#include <QCoreApplication>
|
|
|
|
|
|
#include <QStringList>
|
|
|
|
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
extern int G_TEST_NUM;
|
|
|
|
|
|
extern void ledger(const char* terminal_id = NULL,QIODevice* outputDevice = NULL);
|
2025-02-10 17:03:15 +08:00
|
|
|
|
extern void value_print(const char *variableName, QTcpSocket *clientSocket);
|
2025-01-16 16:17:01 +08:00
|
|
|
|
extern int TEST_PORT;
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//struct json_pair_info
|
|
|
|
|
|
//{
|
|
|
|
|
|
// string topic; //<Topic name="HISDATA" desc="<22><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>"> "RTDATA" ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD> "RTDATASOE"ʵʱSOE<4F>¼<EFBFBD> <20><>
|
|
|
|
|
|
// string data_type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>01/04:<3A><>̬/<2F>ٲ<EFBFBD><D9B2><EFBFBD>̬<EFBFBD><CCAC>02/05:<3A><><EFBFBD><EFBFBD>/<2F>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD>䣬03/06:<3A><>̬/<2F>ٲ<EFBFBD><D9B2><EFBFBD>̬
|
|
|
|
|
|
// string item; //<Item name="V" desc="<22><>ѹ" type="4" > <20><>"I" "PQ" <20><>
|
|
|
|
|
|
// string sequence; //"A" <20><> "B" <20><> "C" <20><> "T"
|
|
|
|
|
|
// string name; //json<6F><6E>key
|
|
|
|
|
|
// int type; //6-ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9-ʵʱSOE<4F>¼<EFBFBD>
|
|
|
|
|
|
// string mms_ref; //mms<6D><73>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
|
// float coeff; //Coefficient:<3A><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|
|
|
|
|
// unsigned short PltFlag; //0xffff
|
|
|
|
|
|
//};
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
class KafkaSendThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
// Q_OBJECT
|
|
|
|
|
|
//public:
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
//WW 2023-08-22 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>̺߳<DFB3>WebSocket<65>߳<EFBFBD>
|
|
|
|
|
|
class SQLExcuteThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class WebSocketThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//lnk20241029
|
|
|
|
|
|
class WebhttpThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
class httpThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
//lnk20241202
|
|
|
|
|
|
/*class mqtestThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};*/
|
|
|
|
|
|
//lnk20250106
|
2025-02-28 16:28:15 +08:00
|
|
|
|
extern bool showinshellflag;
|
|
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
class Worker : public QObject
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
2025-02-27 16:28:04 +08:00
|
|
|
|
Worker(QObject *parent = NULL)
|
|
|
|
|
|
: QObject(parent),
|
|
|
|
|
|
server(NULL),
|
|
|
|
|
|
TEST_NUM(G_TEST_NUM),
|
|
|
|
|
|
timer(NULL),
|
2025-02-28 16:28:15 +08:00
|
|
|
|
historyIndex(-1),
|
|
|
|
|
|
stopViewLog(false),
|
|
|
|
|
|
activeClient(NULL)
|
2025-02-27 16:28:04 +08:00
|
|
|
|
{
|
2025-02-10 17:03:15 +08:00
|
|
|
|
}
|
2025-02-27 16:28:04 +08:00
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
~Worker() {
|
2025-02-10 17:03:15 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
stopServer();
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-28 16:28:15 +08:00
|
|
|
|
void handleViewLogCommand(const QString& command, QTcpSocket* clientSocket);
|
|
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
public slots:
|
|
|
|
|
|
void startServer() {
|
2025-02-10 17:03:15 +08:00
|
|
|
|
if (server) {
|
|
|
|
|
|
qDebug() << "Server is already running!";
|
|
|
|
|
|
return; // <20><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-03 18:20:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD> QTcpServer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
server = new QTcpServer(this);
|
2025-01-16 16:17:01 +08:00
|
|
|
|
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
|
|
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
// <20><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>˿<EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
if (!server->listen(QHostAddress::Any, TEST_PORT)) {
|
|
|
|
|
|
std::cout << "Server failed to start!" << std::endl;
|
|
|
|
|
|
qDebug() << "Server failed to start!";
|
|
|
|
|
|
emit serverError();
|
|
|
|
|
|
return;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
std::cout << "Server is running on port " << TEST_PORT << std::endl;
|
|
|
|
|
|
qDebug() << QString("Server is running on port %1").arg(TEST_PORT);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
timer = new QTimer(this);
|
|
|
|
|
|
connect(timer, SIGNAL(timeout()), this, SLOT(doPeriodicTask()));
|
2025-02-10 17:03:15 +08:00
|
|
|
|
timer->start(60000); // ÿ60<36>봥<EFBFBD><EBB4A5>һ<EFBFBD><D2BB>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
std::cout << "Timer started, event loop running in thread: " << QThread::currentThreadId() << std::endl;
|
|
|
|
|
|
qDebug() << "Timer started, event loop running in thread:" << QThread::currentThreadId();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
void stopServer() {
|
|
|
|
|
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
|
if (server) {
|
|
|
|
|
|
server->close();
|
|
|
|
|
|
delete server;
|
|
|
|
|
|
server = NULL;
|
|
|
|
|
|
qDebug() << "Server stopped.";
|
|
|
|
|
|
}
|
2025-02-27 16:28:04 +08:00
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
// ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
if (timer) {
|
|
|
|
|
|
timer->stop();
|
|
|
|
|
|
delete timer;
|
|
|
|
|
|
timer = NULL;
|
|
|
|
|
|
qDebug() << "Timer stopped.";
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
void setTestNum(int num) {
|
|
|
|
|
|
QMutexLocker locker(&mutex);
|
|
|
|
|
|
TEST_NUM = num;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
|
void doPeriodicTask() {
|
|
|
|
|
|
QMutexLocker locker(&mutex);
|
|
|
|
|
|
std::cout << "Executing TEST_NUM is " << TEST_NUM << std::endl;
|
|
|
|
|
|
qDebug() << "doPeriodicTask() called. TEST_NUM = " << TEST_NUM;
|
|
|
|
|
|
|
|
|
|
|
|
if (TEST_NUM != 0) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_300()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_300()\n";
|
|
|
|
|
|
rocketmq_test_300(TEST_NUM, g_front_seg_index);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void onNewConnection() {
|
|
|
|
|
|
if (!server) return;
|
|
|
|
|
|
|
|
|
|
|
|
QTcpSocket *clientSocket = server->nextPendingConnection();
|
|
|
|
|
|
qDebug() << "New connection established!";
|
|
|
|
|
|
std::cout << "New connection established!\n";
|
|
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿɶ<DDBF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> onReadyRead()
|
2025-01-16 16:17:01 +08:00
|
|
|
|
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
|
2025-02-27 16:28:04 +08:00
|
|
|
|
// <20><><EFBFBD>ͻ<EFBFBD><CDBB>˶Ͽ<CBB6>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> socket
|
|
|
|
|
|
connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater()));
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
|
|
|
|
|
|
if (clientSocket) {
|
|
|
|
|
|
std::cout << "clientSocket OK\n";
|
|
|
|
|
|
clientSocket->write("Welcome to the test shell. Type 'help' for available commands.\n> ");
|
|
|
|
|
|
clientSocket->flush(); // ȷ<><C8B7><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ֽڴ<EFBFBD><EFBFBD><EFBFBD>Telnet<EFBFBD><EFBFBD><EFBFBD>룬ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD><EFBFBD><EFBFBD>˸س<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»س<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> processCommand <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
2025-01-16 16:17:01 +08:00
|
|
|
|
void onReadyRead() {
|
|
|
|
|
|
QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
|
|
|
|
|
|
if (!clientSocket) {
|
|
|
|
|
|
std::cout << "Invalid socket\n";
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QByteArray data = clientSocket->readAll();
|
2025-02-27 16:28:04 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < data.size(); ++i) {
|
|
|
|
|
|
char c = data[i];
|
|
|
|
|
|
|
2025-02-28 16:28:15 +08:00
|
|
|
|
if (c == 'q') { // ? <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> `q` <20>˳<EFBFBD> `viewlog`
|
|
|
|
|
|
std::cout << "Received 'q' from shell socket! Exiting viewlog...\n";
|
|
|
|
|
|
if (activeClient == clientSocket) {
|
|
|
|
|
|
stopViewLog = true; // ? <20><> `viewlog` <20>˳<EFBFBD>
|
2025-03-03 18:20:00 +08:00
|
|
|
|
|
2025-02-28 16:28:15 +08:00
|
|
|
|
clientSocket->write("\nLog view stopped. Returning to shell.\n> ");
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
}
|
2025-02-28 16:28:15 +08:00
|
|
|
|
return; // ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch (c) {
|
|
|
|
|
|
case '\r':
|
|
|
|
|
|
case '\n':
|
|
|
|
|
|
// ? <20><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (!currentCommand.isEmpty()) {
|
|
|
|
|
|
if (commandHistory.isEmpty() || commandHistory.last() != currentCommand) {
|
|
|
|
|
|
commandHistory.append(currentCommand);
|
|
|
|
|
|
}
|
|
|
|
|
|
historyIndex = commandHistory.size(); // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>֮<EFBFBD><D6AE>
|
|
|
|
|
|
|
|
|
|
|
|
processCommand(currentCommand, clientSocket);
|
|
|
|
|
|
currentCommand.clear();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
clientSocket->write("\n> ");
|
|
|
|
|
|
clientSocket->flush();
|
2025-02-27 16:28:04 +08:00
|
|
|
|
}
|
2025-02-28 16:28:15 +08:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '\x1b':
|
|
|
|
|
|
// ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ϼ<EFBFBD>ͷ `\x1b[A`<60><><EFBFBD>¼<EFBFBD>ͷ `\x1b[B`)
|
|
|
|
|
|
if (i + 2 < data.size() && data[i+1] == '[') {
|
|
|
|
|
|
char arrow = data[i+2];
|
|
|
|
|
|
if (arrow == 'A') {
|
|
|
|
|
|
handleUpArrow(clientSocket); // **<2A><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>**
|
|
|
|
|
|
} else if (arrow == 'B') {
|
|
|
|
|
|
handleDownArrow(clientSocket); // **<2A><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>**
|
|
|
|
|
|
}
|
|
|
|
|
|
i += 2; // ? **<2A><><EFBFBD><EFBFBD> ESC <20><><EFBFBD><EFBFBD> `\x1b[A` <20><> `\x1b[B`**
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '\x7f':
|
|
|
|
|
|
case '\x08':
|
|
|
|
|
|
// ? <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>
|
|
|
|
|
|
if (!currentCommand.isEmpty()) {
|
|
|
|
|
|
currentCommand.chop(1);
|
|
|
|
|
|
clientSocket->write("\b \b");
|
|
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
// ? <20><>ͨ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ӵ<EFBFBD> `currentCommand`
|
|
|
|
|
|
currentCommand.append(c);
|
|
|
|
|
|
clientSocket->write(&c, 1);
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->flush();
|
2025-02-28 16:28:15 +08:00
|
|
|
|
break;
|
2025-02-27 16:28:04 +08:00
|
|
|
|
}
|
2025-02-28 16:28:15 +08:00
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
}
|
2025-02-27 16:28:04 +08:00
|
|
|
|
}
|
2025-02-10 17:03:15 +08:00
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
signals:
|
|
|
|
|
|
void serverError();
|
2025-02-11 18:23:19 +08:00
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
private:
|
2025-02-28 16:28:15 +08:00
|
|
|
|
// ====================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD> =========================
|
|
|
|
|
|
bool stopViewLog; // ? <20><><EFBFBD>ﲻ<EFBFBD><EFB2BB>Ҫ static<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF> client
|
|
|
|
|
|
QTcpSocket* activeClient; // <20><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> `viewlog` <20>Ŀͻ<C4BF><CDBB><EFBFBD>
|
|
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
// --------------------
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// --------------------
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> onReadyRead() <EFBFBD><EFBFBD><EFBFBD><EFBFBD> if-else <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void processCommand(const QString &command, QTcpSocket *clientSocket) {
|
|
|
|
|
|
// <20><>ӡ<EFBFBD><D3A1>־
|
|
|
|
|
|
qDebug() << "Received command:" << command;
|
|
|
|
|
|
std::cout << "Received command: " << command.toStdString() << "\n";
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD> onReadyRead() <20>е<EFBFBD> if / else if <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// ------------------------------------------------------
|
2025-02-10 17:03:15 +08:00
|
|
|
|
if (command == "help") {
|
|
|
|
|
|
QString helpText = "Available commands:\n";
|
|
|
|
|
|
helpText += "TEST_NUM=<num> - Set the TEST_NUM\n";
|
|
|
|
|
|
helpText += "rc - Execute rocketmq_test_rc\n";
|
|
|
|
|
|
helpText += "rt - Execute rocketmq_test_rt\n";
|
|
|
|
|
|
helpText += "ud - Execute rocketmq_test_ud\n";
|
|
|
|
|
|
helpText += "set - Execute rocketmq_test_set\n";
|
2025-02-27 16:28:04 +08:00
|
|
|
|
helpText += "only - Execute rocketmq_test_only\n";
|
|
|
|
|
|
helpText += "log - Execute rocketmq_test_log\n";
|
2025-02-10 17:03:15 +08:00
|
|
|
|
helpText += "ledger <id> - Execute ledger with optional terminal_id\n";
|
2025-02-28 16:28:15 +08:00
|
|
|
|
helpText += "viewlog <level> - View logs (ERROR, WARN, NORMAL, DEBUG)\n";
|
2025-03-03 18:20:00 +08:00
|
|
|
|
helpText += "value <valuename> - Execute value print with valuename : iedcount frontfun frontindex remtable log\n";
|
2025-02-10 17:03:15 +08:00
|
|
|
|
helpText += "exit - Exit the shell\n";
|
|
|
|
|
|
helpText += "help - Show this help message\n";
|
|
|
|
|
|
clientSocket->write(helpText.toUtf8());
|
|
|
|
|
|
}
|
2025-02-28 16:28:15 +08:00
|
|
|
|
else if (command.startsWith("viewlog")) {
|
|
|
|
|
|
showinshellflag = true;
|
|
|
|
|
|
handleViewLogCommand(command, clientSocket);
|
|
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
2025-02-10 17:03:15 +08:00
|
|
|
|
else if (command.startsWith("TEST_NUM=")) {
|
2025-01-16 16:17:01 +08:00
|
|
|
|
bool ok;
|
|
|
|
|
|
int num = command.mid(9).toInt(&ok); // <20><>ȡ<EFBFBD>Ⱥź<C8BA><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
|
|
|
|
|
|
if (ok) {
|
|
|
|
|
|
setTestNum(num); // <20><><EFBFBD><EFBFBD> TEST_NUM
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("TEST_NUM updated\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
std::cout << "TEST_NUM updated\n";
|
|
|
|
|
|
} else {
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Invalid number\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
std::cout << "Invalid number\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>ı<EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
else if (command.startsWith("rc")) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_rc()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_rc()\n";
|
|
|
|
|
|
rocketmq_test_rc(); // <20><><EFBFBD><EFBFBD> rc <20><><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Executed rocketmq_test_rc\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>ı<EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
else if (command.startsWith("rt")) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_rt()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_rt()\n";
|
|
|
|
|
|
rocketmq_test_rt(); // <20><><EFBFBD><EFBFBD> rt <20><><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Executed rocketmq_test_rt\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>²<EFBFBD><C2B2><EFBFBD><EFBFBD>ı<EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
else if (command.startsWith("ud")) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_ud()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_ud()\n";
|
|
|
|
|
|
rocketmq_test_ud(); // <20><><EFBFBD><EFBFBD> ud <20><><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Executed rocketmq_test_ud\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20><><EFBFBD>ͽ<EFBFBD><CDBD>̿<EFBFBD><CCBF>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD>ı<EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
else if (command.startsWith("set")) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_set()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_set()\n";
|
|
|
|
|
|
rocketmq_test_set(); // <20><><EFBFBD><EFBFBD> set <20><><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Executed rocketmq_test_set\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD><EFBFBD>ı<EFBFBD>
|
2025-02-11 18:23:19 +08:00
|
|
|
|
else if (command.startsWith("only")) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_only()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_only()\n";
|
2025-02-27 16:28:04 +08:00
|
|
|
|
rocketmq_test_only(); // <20><><EFBFBD><EFBFBD> rocketmq_test_only <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
clientSocket->write("Executed rocketmq_test_only\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
|
|
|
|
else if (command.startsWith("log")) {
|
|
|
|
|
|
qDebug() << "Executing rocketmq_test_log()";
|
|
|
|
|
|
std::cout << "Executing rocketmq_test_log()\n";
|
|
|
|
|
|
rocketmq_test_log(); // <20><><EFBFBD><EFBFBD> log <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
clientSocket->write("Executed rocketmq_test_log\n");
|
2025-02-11 18:23:19 +08:00
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20>鿴<EFBFBD><E9BFB4>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>̨<EFBFBD><CCA8>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
else if (command.startsWith("ledger")) {
|
|
|
|
|
|
qDebug() << "Executing ledger()";
|
|
|
|
|
|
std::cout << "Executing ledger()\n";
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
QStringList parts = command.split(" "); // <20><><EFBFBD>ݿո<DDBF><D5B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (parts.size() > 1) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id<69>ţ<EFBFBD>
|
|
|
|
|
|
QString terminalId = parts[1];
|
|
|
|
|
|
std::cout << "Calling ledger with terminal_id: " << terminalId.toStdString() << std::endl;
|
|
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
ledger(terminalId.toStdString().c_str(), clientSocket); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ledger
|
|
|
|
|
|
clientSocket->write("Executed ledger with terminal_id\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
std::cout << "Calling ledger without parameters\n";
|
2025-02-27 16:28:04 +08:00
|
|
|
|
ledger(NULL, clientSocket); // <20><EFBFBD><DEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ledger
|
|
|
|
|
|
clientSocket->write("Executed ledger without parameters\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-02-14 16:44:38 +08:00
|
|
|
|
// <20>鿴<EFBFBD><E9BFB4>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>ָ<EFBFBD><D6B8>ֵ
|
2025-02-10 17:03:15 +08:00
|
|
|
|
else if (command.startsWith("value")) {
|
|
|
|
|
|
std::cout << "Executing value()" << std::endl;
|
2025-02-27 16:28:04 +08:00
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
QStringList parts = command.split(" ");
|
|
|
|
|
|
if (parts.size() > 1) {
|
2025-02-10 17:03:15 +08:00
|
|
|
|
QString variableName = parts[1];
|
|
|
|
|
|
std::cout << "Calling value() with variable name: " << variableName.toStdString() << std::endl;
|
2025-02-27 16:28:04 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> value_print() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
value_print(variableName.toStdString().c_str(), clientSocket);
|
|
|
|
|
|
clientSocket->write("Executed value with variable name: " + variableName.toUtf8() + "\n");
|
2025-02-10 17:03:15 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
std::cout << "Calling value without parameters" << std::endl;
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Please provide a variable name\n");
|
2025-02-10 17:03:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> exit <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
else if (command == "exit") {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>رտͻ<D5BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
clientSocket->write("Goodbye! Exiting shell...\n");
|
|
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
clientSocket->disconnectFromHost(); // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
clientSocket->waitForDisconnected(); // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
return;
|
2025-02-10 17:03:15 +08:00
|
|
|
|
}
|
2025-02-27 16:28:04 +08:00
|
|
|
|
// δ֪<CEB4><D6AA><EFBFBD><EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
else {
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("Unknown command\n");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3ACBB><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>ʾ<EFBFBD><CABE>
|
|
|
|
|
|
clientSocket->write("> ");
|
2025-01-16 16:17:01 +08:00
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-27 16:28:04 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD>¼<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void handleUpArrow(QTcpSocket *clientSocket) {
|
|
|
|
|
|
if (!commandHistory.isEmpty() && historyIndex > 0) {
|
|
|
|
|
|
historyIndex--;
|
|
|
|
|
|
currentCommand = commandHistory[historyIndex];
|
|
|
|
|
|
|
2025-02-28 16:28:15 +08:00
|
|
|
|
// **<2A><><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0>**
|
|
|
|
|
|
clientSocket->write("\r"); // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>굽<EFBFBD><EAB5BD><EFBFBD><EFBFBD>
|
|
|
|
|
|
clientSocket->write(" "); // <20>ÿո<D5B8>
|
|
|
|
|
|
clientSocket->write("\r> "); // <20><><EFBFBD>´<EFBFBD>ӡ<EFBFBD><D3A1>ʾ<EFBFBD><CABE>
|
|
|
|
|
|
clientSocket->write(currentCommand.toUtf8()); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD>¼<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void handleDownArrow(QTcpSocket *clientSocket) {
|
|
|
|
|
|
if (!commandHistory.isEmpty() && historyIndex < commandHistory.size() - 1) {
|
|
|
|
|
|
historyIndex++;
|
|
|
|
|
|
currentCommand = commandHistory[historyIndex];
|
|
|
|
|
|
|
2025-02-28 16:28:15 +08:00
|
|
|
|
// **<2A><><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0>**
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->write("\r");
|
|
|
|
|
|
clientSocket->write(" ");
|
|
|
|
|
|
clientSocket->write("\r> ");
|
2025-02-28 16:28:15 +08:00
|
|
|
|
clientSocket->write(currentCommand.toUtf8()); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
2025-02-27 16:28:04 +08:00
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (historyIndex == commandHistory.size() - 1) {
|
2025-02-28 16:28:15 +08:00
|
|
|
|
// **<2A><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD><D9B0>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>**
|
2025-02-27 16:28:04 +08:00
|
|
|
|
historyIndex = commandHistory.size();
|
|
|
|
|
|
currentCommand.clear();
|
|
|
|
|
|
|
|
|
|
|
|
clientSocket->write("\r");
|
|
|
|
|
|
clientSocket->write(" ");
|
|
|
|
|
|
clientSocket->write("\r> ");
|
|
|
|
|
|
clientSocket->flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
QTcpServer *server;
|
|
|
|
|
|
QTimer *timer;
|
|
|
|
|
|
int TEST_NUM;
|
|
|
|
|
|
QMutex mutex;
|
2025-02-27 16:28:04 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QList<QString> commandHistory; // <20>洢<EFBFBD><E6B4A2>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
int historyIndex; // <20><>ǰ<EFBFBD><C7B0>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QString currentCommand; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2025-02-10 17:03:15 +08:00
|
|
|
|
|
2025-01-16 16:17:01 +08:00
|
|
|
|
//lnk20241213
|
|
|
|
|
|
class mqconsumerThread : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OnTimerThread : public QThread//<2F><>ʱ<EFBFBD>߳<EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void run();
|
|
|
|
|
|
};
|
|
|
|
|
|
//WW 2023-08-22 end
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//lnk20250106<30><36><EFBFBD><EFBFBD>̨<EFBFBD>˽ṹ
|
|
|
|
|
|
typedef struct terminal terminal;
|
|
|
|
|
|
typedef struct monitor monitor;
|
|
|
|
|
|
struct monitor // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
|
|
|
|
|
|
{
|
|
|
|
|
|
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];
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
struct terminal // <20>ն<EFBFBD>̨<EFBFBD><CCA8>
|
|
|
|
|
|
{
|
|
|
|
|
|
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];
|
2025-02-10 17:03:15 +08:00
|
|
|
|
char processNo[64]; //lnk20250210<31><30><EFBFBD>̺<EFBFBD>
|
2025-01-16 16:17:01 +08:00
|
|
|
|
char addr_str[64];
|
|
|
|
|
|
char port[64];
|
|
|
|
|
|
char timestamp[64];
|
|
|
|
|
|
monitor line[10]; // <20><><EFBFBD><EFBFBD> 10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#endif //SAVE2DB_8ue3hy0923r_H
|