apr:handle some offline situ.

This commit is contained in:
2025-10-20 16:40:52 +08:00
parent e2f04dde62
commit 0c4c5ff4de
9 changed files with 40 additions and 58 deletions

View File

@@ -12,7 +12,7 @@
"ignoreFailures": true
}
],
//"visualizerFile": "${workspaceRoot}/.vscode/qt6.natvis",
"visualizerFile": "${workspaceRoot}/.vscode/qt5.natvis",
"args": []
},
"cmake.environment": {

View File

@@ -176,6 +176,10 @@ void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
emit sigFileInfo(frame);
break;
}
case FBT_SER_MSG_OFFLINE: {
emit sigOffline(frame);
break;
}
default:
qCritical() << QString("unknown frame type: %1").arg(frame->type);
break;
@@ -276,33 +280,11 @@ void HeatBeat::run()
continue;
}
ClientCore::syncInvoke(core_, frame);
}
}
TransBeat::TransBeat(ClientCore* core, QObject* parent) : QThread(parent), core_(core)
{
}
TransBeat::~TransBeat()
{
Stop();
}
void TransBeat::run()
{
isRun_ = true;
InfoMsg info;
while (isRun_) {
QThread::sleep(1);
if (!core_->IsConnect()) {
auto rid = core_->GetRemoteID();
if (rid.isEmpty()) {
continue;
}
auto frame = core_->GetBuffer(info, FBT_SER_MSG_JUDGE_OTHER_ALIVE, core_->GetRemoteID());
ClientCore::syncInvoke(core_, frame);
auto frame2 = core_->GetBuffer(info, FBT_SER_MSG_JUDGE_OTHER_ALIVE, rid);
ClientCore::syncInvoke(core_, frame2);
}
}
void TransBeat::Stop()
{
isRun_ = false;
}
}

View File

@@ -76,6 +76,7 @@ signals:
void sigFileBuffer(QSharedPointer<FrameBuffer> frame);
void sigTransFailed(QSharedPointer<FrameBuffer> frame);
void sigFileInfo(QSharedPointer<FrameBuffer> frame);
void sigOffline(QSharedPointer<FrameBuffer> frame);
signals:
void conSuccess();
@@ -143,24 +144,4 @@ private:
ClientCore* core_{};
};
// judge send client is alive or not when downloading
class TransBeat : public QThread
{
Q_OBJECT
public:
TransBeat(ClientCore* core, QObject* parent = nullptr);
~TransBeat() override;
public:
void Stop();
protected:
void run() override;
private:
bool isRun_{false};
ClientCore* core_{};
};
#endif // CLIENTCORE_H

View File

