apr:handle some offline situ.
This commit is contained in:
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -12,7 +12,7 @@
|
|||||||
"ignoreFailures": true
|
"ignoreFailures": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
//"visualizerFile": "${workspaceRoot}/.vscode/qt6.natvis",
|
"visualizerFile": "${workspaceRoot}/.vscode/qt5.natvis",
|
||||||
"args": []
|
"args": []
|
||||||
},
|
},
|
||||||
"cmake.environment": {
|
"cmake.environment": {
|
||||||
|
|||||||
@@ -176,6 +176,10 @@ void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
|
|||||||
emit sigFileInfo(frame);
|
emit sigFileInfo(frame);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case FBT_SER_MSG_OFFLINE: {
|
||||||
|
emit sigOffline(frame);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
qCritical() << QString("unknown frame type: %1").arg(frame->type);
|
qCritical() << QString("unknown frame type: %1").arg(frame->type);
|
||||||
break;
|
break;
|
||||||
@@ -276,33 +280,11 @@ void HeatBeat::run()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ClientCore::syncInvoke(core_, frame);
|
ClientCore::syncInvoke(core_, frame);
|
||||||
}
|
auto rid = core_->GetRemoteID();
|
||||||
}
|
if (rid.isEmpty()) {
|
||||||
|
|
||||||
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()) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto frame = core_->GetBuffer(info, FBT_SER_MSG_JUDGE_OTHER_ALIVE, core_->GetRemoteID());
|
auto frame2 = core_->GetBuffer(info, FBT_SER_MSG_JUDGE_OTHER_ALIVE, rid);
|
||||||
ClientCore::syncInvoke(core_, frame);
|
ClientCore::syncInvoke(core_, frame2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransBeat::Stop()
|
|
||||||
{
|
|
||||||
isRun_ = false;
|
|
||||||
}
|
|
||||||
@@ -76,6 +76,7 @@ signals:
|
|||||||
void sigFileBuffer(QSharedPointer<FrameBuffer> frame);
|
void sigFileBuffer(QSharedPointer<FrameBuffer> frame);
|
||||||
void sigTransFailed(QSharedPointer<FrameBuffer> frame);
|
void sigTransFailed(QSharedPointer<FrameBuffer> frame);
|
||||||
void sigFileInfo(QSharedPointer<FrameBuffer> frame);
|
void sigFileInfo(QSharedPointer<FrameBuffer> frame);
|
||||||
|
void sigOffline(QSharedPointer<FrameBuffer> frame);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void conSuccess();
|
void conSuccess();
|
||||||
@@ -143,24 +144,4 @@ private:
|
|||||||
ClientCore* core_{};
|
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
|
#endif // CLIENTCORE_H
|
||||||
@@ -17,13 +17,11 @@ FileTrans::FileTrans(ClientCore* clientCore) : clientCore_(clientCore)
|
|||||||
*/
|
*/
|
||||||
void FileTrans::ReqSendFile(const TransTask& task)
|
void FileTrans::ReqSendFile(const TransTask& task)
|
||||||
{
|
{
|
||||||
|
sendTask_->state = TaskState::STATE_RUNNING;
|
||||||
// TODO: check if running...
|
// TODO: check if running...
|
||||||
if (sendTask_->file.isOpen()) {
|
if (sendTask_->file.isOpen()) {
|
||||||
qWarning() << QString(tr("file [%1] is running.")).arg(sendTask_->file.fileName());
|
qWarning() << QString(tr("file [%1] is already opened, will auto close.")).arg(sendTask_->file.fileName());
|
||||||
while (sendTask_->file.isOpen()) {
|
sendTask_->file.close();
|
||||||
QThread::msleep(1);
|
|
||||||
}
|
|
||||||
qWarning() << QString(tr("file [%1] is exit running.")).arg(sendTask_->file.fileName());
|
|
||||||
}
|
}
|
||||||
// start
|
// start
|
||||||
InfoMsg info;
|
InfoMsg info;
|
||||||
@@ -146,6 +144,7 @@ void FileTrans::RegisterSignal()
|
|||||||
connect(clientCore_, &ClientCore::sigFileBuffer, this, [this](QSharedPointer<FrameBuffer> frame) { fbtFileBuffer(frame); });
|
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::sigFileInfo, this, [this](QSharedPointer<FrameBuffer> frame) { fbtFileInfo(frame); });
|
||||||
connect(clientCore_, &ClientCore::sigTransFailed, this, [this](QSharedPointer<FrameBuffer> frame) { fbtTransFailed(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.
|
// The other party requests to send, prepare to receive.
|
||||||
@@ -317,6 +316,18 @@ void FileTrans::fbtTransFailed(QSharedPointer<FrameBuffer> frame)
|
|||||||
downTask_->state = TaskState::STATE_FAILED;
|
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)
|
void FileTrans::SendFile(const QSharedPointer<DoTransTask>& task)
|
||||||
{
|
{
|
||||||
auto* sendThread = new SendThread(clientCore_);
|
auto* sendThread = new SendThread(clientCore_);
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ private:
|
|||||||
void fbtCanotSend(QSharedPointer<FrameBuffer> frame);
|
void fbtCanotSend(QSharedPointer<FrameBuffer> frame);
|
||||||
void fbtCanSend(QSharedPointer<FrameBuffer> frame);
|
void fbtCanSend(QSharedPointer<FrameBuffer> frame);
|
||||||
void fbtTransFailed(QSharedPointer<FrameBuffer> frame);
|
void fbtTransFailed(QSharedPointer<FrameBuffer> frame);
|
||||||
|
void fbtInterrupt(QSharedPointer<FrameBuffer> frame);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RegisterSignal();
|
void RegisterSignal();
|
||||||
|
|||||||
@@ -53,6 +53,11 @@ void Connecter::RunWorker(ClientCore* clientCore)
|
|||||||
clientCore_->SetRemoteID("");
|
clientCore_->SetRemoteID("");
|
||||||
qInfo() << QString(tr("Disconnected."));
|
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::sigDoConnect, clientCore_, &ClientCore::DoConnect);
|
||||||
connect(this, &Connecter::sigDisConnect, this,
|
connect(this, &Connecter::sigDisConnect, this,
|
||||||
@@ -125,7 +130,7 @@ void Connecter::setState(ConnectState cs)
|
|||||||
|
|
||||||
void Connecter::Disconnect()
|
void Connecter::Disconnect()
|
||||||
{
|
{
|
||||||
qWarning() << QString(tr("Disconnected requeset..."));
|
qWarning() << QString(tr("Disconnected..."));
|
||||||
emit sigDisConnect();
|
emit sigDisConnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ void FileManager::SetModeStr(const QString& modeStr, int type, ClientCore* clien
|
|||||||
isRemote_ = true;
|
isRemote_ = true;
|
||||||
ui->tableWidget->setIsRemote(true);
|
ui->tableWidget->setIsRemote(true);
|
||||||
fileHelper_ = remotePtr;
|
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(); });
|
ui->tableWidget->setOwnIDCall([this]() { return cliCore_->GetOwnID(); });
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ void TransForm::startTask()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
emit sigProgress(progress);
|
emit sigProgress(progress);
|
||||||
QThread::msleep(10);
|
QThread::msleep(2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fileTrans_->ReqDownFile(task);
|
fileTrans_->ReqDownFile(task);
|
||||||
@@ -85,7 +85,7 @@ void TransForm::startTask()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
emit sigProgress(progress);
|
emit sigProgress(progress);
|
||||||
QThread::msleep(10);
|
QThread::msleep(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++curTaskNum_;
|
++curTaskNum_;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#include "InfoPack.hpp"
|
#include "InfoPack.hpp"
|
||||||
|
|
||||||
#define NO_HEATBEAT_TIMEOUT (10)
|
#define NO_HEATBEAT_TIMEOUT (10)
|
||||||
#define MONITOR_HEART_SPED (10 * 1000)
|
#define MONITOR_HEART_SPED (10 * 2)
|
||||||
|
|
||||||
Server::Server(QObject* parent) : QTcpServer(parent)
|
Server::Server(QObject* parent) : QTcpServer(parent)
|
||||||
{
|
{
|
||||||
@@ -116,7 +116,7 @@ void Server::processClientData(QSharedPointer<ClientInfo> client)
|
|||||||
}
|
}
|
||||||
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);
|
||||||
} else {
|
} else {
|
||||||
if (!forwardData(client, frame)) {
|
if (!forwardData(client, frame)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user