add echo to testshell and modify mqsend
This commit is contained in:
153
json/save2json.h
153
json/save2json.h
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user