1.增加取图后默认保存图像,YUV和JPG各保存一张; 2.修复出现QTcpSocket对象的问题和QTcpSocket对象导致的线程安全问题
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -24,26 +24,37 @@
|
||||
|
||||
#include "DelUserWindows.h"
|
||||
|
||||
#define TEST_TCP_MOVE_TO_MAIN 0
|
||||
|
||||
class ClientHandler : public QObject, public QRunnable
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
#if TEST_TCP_MOVE_TO_MAIN
|
||||
explicit ClientHandler(QTcpSocket* socket, 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 = nullptr);
|
||||
|
||||
#else
|
||||
explicit 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 = nullptr);
|
||||
#endif
|
||||
~ClientHandler();
|
||||
int preVideoClientId = 0;
|
||||
int controlClientId = 0;
|
||||
void sendDevInfoItem();
|
||||
//int preVideoClientId = 0;
|
||||
bool isData_Stuck() const;
|
||||
//static int pre_H264_clientId; // 预览H264的客户端ID
|
||||
QTcpSocket* getSocket() const { return socket; }
|
||||
|
||||
#if !TEST_TCP_MOVE_TO_MAIN
|
||||
void ClientHandler::initialize(QTcpSocket* socket);
|
||||
#endif
|
||||
|
||||
// QRunnable 的虚函数,在线程池中执行
|
||||
void run() override;
|
||||
// 开始处理客户端
|
||||
@@ -103,12 +114,15 @@ signals:
|
||||
void allItemsProcessed(const QString& client, int itemsProcessedCount);
|
||||
// 通知主线程启动定时器
|
||||
void startTimeout(int timeout);
|
||||
void selectClientDisconnected(int clientId);
|
||||
void startReadTimer(int clientId);
|
||||
void stopReadTimer(int clientId);
|
||||
void sendDataToSomeClient(int clientId, const QByteArray& data);
|
||||
void selectClientDisconnected(int client_Id);
|
||||
void startReadTimer(int client_Id);
|
||||
void stopReadTimer(int client_Id);
|
||||
void sendDataToSomeClient(int client_Id, const QByteArray& data);
|
||||
|
||||
public slots:
|
||||
#if !TEST_TCP_MOVE_TO_MAIN
|
||||
void onSendData(const QByteArray& data, int isBoardType);
|
||||
#endif
|
||||
// 处理数据接收
|
||||
void onDataReceived();
|
||||
// 处理超时
|
||||
|
||||
Reference in New Issue
Block a user