trans: success to trans one file.

This commit is contained in:
2025-06-19 22:07:12 +08:00
parent 5890b66309
commit 182f8faad5
8 changed files with 41 additions and 21 deletions

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16) 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 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)

View File

@@ -100,6 +100,7 @@ void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
break; break;
} }
case FrameBufferType::FBT_SER_MSG_FORWARD_FAILED: { case FrameBufferType::FBT_SER_MSG_FORWARD_FAILED: {
qCritical() << QString(tr("************************** forward failed."));
break; break;
} }
case FrameBufferType::FBT_CLI_REQ_SEND: { case FrameBufferType::FBT_CLI_REQ_SEND: {
@@ -111,31 +112,31 @@ void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
break; break;
} }
case FrameBufferType::FBT_CLI_TRANS_DONE: { case FrameBufferType::FBT_CLI_TRANS_DONE: {
sigTransDone(frame); emit sigTransDone(frame);
break; break;
} }
case FrameBufferType::FBT_CLI_CAN_SEND: { case FrameBufferType::FBT_CLI_CAN_SEND: {
sigCanSend(frame); emit sigCanSend(frame);
break; break;
} }
case FrameBufferType::FBT_CLI_CANOT_SEND: { case FrameBufferType::FBT_CLI_CANOT_SEND: {
sigCanotSend(frame); emit sigCanotSend(frame);
break; break;
} }
case FBT_CLI_CANOT_DOWN: { case FBT_CLI_CANOT_DOWN: {
sigCanotDown(frame); emit sigCanotDown(frame);
break; break;
} }
case FBT_CLI_CAN_DOWN: { case FBT_CLI_CAN_DOWN: {
sigCanDown(frame); emit sigCanDown(frame);
break; break;
} }
case FBT_CLI_FILE_BUFFER: { case FBT_CLI_FILE_BUFFER: {
sigFileBuffer(frame); emit sigFileBuffer(frame);
break; break;
} }
case FBT_CLI_TRANS_FAILED: { case FBT_CLI_TRANS_FAILED: {
sigTransFailed(frame); emit sigTransFailed(frame);
break; break;
} }
default: default:

View File

@@ -52,6 +52,7 @@ void FileTrans::ReqSendFile(const TransTask& task)
sendTask_->state = TaskState::STATE_RUNNING; sendTask_->state = TaskState::STATE_RUNNING;
sendTask_->totalSize = info.size; sendTask_->totalSize = info.size;
sendTask_->tranSize = 0; sendTask_->tranSize = 0;
sendTask_->task = task;
} }
void FileTrans::ReqDownFile(const TransTask& task) void FileTrans::ReqDownFile(const TransTask& task)
@@ -269,14 +270,15 @@ SendThread::SendThread(ClientCore* clientCore) : cliCore_(clientCore)
void SendThread::run() void SendThread::run()
{ {
// task's file shoule be already opened. // task's file shoule be already opened.
isSuccess_ = true;
while (!task_->file.atEnd()) {
auto frame = QSharedPointer<FrameBuffer>::create(); auto frame = QSharedPointer<FrameBuffer>::create();
frame->tid = task_->task.remoteId; frame->tid = task_->task.remoteId;
frame->type = FBT_CLI_FILE_BUFFER; frame->type = FBT_CLI_FILE_BUFFER;
frame->call = [this](QSharedPointer<FrameBuffer> frame) { sendCall(frame); }; frame->call = [this](QSharedPointer<FrameBuffer> frame) { sendCall(frame); };
isSuccess_ = true;
while (!task_->file.atEnd()) {
frame->data.resize(CHUNK_BUF_SIZE); frame->data.resize(CHUNK_BUF_SIZE);
auto br = task_->file.read(frame->data.data(), CHUNK_BUF_SIZE); auto br = task_->file.read(frame->data.data(), CHUNK_BUF_SIZE);
if (br == -1) { if (br == -1) {
qCritical() << QString(tr("read file failed: %1")).arg(task_->file.errorString()); qCritical() << QString(tr("read file failed: %1")).arg(task_->file.errorString());
@@ -303,6 +305,15 @@ void SendThread::run()
break; 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(); task_->file.close();
} }

View File

@@ -1,4 +1,4 @@
#include "CompareControl.h" #include "CompareControl.h"
#include "ui_CompareControl.h" #include "ui_CompareControl.h"

View File

@@ -29,8 +29,8 @@ void TransForm::SetClientCore(ClientCore* clientCore)
void TransForm::SetTasks(const QVector<TransTask>& tasks) void TransForm::SetTasks(const QVector<TransTask>& tasks)
{ {
exis_ = true;
tasks_ = tasks; tasks_ = tasks;
exis_ = false;
} }
void TransForm::startTask() void TransForm::startTask()
@@ -75,6 +75,8 @@ void TransForm::startTask()
} }
} }
} }
tasks_.clear();
qDebug() << "TransForm::startTask exit....";
} }
void TransForm::setProgress(double val) void TransForm::setProgress(double val)
@@ -111,7 +113,13 @@ void TransForm::showEvent(QShowEvent* event)
{ {
QDialog::showEvent(event); QDialog::showEvent(event);
workTh_ = new TranFromTh(this, this); workTh_ = new TranFromTh(this, this);
fileTrans_->moveToThread(workTh_); //fileTrans_->moveToThread(workTh_);
connect(workTh_, &QThread::finished, fileTrans_, &QObject::deleteLater); connect(workTh_, &QThread::finished, workTh_, &QObject::deleteLater);
workTh_->start(); workTh_->start();
} }
void TransForm::closeEvent(QCloseEvent* event)
{
exis_ = true;
QDialog::closeEvent(event);
}

