248 lines
11 KiB
C++
248 lines
11 KiB
C++
// MainWidget.h
|
|
#pragma once
|
|
#ifndef MAINWIDGET_H
|
|
#define MAINWIDGET_H
|
|
|
|
#include <QWidget>
|
|
#include <QTcpServer>
|
|
#include <QJsonArray>
|
|
#include <QListWidget>
|
|
#include <QCheckBox>
|
|
#include <QPushButton>
|
|
#include <QVBoxLayout>
|
|
#include <QThreadPool>
|
|
#include <QMutex>
|
|
#include <QFileDialog>
|
|
#include <QLineEdit>
|
|
#include <QTextEdit>
|
|
#include <QTabWidget>
|
|
#include <QTimer>
|
|
#include <QGroupBox>
|
|
#include <QFormLayout>
|
|
#include <QLabel>
|
|
#include <QStackedLayout>
|
|
#include <QJsonDocument>
|
|
#include <QFile>
|
|
#include <QDebug>
|
|
#include <QHBoxLayout>
|
|
#include <QTcpSocket>
|
|
#include <QUdpSocket>
|
|
#include <QNetworkInterface>
|
|
#include <QTextStream>
|
|
#include <QScrollArea>
|
|
#include <QDateTime>
|
|
#include <QNetworkAccessManager>
|
|
#include <QNetworkReply>
|
|
#include <QNetworkRequest>
|
|
#include <QUrl>
|
|
#include <QMap>
|
|
#include <QList>
|
|
#include <QPair>
|
|
#include <QTextCodec>
|
|
#include <QCryptographicHash>
|
|
#include <QRandomGenerator>
|
|
#include <QMessageAuthenticationCode>
|
|
#include <QCoreApplication>
|
|
|
|
#include "../Json/readJsonFile.h"
|
|
#include "../RecvDataHandler/RecvDataHandler.h"
|
|
#include "../LicenseGenerate/LicenseGenerate.h"
|
|
#include "../LicenseGenerate/LicenseConfirmWindow.h"
|
|
#include "../Network/mdns/servicemodel.h"
|
|
#include "../Network/ClientHandler.h"
|
|
#include "../Network/httpClient.h"
|
|
|
|
#include "../Network/mdns/qmdnsengine/include/server.h"
|
|
#include "../Network/mdns/qmdnsengine/include/hostname.h"
|
|
#include "../Network/mdns/qmdnsengine/include/provider.h"
|
|
#include "../Network/mdns/qmdnsengine/include/service.h"
|
|
#include "../Network/mdns/qmdnsengine/include/message.h"
|
|
#include "../Network/mdns/qmdnsengine/include/query.h"
|
|
|
|
#define TEST_UDP_BROADCAST 0 // 用于测试 UDP 组播实现 mdns 功能 非标准 mdns
|
|
#define MANUAL_UPLOAD_LICENSE 0 // 打开手动上传 License的功能
|
|
#define START_MDNS 1
|
|
#define FOCUS_WINDOWS_BUTTON 4 // 大窗口播放视频的按键编号
|
|
#define TCP_CONNECT_PORT 12412 // TCP监听的端口
|
|
|
|
class MainWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
// 构造函数
|
|
explicit MainWidget(QWidget* parent = nullptr);
|
|
~MainWidget();
|
|
|
|
signals:
|
|
void openFocusWindowRequested(int itemIndex);
|
|
|
|
private slots:
|
|
// 发送HTTP请求
|
|
//void onSomeButtonClicked();
|
|
// 处理HTTP响应
|
|
void onHttpRequestFinished(const QJsonObject& response);
|
|
// 处理HTTP错误
|
|
void onHttpRequestError(const QString& errorString);
|
|
// 处理开始服务器按钮点击事件
|
|
void onStartServerClicked();
|
|
// 处理发送获取设备信息按键点击事件
|
|
void onSendGetDevInfoClicked();
|
|
// 处理发送取图按键点击事件
|
|
void onSendGetPicClicked();
|
|
// 处理发送拉视频流按键点击事件
|
|
void onSendGetVideoClicked();
|
|
void onLicenseButtonClicked();
|
|
void onUuidButtonClicked();
|
|
// 处理一键发送按钮点击事件
|
|
void onSendAllClicked();
|
|
// 处理单独发送项按钮点击事件
|
|
void onSendFrontItemClicked();
|
|
void onSendBackItemClicked();
|
|
// 处理单独发送功能配置项按钮点击事件
|
|
void onSendFrontFuncItemClicked();
|
|
void onSendBackFuncItemClicked();
|
|
// 处理数据接收信号
|
|
//void onDataReceived(const QString& client, const QByteArray& data);
|
|
// 处理状态更新信号
|
|
void onStatusUpdated(const QString& client, int itemIndex, int funcItemIndex,
|
|
bool success, const QString& itemData, const QString& funcItemData,
|
|
const QJsonArray& jsonArray, int itemJsonIndex);
|
|
// 处理所有项目处理完毕信号
|
|
void onAllItemsProcessed(const QString& client, int itemsProcessedCount);
|
|
// 处理客户端断开连接
|
|
void onClientDisconnected(ClientHandler* handler);
|
|
// 启动超时定时器
|
|
void onStartTimeout(int clientId, int timeout);
|
|
// 为了使滚动条在最下面,不用手动鼠标下拉
|
|
void scrollToBottom();
|
|
// 处理点击 Save Log 按键
|
|
void onSelectFileButtonClicked();
|
|
// 处理点击 Clear Log 按键
|
|
void onclearLogButtonClicked();
|
|
// 处理复选框的状态
|
|
void onSaveCheckBoxStateChanged(int state);
|
|
// 处理打开调焦的大窗口
|
|
void onOpenFocusWindowClicked();
|
|
void printThreadPoolInfo();
|
|
void onCheckThreadStatus();
|
|
void onCheckConnectionStatus();
|
|
void startClientReadTimer(int clientId);
|
|
void stopClientReadTimer(int clientId);
|
|
#if TEST_UDP_BROADCAST
|
|
void sendMulticastMessage();
|
|
#endif
|
|
|
|
private:
|
|
// 读取 test JSON 配置文件
|
|
void readJsonConfig();
|
|
// 设置 UI
|
|
void setupUI();
|
|
QGroupBox* createLicenseGroupBox();
|
|
QGroupBox* createFrontDeviceInfoGroupBox();
|
|
QGroupBox* createBackDeviceInfoGroupBox();
|
|
QWidget* createFunctionTestTab(const QJsonArray& BoardFuncTest, const QString& propertyName);
|
|
QWidget* createFunctionConfigTab(const QJsonArray& BoardFuncConfig, const QString& propertyName);
|
|
QWidget* createImageDisplayTab();
|
|
QWidget* createVideoDisplayTab();
|
|
QGroupBox* createBackConnectServerGroupBox();
|
|
// 保存日志到文件
|
|
void saveStatusListToFile(const QString& filePath);
|
|
// 用于更新按键文本的函数
|
|
void updateServerButtonText();
|
|
void onDisconnectClient(int clientId);
|
|
void setupTimerForThreadPoolInfo();
|
|
void sendDataToClient(int clientId, const QByteArray& data);
|
|
// 与服务器的接口
|
|
void FactoryToolSendPostTestToHttpServer();
|
|
void FactoryToolSendPostLicenseToHttpServer(const QString& hardware_info, const QString& license_info);
|
|
void FactoryToolSendPostComfirmToHttpServer(const QString& mac_addr, const QString& uuid);
|
|
void FactoryToolSendGetUuidToHttpServer(const QString& mac_addr);
|
|
void FactoryToolSendGetLicenseToHttpServer(const QString& hw_info);
|
|
|
|
QTcpServer* server; // TCP 服务器
|
|
HttpClient* httpClient; // HTTP 服务器
|
|
QJsonArray frontBoardOneClickTest; // 前板一键功能测试 JSON
|
|
QJsonArray frontBoardTest; // 前板单项测试 JSON
|
|
QJsonArray frontBoardFuncConfig; // 前板功能配置参数 JSON
|
|
QJsonArray frontBoardDevInfoJson; // 前板设备信息参数 JSON
|
|
QJsonArray frontBoardLicenseJson; // 前板License JSON
|
|
QJsonArray backBoardOneClickTest; // 后板一键功能测试 JSON
|
|
QJsonArray backBoardTest; // 后板单项测试 JSON
|
|
QJsonArray backBoardFuncConfig; // 后板功能配置参数 JSON
|
|
QJsonArray backBoardDevInfoJson; // 后板设备信息参数 JSON
|
|
QJsonArray backBoardUuidJson; // 后板UUID JSON
|
|
QJsonArray testJsonConfig; // 功能测试区 JSON 配置
|
|
QJsonArray funcJsonConfig; // 功能配置区 JSON 配置
|
|
QJsonArray getDevInfoJson; // 获取设备信息 JSON 配置
|
|
QJsonArray getPicJson; // 发送取图指令 JSON 配置
|
|
QJsonArray getVideoJson; // 发送拉视频指令 JSON 配置
|
|
QVBoxLayout* mainLayout; // 主布局
|
|
QListWidget* statusListWidget; // 状态列表
|
|
QPushButton* startServerButton; // 开始服务器按键
|
|
QPushButton* focusWindowsButton; // 调焦窗口按键
|
|
QPushButton* sendAllButton; // 一键发送按键
|
|
QThreadPool threadPool; // 线程池
|
|
QMutex mutex; // 互斥锁
|
|
int nextClientId; // 新增的客户端编号
|
|
int connectedClientsCount = 0; // 连接客户端的数量
|
|
int isRequestSuccessful = 0; // GET请求是否成功
|
|
int isBackBoardOrAllBoard = 0;
|
|
bool manualSend; // 判断是否是手动触发的发送
|
|
bool deviceConnected = false; // 判断是否有设备连接过
|
|
bool isSendingAll; // 一键功能测试 状态
|
|
bool checkBoxState = true;
|
|
|
|
QJsonObject licenseDataArray; // 用于保存从服务器获取的 data 字段对象
|
|
|
|
QVector<QPushButton*> itemButtons; // 项目按键集合
|
|
QVector<QPushButton*> funcItemButtons; // 功能配置项目按键集合
|
|
QVector<QPushButton*> getPicButtons; // 保存两个取图的摄像头的按键的指针
|
|
QVector<QPushButton*> getVideoButtons; // 保存拉视频设备的按键的指针
|
|
QList<ClientHandler*> clients; // 客户端处理器集合
|
|
QMap<int, QTimer*> clientTimers; // 每个客户端的定时器
|
|
QMap<QString, QLineEdit*> devInfoLineEdits;// msg_id 和对应的 QLineEdit 的映射关系
|
|
|
|
QCheckBox* saveCheckBox; // 保存文件复选框
|
|
QPushButton* selectFileButton; // Save Log 按键
|
|
QPushButton* clearLogButton; // clear Log 按键
|
|
QLineEdit* filePathLineEdit; // 文件路径显示
|
|
QLineEdit* VideoResolutionEdit; // 视频分辨率显示
|
|
//QLineEdit* frameRateEdit; // 视频帧率显示
|
|
QLabel* leftLens_imageLabel; // 左边镜头图像显示
|
|
QLabel* rightLens_imageLabel; // 右边镜头图像显示
|
|
QLabel* videoLabel; // 视频显示
|
|
QLineEdit* frontFuncConfigLineEdit; // 前板功能配置编辑框
|
|
QLineEdit* backFuncConfigLineEdit; // 后板功能配置编辑框
|
|
QTextEdit* licenseHwInfoEdit; // 获取license的硬件信息
|
|
QTextEdit* UuidHwInfoEdit; // Uuid的硬件信息
|
|
MainWidget* mainWidget;
|
|
QTabWidget* tabWidget; // 标签页
|
|
QWidget* functionTestArea; // 功能测试区
|
|
QWidget* functionConfigArea; // 功能配置区
|
|
|
|
int lastClickedGetPicCamIndex; // 记录上一次点击取图的摄像头的按键索引
|
|
int lastClickedGetPicDevIndex; // 记录上一次点击取图的设备的按键索引
|
|
int lastClickedGetVideoCamIndex; // 记录上一次点击拉视频的摄像头的按键索引
|
|
int lastClickedGetVideoDevIndex; // 记录上一次点击拉视频的设备的按键索引
|
|
|
|
|
|
QTimer* threadStatusTimer; // 检查线程状态的定时器
|
|
QTimer* connectionStatusCheckTimer; // 检查连接状态的定时器
|
|
QMap<int, DataHandler*> dataHandlers;
|
|
QMap<int, QThread*> clientThreads;
|
|
QMap<int, QTimer*> clientReadTimers;
|
|
QMap<int, ClientHandler*> clients_1;
|
|
|
|
ServiceProvider* mServiceProvider;
|
|
QTimer* mdnsTimer;
|
|
void startMdnsService();
|
|
void stopMdnsService();
|
|
#if TEST_UDP_BROADCAST
|
|
QUdpSocket* multicastSocket;
|
|
QTimer* multicastTimer;
|
|
#endif
|
|
};
|
|
|
|
#endif // MAINWIDGET_H
|