Files
microser/json/save2json.h

660 lines
20 KiB
C
Raw Normal View History

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-03-06 15:24:49 +08:00
#include "../mms/db_interface.h"
2025-01-16 16:17:01 +08:00
#include <QThread>
//lnk20250106
#include "../include/rocketmq/SimpleProducer.h"
//<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;
2025-03-06 18:41:48 +08:00
extern void redirectErrorOutput(bool enable);
extern void redirectWarnOutput(bool enable);
extern void redirectNormalOutput(bool enable);
extern void redirectDebugOutput(bool enable);
2025-01-16 16:17:01 +08:00
class KafkaSendThread : public QThread
{
protected:
void run();
};
//WW 2023-08-22 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>̺߳<DFB3>WebSocket<65>߳<EFBFBD>
class WebSocketThread : public QThread
{
protected:
void run();
};
//lnk20241029
class WebhttpThread : public QThread
{
protected:
void run();
};
class httpThread : public QThread
{
protected:
void run();
};
2025-04-29 15:05:36 +08:00
2025-01-16 16:17:01 +08:00
//lnk20250106
extern bool showinshellflag;
2025-03-04 17:29:04 +08:00
#ifdef __cplusplus
extern "C" {
#endif
void doMonitorTaskmain(void);
#ifdef __cplusplus
}
#endif
2025-03-05 17:47:47 +08:00
// ====================== Telnet <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ======================
// Telnet <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>:
#define IAC 255 // Interpret As Command
#define DONT 254
#define TELDO 253
#define WONT 252
#define WILL 251
// Telnet ѡ<><EFBFBD><EEB3A3>:
#define TELOPT_ECHO 1 // <20><><EFBFBD><EFBFBD>
#define TELOPT_SUPPRESS_GO_AHEAD 3 // SGA
#define TELOPT_LINEMODE 34 // <20><>ģʽ
/**
* @brief Worker<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Telnet<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
*/
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),
historyIndex(-1),
2025-03-07 18:27:03 +08:00
stopViewLog(true),
g_stopTelnetTest(true),
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
}
void handleViewLogCommand(const QString& command, QTcpSocket* clientSocket);
2025-03-07 18:27:03 +08:00
int init_ping_telnet(QTcpSocket* clientSocket, int& ip_count, int& telnet_count);
void telnetetst(QTcpSocket* clientSocket);
2025-03-05 17:47:47 +08:00
2025-01-16 16:17:01 +08:00
public slots:
2025-03-05 17:47:47 +08:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
2025-01-16 16:17:01 +08:00
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>
}
// <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
2025-03-05 17:47:47 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD>̵߳ļ<CCB5><C4BC><EFBFBD>
2025-03-04 17:29:04 +08:00
QTimer *monitorTimer = new QTimer(this);
connect(monitorTimer, SIGNAL(timeout()), this, SLOT(doMonitorTask()));
monitorTimer->start(1000); // ÿ1<C3BF><EFBFBD><EBB4A5>һ<EFBFBD><D2BB>
2025-03-05 17:47:47 +08:00
std::cout << "Timer started, event loop running in thread: "
<< QThread::currentThreadId() << std::endl;
2025-01-16 16:17:01 +08:00
qDebug() << "Timer started, event loop running in thread:" << QThread::currentThreadId();
}
2025-03-05 17:47:47 +08:00
/**
* @brief ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
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-03-05 17:47:47 +08:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TEST_NUM
*/
2025-01-16 16:17:01 +08:00
void setTestNum(int num) {
QMutexLocker locker(&mutex);
TEST_NUM = num;
}
2025-03-06 18:41:48 +08:00
void setTestlog(bool flag) {
redirectErrorOutput(flag);
redirectWarnOutput(flag);
redirectNormalOutput(flag);
redirectDebugOutput(flag);
}
2025-01-16 16:17:01 +08:00
private slots:
2025-03-05 17:47:47 +08:00
/**
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
2025-01-16 16:17:01 +08:00
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);
}
}
2025-03-05 17:47:47 +08:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
2025-03-04 17:29:04 +08:00
void doMonitorTask() {
doMonitorTaskmain();
}
2025-03-05 17:47:47 +08:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
2025-01-16 16:17:01 +08:00
void onNewConnection() {
if (!server) return;
QTcpSocket *clientSocket = server->nextPendingConnection();
qDebug() << "New connection established!";
std::cout << "New connection established!\n";
2025-03-05 17:47:47 +08:00
// <20><><EFBFBD><EFBFBD> readyRead / disconnected
2025-01-16 16:17:01 +08:00
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
2025-02-27 16:28:04 +08:00
connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater()));
2025-01-16 16:17:01 +08:00
2025-03-05 17:47:47 +08:00
// <20><><EFBFBD><EFBFBD> Telnet Э<><D0AD>
sendTelnetNegotiation(clientSocket);
// <20><><EFBFBD>ͻ<EFBFBD>ӭ<EFBFBD><D3AD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
2025-01-16 16:17:01 +08:00
if (clientSocket) {
std::cout << "clientSocket OK\n";
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("Welcome to the test shell. Type 'help' for available commands.\r\n");
printPrompt(clientSocket); // ͳһ<CDB3><D2BB>ӡ<EFBFBD><D3A1>ʾ<EFBFBD><CABE>
2025-01-16 16:17:01 +08:00
}
}
2025-02-27 16:28:04 +08:00
/**
2025-03-05 17:47:47 +08:00
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>͵<EFBFBD>Telnet<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
*/
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
for (int i = 0; i < data.size(); ++i) {
2025-03-05 17:47:47 +08:00
unsigned char c = static_cast<unsigned char>(data[i]);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⵽ IAC(255)<29><>˵<EFBFBD><CBB5><EFBFBD><EFBFBD> Telnet Э<><D0AD>ָ<EFBFBD><D6B8>
if (c == IAC) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TELDO/DONT/WILL/WONT + option
if (i + 1 < data.size()) {
unsigned char cmd = static_cast<unsigned char>(data[i+1]);
if (cmd == TELDO || cmd == DONT || cmd == WILL || cmd == WONT) {
i += 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ֽ<EFBFBD>
} else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>IAC SB)<29><><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
i += 1;
}
}
continue;
}
2025-02-27 16:28:04 +08:00
2025-03-06 18:41:48 +08:00
// 1) <20><><EFBFBD><EFBFBD> '`' <20>˳<EFBFBD> viewlog <20><>ping
2025-03-06 15:24:49 +08:00
if (c == '`') {
std::cout << "Received '`' from shell socket! Exiting viewlog...\n";
if (activeClient == clientSocket) {
2025-03-05 17:47:47 +08:00
stopViewLog = true;
2025-03-06 18:41:48 +08:00
g_stopTelnetTest = true;
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("\r\nLog view stopped. Returning to shell.\r\n");
printPrompt(clientSocket);
2025-02-27 16:28:04 +08:00
}
2025-03-05 17:47:47 +08:00
return;
}
2025-03-05 17:47:47 +08:00
// 2) <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD>У<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (c == '\r' || c == '\n') {
if (!currentCommand.isEmpty()) {
// <20>ӵ<EFBFBD><D3B5><EFBFBD>ʷ
if (commandHistory.isEmpty() || commandHistory.last() != currentCommand) {
commandHistory.append(currentCommand);
}
2025-03-05 17:47:47 +08:00
historyIndex = commandHistory.size();
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>հ<EFBFBD>
//QString trimmedCmd = currentCommand.trimmed();
currentCommand.remove(0, 1);
processCommand(currentCommand, clientSocket);
currentCommand.clear();
} else {
// <20><><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD>ӡ<EFBFBD>µ<EFBFBD><C2B5><EFBFBD>ʾ<EFBFBD><CABE>
printPrompt(clientSocket);
}
continue;
}
// 3) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (c == '\x1b') {
if (i + 2 < data.size() && data[i+1] == '[') {
char arrow = data[i+2];
if (arrow == 'A') {
handleUpArrow(clientSocket);
} else if (arrow == 'B') {
handleDownArrow(clientSocket);
}
2025-03-05 17:47:47 +08:00
i += 2;
}
continue;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>̶<EFBFBD>Ϊ "> "<22><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2
2025-03-06 15:24:49 +08:00
const int promptLength = 1;
2025-03-05 17:47:47 +08:00
// 4) <20>˸<EFBFBD><CBB8><EFBFBD>
if (c == '\x7f' || c == '\b') {
// <20><><EFBFBD><EFBFBD> currentCommand <20>ij<EFBFBD><C4B3>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ַ<EFBFBD>
if (currentCommand.length() > promptLength) {
2025-03-05 17:47:47 +08:00
currentCommand.chop(1);
// <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD> "\b \b" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>
2025-03-05 17:47:47 +08:00
clientSocket->write("\b \b");
2025-02-27 16:28:04 +08:00
clientSocket->flush();
2025-03-05 17:47:47 +08:00
}
continue;
2025-02-27 16:28:04 +08:00
}
2025-03-05 17:47:47 +08:00
// 5) <20><>ͨ<EFBFBD>ַ<EFBFBD>
currentCommand.append(static_cast<char>(c));
clientSocket->write((const char*)&c, 1);
clientSocket->flush();
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-03-05 17:47:47 +08:00
// ========== Telnet Э<>̺<EFBFBD><CCBA><EFBFBD> ==========
void sendTelnetNegotiation(QTcpSocket *socket)
{
// <20><><EFBFBD><EFBFBD> WILL ECHO / WILL SUPPRESS-GO-AHEAD / DONT LINEMODE
static const unsigned char will_echo[3] = { IAC, WILL, TELOPT_ECHO };
static const unsigned char will_sga[3] = { IAC, WILL, TELOPT_SUPPRESS_GO_AHEAD };
static const unsigned char dont_linemode[3] = { IAC, DONT, TELOPT_LINEMODE };
socket->write(reinterpret_cast<const char*>(will_echo), 3);
socket->write(reinterpret_cast<const char*>(will_sga), 3);
socket->write(reinterpret_cast<const char*>(dont_linemode), 3);
socket->flush();
}
2025-03-05 17:47:47 +08:00
/**
* @brief <EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһʹ<EFBFBD><EFBFBD>\r\n<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>ӡ"> "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void printPrompt(QTcpSocket *clientSocket)
{
clientSocket->write("\n\r\x1B[K> ");
2025-03-05 17:47:47 +08:00
clientSocket->flush();
}
2025-02-27 16:28:04 +08:00
/**
2025-03-05 17:47:47 +08:00
* @brief ִ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>trimmed<EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
*/
2025-03-05 17:47:47 +08:00
void processCommand(const QString &cmd, QTcpSocket *clientSocket) {
qDebug() << "Received command:" << cmd;
std::cout << "Received command: " << cmd.toStdString() << "\n";
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (cmd == "help") {
QString helpText = "Available commands:\r\n";
helpText += "TEST_NUM=<num> - Set the TEST_NUM\r\n";
2025-03-06 18:41:48 +08:00
helpText += "LOG=<bool> - Set the LOG\r\n";
helpText += "telnettest - Set the telnettest\r\n";
2025-03-05 17:47:47 +08:00
helpText += "rc - Execute rocketmq_test_rc\r\n";
helpText += "rt - Execute rocketmq_test_rt\r\n";
helpText += "ud - Execute rocketmq_test_ud\r\n";
helpText += "set - Execute rocketmq_test_set\r\n";
helpText += "only - Execute rocketmq_test_only\r\n";
helpText += "log - Execute rocketmq_test_log\r\n";
2025-03-06 15:24:49 +08:00
helpText += "soe - Execute http_test_soe\r\n";
helpText += "qvvr - Execute http_test_qvvr\r\n";
helpText += "connect - Execute http_test_connect\r\n";
2025-03-05 17:47:47 +08:00
helpText += "ledger <id> - Execute ledger with optional terminal_id\r\n";
helpText += "viewlog <level> - View logs (ERROR, WARN, NORMAL, DEBUG)\r\n";
helpText += "value <valuename> - Execute value print with valuename : frontindex remtable iedcount frontfun log init\r\n";
2025-03-05 17:47:47 +08:00
helpText += "exit - Exit the shell\r\n";
helpText += "help - Show this help message\r\n";
clientSocket->write("\r\x1B[K");
2025-02-10 17:03:15 +08:00
clientSocket->write(helpText.toUtf8());
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("viewlog")) {
showinshellflag = true;
2025-03-05 17:47:47 +08:00
handleViewLogCommand(cmd, clientSocket);
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("TEST_NUM=")) {
2025-01-16 16:17:01 +08:00
bool ok;
2025-03-05 17:47:47 +08:00
int num = cmd.mid(9).toInt(&ok);
2025-01-16 16:17:01 +08:00
if (ok) {
2025-03-05 17:47:47 +08:00
setTestNum(num);
clientSocket->write("\r\x1B[K");
clientSocket->write("TEST_NUM updated\r\n");
2025-01-16 16:17:01 +08:00
} else {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("Invalid number\r\n");
2025-01-16 16:17:01 +08:00
}
}
2025-03-06 18:41:48 +08:00
else if (cmd.startsWith("LOG=")) {
bool ok;
bool flag = cmd.mid(4).toInt(&ok);
if (ok) {
setTestlog(flag);
clientSocket->write("\r\x1B[K");
clientSocket->write("TEST_NUM updated\r\n");
} else {
clientSocket->write("\r\x1B[K");
clientSocket->write("Invalid number\r\n");
}
}
else if (cmd.startsWith("telnettest")) {
2025-03-07 18:27:03 +08:00
g_stopTelnetTest = false;
2025-03-06 18:41:48 +08:00
telnetetst(clientSocket);
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed telnettest warning!!! it woont stop until finish!!!\r\n");
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("rc")) {
rocketmq_test_rc();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed rocketmq_test_rc\r\n");
2025-01-16 16:17:01 +08:00
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("rt")) {
rocketmq_test_rt();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed rocketmq_test_rt\r\n");
2025-01-16 16:17:01 +08:00
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("ud")) {
rocketmq_test_ud();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed rocketmq_test_ud\r\n");
2025-01-16 16:17:01 +08:00
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("set")) {
rocketmq_test_set();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed rocketmq_test_set\r\n");
2025-01-16 16:17:01 +08:00
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("only")) {
rocketmq_test_only();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed rocketmq_test_only\r\n");
2025-02-27 16:28:04 +08:00
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("log")) {
rocketmq_test_log();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed rocketmq_test_log\r\n");
2025-02-11 18:23:19 +08:00
}
2025-03-06 15:24:49 +08:00
else if (cmd.startsWith("soe")) {
SOEFileWeb_test();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed http_test_soe\r\n");
}
else if (cmd.startsWith("qvvr")) {
qvvr_test();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed http_test_qvvr\r\n");
}
else if (cmd.startsWith("connect")) {
comflag_test();
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed http_test_connect\r\n");
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("ledger")) {
QStringList parts = cmd.split(" ");
if (parts.size() > 1) {
2025-01-16 16:17:01 +08:00
QString terminalId = parts[1];
2025-03-05 17:47:47 +08:00
ledger(terminalId.toStdString().c_str(), clientSocket);
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed ledger with terminal_id\r\n");
2025-01-16 16:17:01 +08:00
} else {
2025-03-05 17:47:47 +08:00
ledger(NULL, clientSocket);
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed ledger without parameters\r\n");
2025-01-16 16:17:01 +08:00
}
}
2025-03-05 17:47:47 +08:00
else if (cmd.startsWith("value")) {
QStringList parts = cmd.split(" ");
2025-02-27 16:28:04 +08:00
if (parts.size() > 1) {
QString variableName = parts[1];
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("Executed value with variable name: " + variableName.toUtf8() + "\r\n");
value_print(variableName.toStdString().c_str(), clientSocket);
2025-02-10 17:03:15 +08:00
} else {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K");
clientSocket->write("Please provide a variable name\r\n");
2025-02-10 17:03:15 +08:00
}
}
2025-03-05 17:47:47 +08:00
else if (cmd == "exit") {
clientSocket->write("\r\x1B[K");
clientSocket->write("Goodbye! Exiting shell...\r\n");
2025-02-10 17:03:15 +08:00
clientSocket->flush();
2025-03-05 17:47:47 +08:00
clientSocket->disconnectFromHost();
clientSocket->waitForDisconnected();
2025-02-27 16:28:04 +08:00
return;
2025-02-10 17:03:15 +08:00
}
2025-01-16 16:17:01 +08:00
else {
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K> ");
clientSocket->write("Unknown command\r\n");
clientSocket->flush();
2025-01-16 16:17:01 +08:00
}
2025-03-05 17:47:47 +08:00
// <20><><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬴<EFBFBD>ӡ<EFBFBD><D3A1>ʾ<EFBFBD><CABE>
printPrompt(clientSocket);
2025-01-16 16:17:01 +08:00
}
2025-02-27 16:28:04 +08:00
/**
2025-03-05 17:47:47 +08:00
* @brief <EFBFBD>ϼ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
*/
void handleUpArrow(QTcpSocket *clientSocket) {
if (!commandHistory.isEmpty() && historyIndex > 0) {
historyIndex--;
currentCommand = commandHistory[historyIndex];
2025-03-05 17:47:47 +08:00
// <20><><EFBFBD>У<EFBFBD>\r<>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD> + \x1B[K<><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
clientSocket->write("\r\x1B[K> ");
clientSocket->write(currentCommand.toUtf8());
2025-02-27 16:28:04 +08:00
clientSocket->flush();
}
}
/**
2025-03-05 17:47:47 +08:00
* @brief <EFBFBD>¼<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
2025-02-27 16:28:04 +08:00
*/
void handleDownArrow(QTcpSocket *clientSocket) {
if (!commandHistory.isEmpty() && historyIndex < commandHistory.size() - 1) {
historyIndex++;
currentCommand = commandHistory[historyIndex];
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K> ");
clientSocket->write(currentCommand.toUtf8());
2025-02-27 16:28:04 +08:00
clientSocket->flush();
}
else if (historyIndex == commandHistory.size() - 1) {
historyIndex = commandHistory.size();
currentCommand.clear();
2025-03-05 17:47:47 +08:00
clientSocket->write("\r\x1B[K> ");
2025-02-27 16:28:04 +08:00
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-03-05 17:47:47 +08:00
// viewlog <20><><EFBFBD><EFBFBD>
2025-03-06 18:41:48 +08:00
bool stopViewLog;
//ping<6E><67><EFBFBD><EFBFBD>
bool g_stopTelnetTest;
2025-03-05 17:47:47 +08:00
QTcpSocket* activeClient;
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