From 08609905c5b28a223dad3515e8f5f826c91ccd60 Mon Sep 17 00:00:00 2001 From: taynpg Date: Sun, 16 Nov 2025 10:48:09 +0800 Subject: [PATCH] =?UTF-8?q?apo=EF=BC=9A=E7=AD=89=E5=BE=85=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=9A=84=E6=93=8D=E4=BD=9C=E6=8A=BD=E8=B1=A1=E5=87=BA?= =?UTF-8?q?=E5=9F=BA=E7=B1=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ClientCore/ClientCore.cpp | 22 ++++++++++ ClientCore/ClientCore.h | 26 +++++++++++- Gui/Form/Transform.cpp | 85 ++++++++++++++++----------------------- Gui/Form/Transform.h | 24 +++-------- Gui/frelayGUI.cpp | 8 ++-- Util/Util.cpp | 1 + 6 files changed, 93 insertions(+), 73 deletions(-) diff --git a/ClientCore/ClientCore.cpp b/ClientCore/ClientCore.cpp index 3274ef0..2e601ed 100644 --- a/ClientCore/ClientCore.cpp +++ b/ClientCore/ClientCore.cpp @@ -361,4 +361,26 @@ void HeatBeat::run() } } } +} + +WaitThread::WaitThread(QObject* parent) : QThread(parent) +{ +} + +void WaitThread::SetClient(ClientCore* cli) +{ + cli_ = cli; +} + +bool WaitThread::IsQuit() const +{ + return isAlreadyInter_; +} + +void WaitThread::interrupCheck() +{ + if (!isAlreadyInter_) { + isAlreadyInter_ = true; + emit sigCheckOver(); + } } \ No newline at end of file diff --git a/ClientCore/ClientCore.h b/ClientCore/ClientCore.h index 6a729fa..340d2d5 100644 --- a/ClientCore/ClientCore.h +++ b/ClientCore/ClientCore.h @@ -12,10 +12,10 @@ #include #include #include +#include #include #include #include -#include class ClientCore : public QObject { @@ -159,4 +159,28 @@ private: ClientCore* core_{}; }; +class WaitThread : public QThread +{ + Q_OBJECT + +public: + WaitThread(QObject* parent = nullptr); + +public: + void SetClient(ClientCore* cli); + bool IsQuit() const; + +Q_SIGNALS: + void sigCheckOver(); + +public Q_SLOTS: + virtual void interrupCheck(); + virtual void recvFrame(QSharedPointer frame) = 0; + +protected: + bool isRun_; + bool isAlreadyInter_; + ClientCore* cli_{}; +}; + #endif // CLIENTCORE_H \ No newline at end of file diff --git a/Gui/Form/Transform.cpp b/Gui/Form/Transform.cpp index fedf1f4..2abd068 100644 --- a/Gui/Form/Transform.cpp +++ b/Gui/Form/Transform.cpp @@ -142,7 +142,6 @@ void TransForm::showEvent(QShowEvent* event) { QDialog::showEvent(event); workTh_ = new TranFromTh(this, this); - // fileTrans_->moveToThread(workTh_); connect(workTh_, &QThread::finished, workTh_, &QObject::deleteLater); workTh_->start(); } @@ -153,63 +152,21 @@ void TransForm::closeEvent(QCloseEvent* event) QDialog::closeEvent(event); } -CheckCondition::CheckCondition(QObject* parent) : QThread(parent) +WaitCheck::WaitCheck(QObject* parent) : WaitThread(parent) { } -void CheckCondition::SetClientCore(ClientCore* clientCore) -{ - clientCore_ = clientCore; -} - -void CheckCondition::SetTasks(const QVector& tasks) +void WaitCheck::SetTasks(const QVector& tasks) { tasks_ = tasks; } -QVector CheckCondition::GetTasks() const +QVector WaitCheck::GetTasks() const { return tasks_; } -bool CheckCondition::IsQuit() const -{ - return isAlreadyInter_; -} - -void CheckCondition::recvFrame(QSharedPointer frame) -{ - InfoMsg info = infoUnpack(frame->data); - if (info.command == STRMSG_AC_ANSWER_FILE_EXIST) { - - for (auto& item : info.mapData) { - auto it = - std::find_if(tasks_.begin(), tasks_.end(), [&item](const TransTask& task) { return task.taskUUID == item.uuid; }); - if (it == tasks_.end()) { - continue; - } - it->remoteCheckState = static_cast(item.state); - } - - qInfo() << tr("检查结束......"); - msg_ = info.command; - return; - } - msg_ = tr("收到未知信息,认为判断失败:") + info.command; - qInfo() << msg_; -} - -void CheckCondition::interrupCheck() -{ - if (!isAlreadyInter_) { - isAlreadyInter_ = true; - qWarning() << tr("中断文件校验......"); - tasks_.clear(); - emit sigCheckOver(); - } -} - -void CheckCondition::run() +void WaitCheck::run() { if (tasks_.empty()) { qInfo() << tr("没有需要校验的文件或者被中断......"); @@ -246,8 +203,8 @@ void CheckCondition::run() msg.mapData[task.taskUUID].remotePath = task.remotePath; } - auto f = clientCore_->GetBuffer(msg, FBT_MSGINFO_ASK, clientCore_->GetRemoteID()); - if (!ClientCore::syncInvoke(clientCore_, f)) { + auto f = cli_->GetBuffer(msg, FBT_MSGINFO_ASK, cli_->GetRemoteID()); + if (!ClientCore::syncInvoke(cli_, f)) { auto errMsg = tr("检查远程文件存在性数据发送失败。"); emit sigCheckOver(); qCritical() << errMsg; @@ -267,4 +224,32 @@ void CheckCondition::run() isAlreadyInter_ = true; emit sigCheckOver(); qInfo() << tr("文件校验结束......"); -} \ No newline at end of file +} + +void WaitCheck::interrupCheck() +{ + qWarning() << tr("中断文件校验......"); + WaitThread::interrupCheck(); +} + +void WaitCheck::recvFrame(QSharedPointer frame) +{ + InfoMsg info = infoUnpack(frame->data); + if (info.command == STRMSG_AC_ANSWER_FILE_EXIST) { + + for (auto& item : info.mapData) { + auto it = + std::find_if(tasks_.begin(), tasks_.end(), [&item](const TransTask& task) { return task.taskUUID == item.uuid; }); + if (it == tasks_.end()) { + continue; + } + it->remoteCheckState = static_cast(item.state); + } + + qInfo() << tr("检查结束......"); + msg_ = info.command; + return; + } + msg_ = tr("收到未知信息,认为判断失败:") + info.command; + qInfo() << msg_; +} diff --git a/Gui/Form/Transform.h b/Gui/Form/Transform.h index fd24789..fef42fd 100644 --- a/Gui/Form/Transform.h +++ b/Gui/Form/Transform.h @@ -75,35 +75,23 @@ private: TransForm* tf_; }; -class CheckCondition : public QThread +class WaitCheck : public WaitThread { - Q_OBJECT +public: + WaitCheck(QObject* parent = nullptr); public: - CheckCondition(QObject* parent = nullptr); - -public: - void SetClientCore(ClientCore* clientCore); void SetTasks(const QVector& tasks); QVector GetTasks() const; - bool IsQuit() const; -Q_SIGNALS: - void sigCheckOver(); - -public Q_SLOTS: - void interrupCheck(); - void recvFrame(QSharedPointer frame); - -protected: +public: void run() override; + void interrupCheck() override; + void recvFrame(QSharedPointer frame) override; private: QString msg_; - bool isRun_; - bool isAlreadyInter_; QVector tasks_; - ClientCore* clientCore_{}; }; #endif // TRANSFORM_H \ No newline at end of file diff --git a/Gui/frelayGUI.cpp b/Gui/frelayGUI.cpp index 91c9017..febde63 100644 --- a/Gui/frelayGUI.cpp +++ b/Gui/frelayGUI.cpp @@ -146,15 +146,15 @@ void frelayGUI::HandleTask(const QVector& tasks) } // 检查文件 - CheckCondition cond(this); + WaitCheck cond(this); cond.SetTasks(tasks); - cond.SetClientCore(clientCore_); + cond.SetClient(clientCore_); LoadingDialog checking(this); checking.setTipsText("正在检查文件..."); - connect(&cond, &CheckCondition::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked); - connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &CheckCondition::recvFrame); + connect(&cond, &WaitCheck::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked); + connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &WaitCheck::recvFrame); cond.start(); checking.exec(); diff --git a/Util/Util.cpp b/Util/Util.cpp index a1b765f..61f5f7b 100644 --- a/Util/Util.cpp +++ b/Util/Util.cpp @@ -235,3 +235,4 @@ void GlobalData::SetConfigPath(const std::string& path) { ConfigPath_ = path; } +