1.增加取图后默认保存图像,YUV和JPG各保存一张; 2.修复出现QTcpSocket对象的问题和QTcpSocket对象导致的线程安全问题

This commit is contained in:
2024-09-04 11:32:19 +08:00
parent c6e16094b9
commit 4bd2d7eab5
265 changed files with 226409 additions and 1611 deletions

View File

@@ -4,6 +4,7 @@
#include "ImageEnrollWindow.h"
#include "PasswordEnrollWindow.h"
#if TEST_TCP_MOVE_TO_MAIN
ClientHandler::ClientHandler(QTcpSocket* socket,
QJsonArray frontBoardOneClickTest, QJsonArray frontBoardTest, QJsonArray frontBoardFuncConfig,
QJsonArray frontBoardDevInfoJson, QJsonArray frontBoardLicenseJson,
@@ -11,6 +12,14 @@ ClientHandler::ClientHandler(QTcpSocket* socket,
QJsonArray backBoardDevInfoJson, QJsonArray backBoardUuidJson,
QJsonArray getPicJson, QJsonArray getVideoJson, int clientId, int isBackBoardOrAllBoard, QObject* parent)
: QObject(parent), socket(socket),
#else
ClientHandler::ClientHandler(QJsonArray frontBoardOneClickTest, QJsonArray frontBoardTest, QJsonArray frontBoardFuncConfig,
QJsonArray frontBoardDevInfoJson, QJsonArray frontBoardLicenseJson,
QJsonArray backBoardOneClickTest, QJsonArray backBoardTest, QJsonArray backBoardFuncConfig,
QJsonArray backBoardDevInfoJson, QJsonArray backBoardUuidJson,
QJsonArray getPicJson, QJsonArray getVideoJson, int clientId, int isBackBoardOrAllBoard, QObject* parent)
: QObject(parent),
#endif
frontBoardOneClickTest(frontBoardOneClickTest), frontBoardTest(frontBoardTest),
frontBoardFuncConfig(frontBoardFuncConfig), frontBoardDevInfoJson(frontBoardDevInfoJson),
frontBoardLicenseJson(frontBoardLicenseJson),
@@ -24,14 +33,30 @@ ClientHandler::ClientHandler(QTcpSocket* socket,
currentFrontBoardIndex(0), currentLicenseIndex(0), currentUuidIndex(0),
currentBackBoardIndex(0)
{
#if TEST_TCP_MOVE_TO_MAIN
connect(socket, &QTcpSocket::readyRead, this, &ClientHandler::onDataReceived);
connect(socket, &QTcpSocket::disconnected, this, &ClientHandler::onDisconnected);
qint64 bufferSize = socket->socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption).toLongLong();
#endif
}
ClientHandler::~ClientHandler() {
#if !TEST_TCP_MOVE_TO_MAIN
void ClientHandler::initialize(QTcpSocket* socket)
{
this->socket = socket;
// 连接信号槽,将其放在同一线程中处理
connect(socket, &QTcpSocket::readyRead, this, &ClientHandler::onDataReceived);
connect(socket, &QTcpSocket::disconnected, this, &ClientHandler::onDisconnected);
// 其他的 socket 操作都将在这个线程中进行
}
#endif
ClientHandler::~ClientHandler()
{
qDebug() << "ClientHandler destroyed for clientId:" << clientId;
}
@@ -125,6 +150,30 @@ QString ClientHandler::getClientAddress() const
return socket->peerAddress().toString() + ":" + QString::number(socket->peerPort());
}
#if !TEST_TCP_MOVE_TO_MAIN
void ClientHandler::onSendData(const QByteArray& data, int isBoardType)
{
qDebug() << "Sending data isBoardType:" << isBoardType;
QByteArray prefix;
QDataStream stream(&prefix, QIODevice::WriteOnly);
stream.setByteOrder(QDataStream::LittleEndian);
stream << quint32(0x55AA55AA);
if (isBoardType != 0) {
stream << quint16(0x0421);
}
else {
stream << quint16(0x0420);
}
stream << quint32(data.size());
prefix.append(data);
qDebug() << "Sending data:" << prefix.toHex();
socket->write(prefix);
socket->flush();
}
#endif
void ClientHandler::sendDataToClient(const QByteArray& data)
{
emit sendData(data, isBackBoardOrAllBoard);
@@ -180,7 +229,7 @@ void ClientHandler::sendJsonItem(const QJsonArray& jsonArray, int itemIndex, con
}
QString itemData = QJsonDocument(currentItem).toJson();
//emit sendData(itemData.toUtf8());
sendDataToSomeClient(controlClientId, itemData.toUtf8());
emit sendDataToSomeClient(controlClientId, itemData.toUtf8());
// 设置超时处理
if (currentItem.contains("timeout")) {
@@ -212,7 +261,7 @@ void ClientHandler::sendGetVideoItem(int itemIndex, int GetVideoCamIndex)
sendJsonItem(getVideoJson, itemIndex, QString::number(GetVideoCamIndex), "handleVideo");
}
else {
sendJsonItem(getVideoJson, itemIndex, "", "handleVideo");
sendJsonItem(getVideoJson, itemIndex, QString::number(GetVideoCamIndex), "handleVideo");
}
}
@@ -336,7 +385,7 @@ void ClientHandler::sendDevInfoJsonItem(const QJsonObject& jsonItem, int itemInd
QString itemData = QJsonDocument(jsonItem).toJson();
//emit sendData(itemData.toUtf8());
sendDataToSomeClient(controlClientId, itemData.toUtf8());
emit sendDataToSomeClient(controlClientId, itemData.toUtf8());
if (jsonItem.contains("timeout")) {
int timeout = jsonItem.value("timeout").toInt();
@@ -397,7 +446,7 @@ void ClientHandler::sendNextItem()
}
}
//emit sendData(itemData.toUtf8());
sendDataToSomeClient(controlClientId, itemData.toUtf8());
emit sendDataToSomeClient(controlClientId, itemData.toUtf8());
if (currentItem.contains("timeout")) {
int timeout = currentItem.value("timeout").toInt();