apo:等待处理的操作抽象出基类。
This commit is contained in:
@@ -362,3 +362,25 @@ 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,10 +12,10 @@
|
|||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QMutexLocker>
|
#include <QMutexLocker>
|
||||||
#include <QQueue>
|
#include <QQueue>
|
||||||
|
#include <QReadWriteLock>
|
||||||
#include <QTcpSocket>
|
#include <QTcpSocket>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <QReadWriteLock>
|
|
||||||
|
|
||||||
class ClientCore : public QObject
|
class ClientCore : public QObject
|
||||||
{
|
{
|
||||||
@@ -159,4 +159,28 @@ private:
|
|||||||
ClientCore* core_{};
|
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<FrameBuffer> frame) = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool isRun_;
|
||||||
|
bool isAlreadyInter_;
|
||||||
|
ClientCore* cli_{};
|
||||||
|
};
|
||||||
|
|
||||||
#endif // CLIENTCORE_H
|
#endif // CLIENTCORE_H
|
||||||
@@ -142,7 +142,6 @@ void TransForm::showEvent(QShowEvent* event)
|
|||||||
{
|
{
|
||||||
QDialog::showEvent(event);
|
QDialog::showEvent(event);
|
||||||
workTh_ = new TranFromTh(this, this);
|
workTh_ = new TranFromTh(this, this);
|
||||||
// fileTrans_->moveToThread(workTh_);
|
|
||||||
connect(workTh_, &QThread::finished, workTh_, &QObject::deleteLater);
|
connect(workTh_, &QThread::finished, workTh_, &QObject::deleteLater);
|
||||||
workTh_->start();
|
workTh_->start();
|
||||||
}
|
}
|
||||||
@@ -153,63 +152,21 @@ void TransForm::closeEvent(QCloseEvent* event)
|
|||||||
QDialog::closeEvent(event);
|
QDialog::closeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckCondition::CheckCondition(QObject* parent) : QThread(parent)
|
WaitCheck::WaitCheck(QObject* parent) : WaitThread(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckCondition::SetClientCore(ClientCore* clientCore)
|
void WaitCheck::SetTasks(const QVector<TransTask>& tasks)
|
||||||
{
|
|
||||||
clientCore_ = clientCore;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheckCondition::SetTasks(const QVector<TransTask>& tasks)
|
|
||||||
{
|
{
|
||||||
tasks_ = tasks;
|
tasks_ = tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<TransTask> CheckCondition::GetTasks() const
|
QVector<TransTask> WaitCheck::GetTasks() const
|
||||||
{
|
{
|
||||||
return tasks_;
|
return tasks_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckCondition::IsQuit() const
|
void WaitCheck::run()
|
||||||
{
|
|
||||||
return isAlreadyInter_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheckCondition::recvFrame(QSharedPointer<FrameBuffer> frame)
|
|
||||||
{
|
|
||||||
InfoMsg info = infoUnpack<InfoMsg>(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<FileCheckState>(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()
|
|
||||||
{
|
{
|
||||||
if (tasks_.empty()) {
|
if (tasks_.empty()) {
|
||||||
qInfo() << tr("没有需要校验的文件或者被中断......");
|
qInfo() << tr("没有需要校验的文件或者被中断......");
|
||||||
@@ -246,8 +203,8 @@ void CheckCondition::run()
|
|||||||
msg.mapData[task.taskUUID].remotePath = task.remotePath;
|
msg.mapData[task.taskUUID].remotePath = task.remotePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto f = clientCore_->GetBuffer(msg, FBT_MSGINFO_ASK, clientCore_->GetRemoteID());
|
auto f = cli_->GetBuffer(msg, FBT_MSGINFO_ASK, cli_->GetRemoteID());
|
||||||
if (!ClientCore::syncInvoke(clientCore_, f)) {
|
if (!ClientCore::syncInvoke(cli_, f)) {
|
||||||
auto errMsg = tr("检查远程文件存在性数据发送失败。");
|
auto errMsg = tr("检查远程文件存在性数据发送失败。");
|
||||||
emit sigCheckOver();
|
emit sigCheckOver();
|
||||||
qCritical() << errMsg;
|
qCritical() << errMsg;
|
||||||
@@ -268,3 +225,31 @@ void CheckCondition::run()
|
|||||||
emit sigCheckOver();
|
emit sigCheckOver();
|
||||||
qInfo() << tr("文件校验结束......");
|
qInfo() << tr("文件校验结束......");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WaitCheck::interrupCheck()
|
||||||
|
{
|
||||||
|
qWarning() << tr("中断文件校验......");
|
||||||
|
WaitThread::interrupCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WaitCheck::recvFrame(QSharedPointer<FrameBuffer> frame)
|
||||||
|
{
|
||||||
|
InfoMsg info = infoUnpack<InfoMsg>(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<FileCheckState>(item.state);
|
||||||
|
}
|
||||||
|
|
||||||
|
qInfo() << tr("检查结束......");
|
||||||
|
msg_ = info.command;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
msg_ = tr("收到未知信息,认为判断失败:") + info.command;
|
||||||
|
qInfo() << msg_;
|
||||||
|
}
|
||||||
|
|||||||
@@ -75,35 +75,23 @@ private:
|
|||||||
TransForm* tf_;
|
TransForm* tf_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CheckCondition : public QThread
|
class WaitCheck : public WaitThread
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
public:
|
||||||
|
WaitCheck(QObject* parent = nullptr);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CheckCondition(QObject* parent = nullptr);
|
|
||||||
|
|
||||||
public:
|
|
||||||
void SetClientCore(ClientCore* clientCore);
|
|
||||||
void SetTasks(const QVector<TransTask>& tasks);
|
void SetTasks(const QVector<TransTask>& tasks);
|
||||||
QVector<TransTask> GetTasks() const;
|
QVector<TransTask> GetTasks() const;
|
||||||
bool IsQuit() const;
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
public:
|
||||||
void sigCheckOver();
|
|
||||||
|
|
||||||
public Q_SLOTS:
|
|
||||||
void interrupCheck();
|
|
||||||
void recvFrame(QSharedPointer<FrameBuffer> frame);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void run() override;
|
void run() override;
|
||||||
|
void interrupCheck() override;
|
||||||
|
void recvFrame(QSharedPointer<FrameBuffer> frame) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString msg_;
|
QString msg_;
|
||||||
bool isRun_;
|
|
||||||
bool isAlreadyInter_;
|
|
||||||
QVector<TransTask> tasks_;
|
QVector<TransTask> tasks_;
|
||||||
ClientCore* clientCore_{};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TRANSFORM_H
|
#endif // TRANSFORM_H
|
||||||
@@ -146,15 +146,15 @@ void frelayGUI::HandleTask(const QVector<TransTask>& tasks)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 检查文件
|
// 检查文件
|
||||||
CheckCondition cond(this);
|
WaitCheck cond(this);
|
||||||
cond.SetTasks(tasks);
|
cond.SetTasks(tasks);
|
||||||
cond.SetClientCore(clientCore_);
|
cond.SetClient(clientCore_);
|
||||||
|
|
||||||
LoadingDialog checking(this);
|
LoadingDialog checking(this);
|
||||||
checking.setTipsText("正在检查文件...");
|
checking.setTipsText("正在检查文件...");
|
||||||
|
|
||||||
connect(&cond, &CheckCondition::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked);
|
connect(&cond, &WaitCheck::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked);
|
||||||
connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &CheckCondition::recvFrame);
|
connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &WaitCheck::recvFrame);
|
||||||
|
|
||||||
cond.start();
|
cond.start();
|
||||||
checking.exec();
|
checking.exec();
|
||||||
|
|||||||
@@ -235,3 +235,4 @@ void GlobalData::SetConfigPath(const std::string& path)
|
|||||||
{
|
{
|
||||||
ConfigPath_ = path;
|
ConfigPath_ = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user