View File

@@ -39,6 +39,7 @@ private:
protected: protected:
void showEvent(QShowEvent* event) override; void showEvent(QShowEvent* event) override;
void closeEvent(QCloseEvent* event) override;
private: private:
bool exis_{ false }; bool exis_{ false };
@@ -57,7 +58,6 @@ public:
explicit TranFromTh(TransForm* tf, QObject* parent = nullptr) : QThread(parent), tf_(tf) explicit TranFromTh(TransForm* tf, QObject* parent = nullptr) : QThread(parent), tf_(tf)
{ {
} }
protected: protected:
void run() override void run() override
{ {

View File

@@ -16,7 +16,7 @@ int main(int argc, char* argv[])
QFont font("Microsoft YaHei", 9); QFont font("Microsoft YaHei", 9);
a.setFont(font); a.setFont(font);
a.setWindowIcon(QIcon(":/ico/main.ico")); a.setWindowIcon(QIcon(":/ico/main.ico"));
//a.setStyle("Windows"); a.setStyle("Windows");
#endif #endif
frelayGUI w; frelayGUI w;

View File

@@ -1,4 +1,4 @@
#include "Server.h" #include "Server.h"
#include <QDateTime> #include <QDateTime>
#include <QDebug> #include <QDebug>
@@ -130,7 +130,6 @@ void Server::processClientData(QSharedPointer<ClientInfo> client)
break; break;
} }
frame->fid = client->id; frame->fid = client->id;
if (frame->type <= 30) { if (frame->type <= 30) {
frame->tid = "server"; frame->tid = "server";
replyRequest(client, frame); replyRequest(client, frame);
@@ -145,6 +144,7 @@ void Server::processClientData(QSharedPointer<ClientInfo> client)
bool Server::forwardData(QSharedPointer<ClientInfo> client, QSharedPointer<FrameBuffer> frame) bool Server::forwardData(QSharedPointer<ClientInfo> client, QSharedPointer<FrameBuffer> frame)
{ {
QSharedPointer<ClientInfo> targetClient; QSharedPointer<ClientInfo> targetClient;
{ {
QReadLocker locker(&rwLock_); QReadLocker locker(&rwLock_);
targetClient = clients_.value(frame->tid); targetClient = clients_.value(frame->tid);