add echo to testshell and modify mqsend

This commit is contained in:
lnk
2025-02-28 16:28:15 +08:00
parent c843247d68
commit a1a184a043
4 changed files with 352 additions and 113 deletions

View File

@@ -28,10 +28,16 @@ extern "C" {
#include <map>
#include <list>
#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>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMutex>
@@ -102,6 +108,8 @@ protected:
void run();
};*/
//lnk20250106
extern bool showinshellflag;
class Worker : public QObject
{
Q_OBJECT
@@ -112,7 +120,9 @@ public:
server(NULL),
TEST_NUM(G_TEST_NUM),
timer(NULL),
historyIndex(-1)
historyIndex(-1),
stopViewLog(false),
activeClient(NULL)
{
}
@@ -121,6 +131,8 @@ public:
stopServer();
}
void handleViewLogCommand(const QString& command, QTcpSocket* clientSocket);
public slots:
void startServer() {
if (server) {
@@ -225,65 +237,67 @@ private slots:
for (int i = 0; i < data.size(); ++i) {
char c = data[i];
switch (c) {
case '\r':
case '\n':
// <20><><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!currentCommand.isEmpty()) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>¼<EFBFBD><C2BC>
if (commandHistory.isEmpty() || commandHistory.last() != currentCommand) {
commandHistory.append(currentCommand);
}
historyIndex = commandHistory.size(); // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>֮<EFBFBD><D6AE>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
processCommand(currentCommand, clientSocket);
currentCommand.clear();
} else {
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD>ǿ<EFBFBD><C7BF>У<EFBFBD><D0A3><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
clientSocket->write("\n> ");
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>
showinshellflag = false;
clientSocket->write("\nLog view stopped. Returning to shell.\n> ");
clientSocket->flush();
}
break;
case '\x1b':
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ESC <20><><EFBFBD><EFBFBD>
// <20>ϼ<EFBFBD>ͷ: \x1b[A
// <20>¼<EFBFBD>ͷ: \x1b[B
if (i + 2 < data.size() && data[i+1] == '[') {
char arrow = data[i+2];
if (arrow == 'A') {
// <20>ϼ<EFBFBD>ͷ
handleUpArrow(clientSocket);
} else if (arrow == 'B') {
// <20>¼<EFBFBD>ͷ
handleDownArrow(clientSocket);
}
// <20>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>ֽ<EFBFBD>: \x1b [ X
i += 2;
}
break;
case '\x7f':
case '\x08':
// <20>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Del<65><6C>Backspace<63><65>
if (!currentCommand.isEmpty()) {
currentCommand.chop(1); // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>
// <20><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD> + <20>ٻ<EFBFBD><D9BB><EFBFBD>
// "\b \b"<22><><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>˸<EFBFBD>
clientSocket->write("\b \b");
clientSocket->flush();
}
break;
default:
// <20><>ͨ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>׷<EFBFBD>ӵ<EFBFBD> currentCommand <20><>
currentCommand.append(c);
// <20><><EFBFBD>Ե<EFBFBD><D4B5>ͻ<EFBFBD><CDBB><EFBFBD>
clientSocket->write(&c, 1);
clientSocket->flush();
break;
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();
}
break;
case '\x1b':
// ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ϼ<EFBFBD>ͷ `\x1b[A`<60><><EFBFBD>¼<EFBFBD>ͷ `\x1b[B`)
if (i + 2 < data.size() && data[i+1] == '[') {
char arrow = data[i+2];
if (arrow == 'A') {
handleUpArrow(clientSocket); // **<2A><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>**
} else if (arrow == 'B') {
handleDownArrow(clientSocket); // **<2A><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>**
}
i += 2; // ? **<2A><><EFBFBD><EFBFBD> ESC <20><><EFBFBD><EFBFBD> `\x1b[A` <20><> `\x1b[B`**
continue;
}
break;
case '\x7f':
case '\x08':
// ? <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>
if (!currentCommand.isEmpty()) {
currentCommand.chop(1);
clientSocket->write("\b \b");
clientSocket->flush();
}
break;
default:
// ? <20><>ͨ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>׷<EFBFBD>ӵ<EFBFBD> `currentCommand`
currentCommand.append(c);
clientSocket->write(&c, 1);
clientSocket->flush();
break;
}
}
}
@@ -291,6 +305,10 @@ signals:
void serverError();
private:
// ====================== <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>
// --------------------
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// --------------------
@@ -315,11 +333,16 @@ private:
helpText += "only - Execute rocketmq_test_only\n";
helpText += "log - Execute rocketmq_test_log\n";
helpText += "ledger <id> - Execute ledger with optional terminal_id\n";
helpText += "viewlog <level> - View logs (ERROR, WARN, NORMAL, DEBUG)\n";
helpText += "value <valuename> - Execute value print with valuename : iedcount frontfun frontindex remtable\n";
helpText += "exit - Exit the shell\n";
helpText += "help - Show this help message\n";
clientSocket->write(helpText.toUtf8());
}
else if (command.startsWith("viewlog")) {
showinshellflag = true;
handleViewLogCommand(command, clientSocket);
}
// <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
else if (command.startsWith("TEST_NUM=")) {
bool ok;
@@ -439,12 +462,11 @@ private:
historyIndex--;
currentCommand = commandHistory[historyIndex];
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD>ÿո񸲸<D5B8>)
clientSocket->write("\r");
clientSocket->write(" ");
clientSocket->write("\r> ");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
clientSocket->write(currentCommand.toUtf8());
// **<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>
clientSocket->flush();
}
}
@@ -457,14 +479,15 @@ private:
historyIndex++;
currentCommand = commandHistory[historyIndex];
// **<2A><><EFBFBD>յ<EFBFBD>ǰ<EFBFBD><C7B0>**
clientSocket->write("\r");
clientSocket->write(" ");
clientSocket->write("\r> ");
clientSocket->write(currentCommand.toUtf8());
clientSocket->write(currentCommand.toUtf8()); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
clientSocket->flush();
}
else if (historyIndex == commandHistory.size() - 1) {
// <20><><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><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>**
historyIndex = commandHistory.size();
currentCommand.clear();