@@ -17,13 +17,11 @@ FileTrans::FileTrans(ClientCore* clientCore) : clientCore_(clientCore)
*/
void FileTrans::ReqSendFile(const TransTask& task)
{
sendTask_->state = TaskState::STATE_RUNNING;
// TODO: check if running...
if (sendTask_->file.isOpen()) {
qWarning() << QString(tr("file [%1] is running.")).arg(sendTask_->file.fileName());
while (sendTask_->file.isOpen()) {
QThread::msleep(1);
}
qWarning() << QString(tr("file [%1] is exit running.")).arg(sendTask_->file.fileName());
qWarning() << QString(tr("file [%1] is already opened, will auto close.")).arg(sendTask_->file.fileName());
sendTask_->file.close();
}
// start
InfoMsg info;
@@ -146,6 +144,7 @@ void FileTrans::RegisterSignal()
connect(clientCore_, &ClientCore::sigFileBuffer, this, [this](QSharedPointer<FrameBuffer> frame) { fbtFileBuffer(frame); });
connect(clientCore_, &ClientCore::sigFileInfo, this, [this](QSharedPointer<FrameBuffer> frame) { fbtFileInfo(frame); });
connect(clientCore_, &ClientCore::sigTransFailed, this, [this](QSharedPointer<FrameBuffer> frame) { fbtTransFailed(frame); });
connect(clientCore_, &ClientCore::sigOffline, this, [this](QSharedPointer<FrameBuffer> frame) { fbtInterrupt(frame); });
}
// The other party requests to send, prepare to receive.
@@ -317,6 +316,18 @@ void FileTrans::fbtTransFailed(QSharedPointer<FrameBuffer> frame)
downTask_->state = TaskState::STATE_FAILED;
}
void FileTrans::fbtInterrupt(QSharedPointer<FrameBuffer> frame)
{
if (downTask_->state == TaskState::STATE_RUNNING) {
qWarning() << QString(tr("trans file:%1 interrupt.")).arg(downTask_->file.fileName());
downTask_->state = TaskState::STATE_NONE;
}
if (sendTask_->state == TaskState::STATE_RUNNING) {
qWarning() << QString(tr("trans file:%1 interrupt.")).arg(sendTask_->file.fileName());
sendTask_->state = TaskState::STATE_NONE;
}
}
void FileTrans::SendFile(const QSharedPointer<DoTransTask>& task)
{
auto* sendThread = new SendThread(clientCore_);

View File

@@ -78,6 +78,7 @@ private:
void fbtCanotSend(QSharedPointer<FrameBuffer> frame);
void fbtCanSend(QSharedPointer<FrameBuffer> frame);
void fbtTransFailed(QSharedPointer<FrameBuffer> frame);
void fbtInterrupt(QSharedPointer<FrameBuffer> frame);
private:
void RegisterSignal();

View File

@@ -53,6 +53,11 @@ void Connecter::RunWorker(ClientCore* clientCore)
clientCore_->SetRemoteID("");
qInfo() << QString(tr("Disconnected."));
});
connect(clientCore_, &ClientCore::sigOffline, this, [this]() {
ui->elbClient->clear();
clientCore_->SetRemoteID("");
RefreshClient();
});
connect(this, &Connecter::sigDoConnect, clientCore_, &ClientCore::DoConnect);
connect(this, &Connecter::sigDisConnect, this,
@@ -125,7 +130,7 @@ void Connecter::setState(ConnectState cs)
void Connecter::Disconnect()
{
qWarning() << QString(tr("Disconnected requeset..."));
qWarning() << QString(tr("Disconnected..."));
emit sigDisConnect();
}

View File

@@ -41,6 +41,8 @@ void FileManager::SetModeStr(const QString& modeStr, int type, ClientCore* clien
isRemote_ = true;
ui->tableWidget->setIsRemote(true);
fileHelper_ = remotePtr;
connect(cliCore_, &ClientCore::sigDisconnect, this, [this]() { ui->tableWidget->setRowCount(0); });
connect(cliCore_, &ClientCore::sigOffline, this, [this]() { ui->tableWidget->setRowCount(0); });
}
ui->tableWidget->setOwnIDCall([this]() { return cliCore_->GetOwnID(); });

View File

@@ -67,7 +67,7 @@ void TransForm::startTask()
break;
}
emit sigProgress(progress);
QThread::msleep(10);
QThread::msleep(2);
}
} else {
fileTrans_->ReqDownFile(task);
@@ -85,7 +85,7 @@ void TransForm::startTask()
break;
}
emit sigProgress(progress);
QThread::msleep(10);
QThread::msleep(2);
}
}
++curTaskNum_;

View File

@@ -8,7 +8,7 @@
#include "InfoPack.hpp"
#define NO_HEATBEAT_TIMEOUT (10)
#define MONITOR_HEART_SPED (10 * 1000)
#define MONITOR_HEART_SPED (10 * 2)
Server::Server(QObject* parent) : QTcpServer(parent)
{
@@ -116,7 +116,7 @@ void Server::processClientData(QSharedPointer<ClientInfo> client)
}
frame->fid = client->id;
if (frame->type <= 30) {
frame->tid = "server";
//frame->tid = "server";
replyRequest(client, frame);
} else {
if (!forwardData(client, frame)) {