From 182f8faad5e9a93fbc276fe7f80ddc11fbbd4d4c Mon Sep 17 00:00:00 2001 From: taynpg Date: Thu, 19 Jun 2025 22:07:12 +0800 Subject: [PATCH] trans: success to trans one file. --- CMakeLists.txt | 2 +- ClientCore/ClientCore.cpp | 15 ++++++++------- ClientCore/FileTrans.cpp | 21 ++++++++++++++++----- Gui/Control/CompareControl.cpp | 2 +- Gui/Form/Transform.cpp | 14 +++++++++++--- Gui/Form/Transform.h | 2 +- Gui/main.cpp | 2 +- Server/Server.cpp | 4 ++-- 8 files changed, 41 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9529f63..844a736 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(frelay VERSION 0.1.1 LANGUAGES CXX) +project(frelay VERSION 0.1.2 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/ClientCore/ClientCore.cpp b/ClientCore/ClientCore.cpp index d9d1aa7..26a58a5 100644 --- a/ClientCore/ClientCore.cpp +++ b/ClientCore/ClientCore.cpp @@ -100,6 +100,7 @@ void ClientCore::UseFrame(QSharedPointer frame) break; } case FrameBufferType::FBT_SER_MSG_FORWARD_FAILED: { + qCritical() << QString(tr("************************** forward failed.")); break; } case FrameBufferType::FBT_CLI_REQ_SEND: { @@ -111,31 +112,31 @@ void ClientCore::UseFrame(QSharedPointer frame) break; } case FrameBufferType::FBT_CLI_TRANS_DONE: { - sigTransDone(frame); + emit sigTransDone(frame); break; } case FrameBufferType::FBT_CLI_CAN_SEND: { - sigCanSend(frame); + emit sigCanSend(frame); break; } case FrameBufferType::FBT_CLI_CANOT_SEND: { - sigCanotSend(frame); + emit sigCanotSend(frame); break; } case FBT_CLI_CANOT_DOWN: { - sigCanotDown(frame); + emit sigCanotDown(frame); break; } case FBT_CLI_CAN_DOWN: { - sigCanDown(frame); + emit sigCanDown(frame); break; } case FBT_CLI_FILE_BUFFER: { - sigFileBuffer(frame); + emit sigFileBuffer(frame); break; } case FBT_CLI_TRANS_FAILED: { - sigTransFailed(frame); + emit sigTransFailed(frame); break; } default: diff --git a/ClientCore/FileTrans.cpp b/ClientCore/FileTrans.cpp index ee804f4..4afe70f 100644 --- a/ClientCore/FileTrans.cpp +++ b/ClientCore/FileTrans.cpp @@ -52,6 +52,7 @@ void FileTrans::ReqSendFile(const TransTask& task) sendTask_->state = TaskState::STATE_RUNNING; sendTask_->totalSize = info.size; sendTask_->tranSize = 0; + sendTask_->task = task; } void FileTrans::ReqDownFile(const TransTask& task) @@ -269,14 +270,15 @@ SendThread::SendThread(ClientCore* clientCore) : cliCore_(clientCore) void SendThread::run() { // task's file shoule be already opened. - auto frame = QSharedPointer::create(); - frame->tid = task_->task.remoteId; - frame->type = FBT_CLI_FILE_BUFFER; - frame->call = [this](QSharedPointer frame) { sendCall(frame); }; - isSuccess_ = true; while (!task_->file.atEnd()) { + + auto frame = QSharedPointer::create(); + frame->tid = task_->task.remoteId; + frame->type = FBT_CLI_FILE_BUFFER; + frame->call = [this](QSharedPointer frame) { sendCall(frame); }; frame->data.resize(CHUNK_BUF_SIZE); + auto br = task_->file.read(frame->data.data(), CHUNK_BUF_SIZE); if (br == -1) { qCritical() << QString(tr("read file failed: %1")).arg(task_->file.errorString()); @@ -303,6 +305,15 @@ void SendThread::run() break; } } + + while (curSendCount_ > 0) { + QThread::msleep(1); + // shoule add abort action mark. + } + + InfoMsg info; + auto f = cliCore_->GetBuffer(info, FBT_CLI_TRANS_DONE, task_->task.remoteId); + ClientCore::asyncInvoke(cliCore_, [this, f]() { return cliCore_->Send(f); }); task_->file.close(); } diff --git a/Gui/Control/CompareControl.cpp b/Gui/Control/CompareControl.cpp index 1662085..ac3ff01 100644 --- a/Gui/Control/CompareControl.cpp +++ b/Gui/Control/CompareControl.cpp @@ -1,4 +1,4 @@ -#include "CompareControl.h" +#include "CompareControl.h" #include "ui_CompareControl.h" diff --git a/Gui/Form/Transform.cpp b/Gui/Form/Transform.cpp index 0a269ef..37ed207 100644 --- a/Gui/Form/Transform.cpp +++ b/Gui/Form/Transform.cpp @@ -29,8 +29,8 @@ void TransForm::SetClientCore(ClientCore* clientCore) void TransForm::SetTasks(const QVector& tasks) { - exis_ = true; tasks_ = tasks; + exis_ = false; } void TransForm::startTask() @@ -75,6 +75,8 @@ void TransForm::startTask() } } } + tasks_.clear(); + qDebug() << "TransForm::startTask exit...."; } void TransForm::setProgress(double val) @@ -111,7 +113,13 @@ void TransForm::showEvent(QShowEvent* event) { QDialog::showEvent(event); workTh_ = new TranFromTh(this, this); - fileTrans_->moveToThread(workTh_); - connect(workTh_, &QThread::finished, fileTrans_, &QObject::deleteLater); + //fileTrans_->moveToThread(workTh_); + connect(workTh_, &QThread::finished, workTh_, &QObject::deleteLater); workTh_->start(); } + +void TransForm::closeEvent(QCloseEvent* event) +{ + exis_ = true; + QDialog::closeEvent(event); +} diff --git a/Gui/Form/Transform.h b/Gui/Form/Transform.h index 375b403..4ce30f8 100644 --- a/Gui/Form/Transform.h +++ b/Gui/Form/Transform.h @@ -39,6 +39,7 @@ private: protected: void showEvent(QShowEvent* event) override; + void closeEvent(QCloseEvent* event) override; private: bool exis_{ false }; @@ -57,7 +58,6 @@ public: explicit TranFromTh(TransForm* tf, QObject* parent = nullptr) : QThread(parent), tf_(tf) { } - protected: void run() override { diff --git a/Gui/main.cpp b/Gui/main.cpp index 62c0e82..de196a3 100644 --- a/Gui/main.cpp +++ b/Gui/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char* argv[]) QFont font("Microsoft YaHei", 9); a.setFont(font); a.setWindowIcon(QIcon(":/ico/main.ico")); - //a.setStyle("Windows"); + a.setStyle("Windows"); #endif frelayGUI w; diff --git a/Server/Server.cpp b/Server/Server.cpp index 2666086..3044ce1 100644 --- a/Server/Server.cpp +++ b/Server/Server.cpp @@ -1,4 +1,4 @@ -#include "Server.h" +#include "Server.h" #include #include @@ -130,7 +130,6 @@ void Server::processClientData(QSharedPointer client) break; } frame->fid = client->id; - if (frame->type <= 30) { frame->tid = "server"; replyRequest(client, frame); @@ -145,6 +144,7 @@ void Server::processClientData(QSharedPointer client) bool Server::forwardData(QSharedPointer client, QSharedPointer frame) { QSharedPointer targetClient; + { QReadLocker locker(&rwLock_); targetClient = clients_.value(frame->tid);