稳定备份 更新顶盖逻辑
This commit is contained in:
@@ -61,9 +61,9 @@ bool rpc_finsTcp::readData(std::vector<cv::Mat>& vec_mat, QByteArray& data)
|
||||
ptr = new JsonRpcClient("127.0.0.1", 9000);
|
||||
read_JsonRpcClient[data] = ptr;
|
||||
}
|
||||
auto result = read_JsonRpcClient[data]->call("excuteCli", QJsonArray{ QString(data) }, "finstcp");
|
||||
data = variantListToByteArray(result);
|
||||
//data = ptr->finsReadCall("excuteCli", QString(data), "finstcp");
|
||||
//auto result = read_JsonRpcClient[data]->call("excuteCli", QJsonArray{ QString(data) }, "finstcp");
|
||||
//data = variantListToByteArray(result);
|
||||
data = ptr->finsReadCall("excuteCli", QString(data), "finstcp");
|
||||
return true;
|
||||
}
|
||||
bool ifRetryCMD = false;
|
||||
@@ -317,24 +317,42 @@ QByteArray JsonRpcClient::finsReadCall(const QString& method, const QString& par
|
||||
|
||||
QByteArray responseData = socket_.readAll();
|
||||
|
||||
try {
|
||||
if (responseData.contains("error")) {
|
||||
//qWarning() << "[JsonRpcClient] Error:" << QString::fromStdString(respJson["error"].dump());
|
||||
return QByteArray();
|
||||
}
|
||||
int startPos = responseData.indexOf(": [") + 3;
|
||||
int length = responseData.indexOf("],") - startPos;
|
||||
auto splitResult = responseData.mid(startPos, length);
|
||||
QByteArray result;
|
||||
for (int i = 0; i < splitResult.size(); i+=3) {
|
||||
result.append(splitResult[i] -48);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
catch (const nlohmann::json::parse_error& e) {
|
||||
qWarning() << "[JsonRpcClient] Parse error:" << e.what();
|
||||
// 仅用QByteArray查找和分割功能解析result数组
|
||||
if (responseData.contains("error")) {
|
||||
qWarning() << "[JsonRpcClient] Error in response:" << responseData;
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
// 查找 "result": [ 和对应的 ]
|
||||
int resultPos = responseData.indexOf("\"result\"");
|
||||
if (resultPos == -1) {
|
||||
qWarning() << "[JsonRpcClient] No result field in response:" << responseData;
|
||||
return QByteArray();
|
||||
}
|
||||
int arrayStart = responseData.indexOf('[', resultPos);
|
||||
int arrayEnd = responseData.indexOf(']', arrayStart);
|
||||
if (arrayStart == -1 || arrayEnd == -1 || arrayEnd <= arrayStart) {
|
||||
qWarning() << "[JsonRpcClient] Result array not found or malformed:" << responseData;
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
QByteArray arrayContent = responseData.mid(arrayStart + 1, arrayEnd - arrayStart - 1);
|
||||
// 按逗号分割
|
||||
QList<QByteArray> items = arrayContent.split(',');
|
||||
|
||||
QByteArray result;
|
||||
for (QByteArray item : items) {
|
||||
item = item.trimmed();
|
||||
bool ok = false;
|
||||
int val = item.toInt(&ok);
|
||||
if (ok) {
|
||||
result.append(static_cast<char>(val));
|
||||
} else if (!item.isEmpty()) {
|
||||
qWarning() << "[JsonRpcClient] Non-integer value in result array:" << item;
|
||||
return QByteArray();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
void JsonRpcClient::writeCall(const QString& method, const QJsonArray& params, const QString& module) {
|
||||
if (socket_.state() != QAbstractSocket::ConnectedState) {
|
||||
|
||||
Reference in New Issue
Block a user