fix: 1.console client not register own data type. 2.start by current screen heigh width. 3.set heartbeat to server.

This commit is contained in:
2025-06-26 22:09:04 +08:00
parent a3b5078d73
commit 08a2957177
12 changed files with 67 additions and 47 deletions

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(frelay VERSION 0.1 LANGUAGES CXX) project(frelay VERSION 0.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)
@@ -20,7 +20,7 @@ endif()
if(WIN32) if(WIN32)
if(DEFINED XP_PLATFORM_SUPPORT) if(DEFINED XP_PLATFORM_SUPPORT)
message(STATUS "For Windows XP platform.") message(STATUS "Support Windows XP platform.")
add_definitions(-D_WIN32_WINNT=0x0501) add_definitions(-D_WIN32_WINNT=0x0501)
else() else()
add_definitions(-D_WIN32_WINNT=0x0601) add_definitions(-D_WIN32_WINNT=0x0601)

View File

@@ -74,7 +74,7 @@ void ClientCore::onReadyRead()
void ClientCore::onDisconnected() void ClientCore::onDisconnected()
{ {
connected_ = false; connected_ = false;
qCritical() << QString("client %1 disconnected...").arg(remoteID_); qCritical() << QString("You [%1] disconnected...").arg(ownID_);
emit sigDisconnect(); emit sigDisconnect();
} }

View File

@@ -13,6 +13,8 @@ void ConsoleHelper::RunWorker(ClientCore* clientCore)
clientCore_ = clientCore; clientCore_ = clientCore;
sockWorker_ = new SocketWorker(clientCore_, nullptr); sockWorker_ = new SocketWorker(clientCore_, nullptr);
heatBeat_ = new HeatBeat(clientCore_);
clientCore_->moveToThread(sockWorker_); clientCore_->moveToThread(sockWorker_);
fileTrans_ = new FileTrans(clientCore_); fileTrans_ = new FileTrans(clientCore_);
@@ -24,6 +26,7 @@ void ConsoleHelper::RunWorker(ClientCore* clientCore)
connect(sockWorker_, &QThread::finished, sockWorker_, &QObject::deleteLater); connect(sockWorker_, &QThread::finished, sockWorker_, &QObject::deleteLater);
sockWorker_->start(); sockWorker_->start();
heatBeat_->start();
} }
void ConsoleHelper::SetIpPort(const QString& ip, quint16 port) void ConsoleHelper::SetIpPort(const QString& ip, quint16 port)

View File

@@ -25,6 +25,7 @@ private:
quint16 port_{}; quint16 port_{};
FileTrans* fileTrans_{}; FileTrans* fileTrans_{};
SocketWorker* sockWorker_{}; SocketWorker* sockWorker_{};
HeatBeat* heatBeat_{};
ClientCore* clientCore_; ClientCore* clientCore_;
}; };

View File

@@ -25,6 +25,11 @@ int main(int argc, char* argv[])
#endif #endif
#endif #endif
qRegisterMetaType<QSharedPointer<FrameBuffer>>("QSharedPointer<FrameBuffer>");
qRegisterMetaType<InfoClientVec>("InfoClientVec");
qRegisterMetaType<DirFileInfoVec>("DirFileInfoVec");
qRegisterMetaType<TransTask>("TransTask");
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
Util::InitLogger("frelayConsole.log", "frelayConsole"); Util::InitLogger("frelayConsole.log", "frelayConsole");

View File

@@ -24,6 +24,7 @@ void Connecter::RunWorker(ClientCore* clientCore)
connect(clientCore_, &ClientCore::sigClients, this, &Connecter::HandleClients); connect(clientCore_, &ClientCore::sigClients, this, &Connecter::HandleClients);
sockWorker_ = new SocketWorker(clientCore_, nullptr); sockWorker_ = new SocketWorker(clientCore_, nullptr);
heatBeat_ = new HeatBeat(clientCore_);
clientCore_->moveToThread(sockWorker_); clientCore_->moveToThread(sockWorker_);
connect(clientCore_, &ClientCore::conSuccess, this, [this]() { connect(clientCore_, &ClientCore::conSuccess, this, [this]() {
@@ -50,6 +51,7 @@ void Connecter::RunWorker(ClientCore* clientCore)
connect(this, &Connecter::sigDisConnect, clientCore_, &ClientCore::Disconnect); connect(this, &Connecter::sigDisConnect, clientCore_, &ClientCore::Disconnect);
connect(sockWorker_, &QThread::finished, sockWorker_, &QObject::deleteLater); connect(sockWorker_, &QThread::finished, sockWorker_, &QObject::deleteLater);
heatBeat_->start();
sockWorker_->start(); sockWorker_->start();
} }
@@ -89,6 +91,7 @@ void Connecter::setState(ConnectState cs)
ui->btnConnect->setEnabled(false); ui->btnConnect->setEnabled(false);
ui->btnDisconnect->setEnabled(true); ui->btnDisconnect->setEnabled(true);
RefreshClient(); RefreshClient();
connect(heatBeat_, &HeatBeat::finished, heatBeat_, &QObject::deleteLater);
break; break;
case CS_DISCONNECT: case CS_DISCONNECT:
ui->btnConnect->setEnabled(true); ui->btnConnect->setEnabled(true);
@@ -139,7 +142,8 @@ void Connecter::InitControl()
ui->btnDisconnect->setEnabled(false); ui->btnDisconnect->setEnabled(false);
ui->edIP->setText("127.0.0.1"); ui->edIP->setText("127.0.0.1");
ui->edPort->setText("9009"); ui->edPort->setText("9009");
ui->edPort->setFixedWidth(70); // ui->edIP->setMinimumWidth(120);
// ui->edPort->setFixedWidth(60);
connect(ui->btnConnect, &QPushButton::clicked, this, &Connecter::Connect); connect(ui->btnConnect, &QPushButton::clicked, this, &Connecter::Connect);
connect(ui->btnRefresh, &QPushButton::clicked, this, &Connecter::RefreshClient); connect(ui->btnRefresh, &QPushButton::clicked, this, &Connecter::RefreshClient);

View File

@@ -54,6 +54,7 @@ private:
private: private:
QMenu* menu_; QMenu* menu_;
SocketWorker* sockWorker_{}; SocketWorker* sockWorker_{};
HeatBeat* heatBeat_{};
QStandardItemModel* model_; QStandardItemModel* model_;
}; };

View File

@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>350</width> <width>331</width>
<height>276</height> <height>289</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -26,6 +26,30 @@
<item> <item>
<widget class="QLineEdit" name="edIP"/> <widget class="QLineEdit" name="edIP"/>
</item> </item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="elbClient">
<property name="text">
<string>None</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
@@ -46,35 +70,7 @@
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_3"> <layout class="QHBoxLayout" name="horizontalLayout_3"/>
<item>
<widget class="QLabel" name="lbClient">
<property name="text">
<string>Client:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="elbClient">
<property name="text">
<string>None</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item> </item>
<item> <item>
<widget class="QListView" name="listView"/> <widget class="QListView" name="listView"/>

View File

@@ -28,7 +28,7 @@ public:
explicit LogPrint(QWidget* parent = nullptr); explicit LogPrint(QWidget* parent = nullptr);
~LogPrint(); ~LogPrint();
public: public slots:
void Info(const QString& message); void Info(const QString& message);
void Warn(const QString& message); void Warn(const QString& message);
void Error(const QString& message); void Error(const QString& message);

View File

@@ -1,6 +1,7 @@
#include "frelayGUI.h" #include "frelayGUI.h"
#include <QLabel> #include <QLabel>
#include <QScreen>
#include <QSplitter> #include <QSplitter>
#include <fversion.h> #include <fversion.h>
@@ -15,7 +16,11 @@ frelayGUI::frelayGUI(QWidget* parent) : QMainWindow(parent), ui(new Ui::frelayGU
InitControl(); InitControl();
ControlSignal(); ControlSignal();
ControlLayout(); ControlLayout();
resize(1500, 800);
QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
int width = static_cast<int>(availableGeometry.width() * 0.8);
int height = static_cast<int>(availableGeometry.height() * 0.6);
resize(width, height);
setWindowTitle(QString(tr("frelay %1")).arg(VERSION_NUM)); setWindowTitle(QString(tr("frelay %1")).arg(VERSION_NUM));
@@ -95,15 +100,16 @@ void frelayGUI::ControlMsgHander(QtMsgType type, const QMessageLogContext& conte
{ {
switch (type) { switch (type) {
case QtDebugMsg: case QtDebugMsg:
logPrint->Debug(msg); QMetaObject::invokeMethod(logPrint, "Debug", Qt::QueuedConnection, Q_ARG(QString, msg));
break; break;
case QtInfoMsg: case QtInfoMsg:
logPrint->Info(msg); QMetaObject::invokeMethod(logPrint, "Info", Qt::QueuedConnection, Q_ARG(QString, msg));
break; break;
case QtWarningMsg: case QtWarningMsg:
logPrint->Warn(msg); QMetaObject::invokeMethod(logPrint, "Warn", Qt::QueuedConnection, Q_ARG(QString, msg));
break; break;
default: default:
QMetaObject::invokeMethod(logPrint, "Error", Qt::QueuedConnection, Q_ARG(QString, msg));
logPrint->Error(msg); logPrint->Error(msg);
break; break;
} }

View File

@@ -12,10 +12,10 @@
| 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | | 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 |
| :--: | :--: | ------------------------------------------------------------ | :--: | :------: | :------: | | :--: | :--: | ------------------------------------------------------------ | :--: | :------: | :------: |
| 8 | 功能 | 文件浏览页面要支持按照类型排序,时间排序,和文件后缀筛选。 | | 0.1 | | | 8 | 功能 | 文件浏览页面要支持按照类型排序,时间排序,和文件后缀筛选。 | | 0.1 | |
| 7 | 优化 | IP和Port宽度要合理一些,IP过小,Port宽度过大。 | | 0.1 | | | 7 | 优化 | IP和Port宽度要合理一些,IP过小,Port宽度过大。 | | 0.1 | 0.2 |
| 6 | 功能 | 比对控件添加可尝试目录浏览控件跳转到指定目录。 | | 0.1 | | | 6 | 功能 | 比对控件添加可尝试目录浏览控件跳转到指定目录。 | | 0.1 | |
| 5 | 问题 | 未设置心跳包,导致超时被Server端踢出。 | 必改 | 0.1 | | | 5 | 问题 | 未设置心跳包,导致超时被Server端踢出。 | 必改 | 0.1 | 0.2 |
| 4 | 问题 | 重复链接Server会崩溃。 | | 0.1 | | | 4 | 问题 | 重复链接Server会崩溃。 | | 0.1 | |
| 3 | 优化 | 首次启动时应当按照当前分辨率进行初始化大小,而不是指定大小。 | | 0.1 | | | 3 | 优化 | 首次启动时应当按照当前分辨率进行初始化大小,而不是指定大小。 | | 0.1 | 0.2 |
| 2 | 问题 | 当某个文件传输失败的时候,关闭传输窗口,再次传输显示已经在传输中。 | | 0.1 | | | 2 | 问题 | 当某个文件传输失败的时候,关闭传输窗口,再次传输显示已经在传输中。 | | 0.1 | |
| 1 | 问题 | Console端显示未注册QSharedPointer\<FrameBuffer\>类型 | | 0.1 | | | 1 | 问题 | Console端显示未注册QSharedPointer\<FrameBuffer\>类型 | | 0.1 | 0.2 |

View File

@@ -7,6 +7,9 @@
#include "InfoMsg.h" #include "InfoMsg.h"
#include "InfoPack.hpp" #include "InfoPack.hpp"
#define NO_HEATBEAT_TIMEOUT (10)
#define MONITOR_HEART_SPED (10 * 1000)
Server::Server(QObject* parent) : QTcpServer(parent) Server::Server(QObject* parent) : QTcpServer(parent)
{ {
monitorTimer_ = new QTimer(this); monitorTimer_ = new QTimer(this);
@@ -27,7 +30,7 @@ bool Server::startServer(quint16 port)
} }
qDebug() << "Server started on port" << serverPort(); qDebug() << "Server started on port" << serverPort();
monitorTimer_->start(300000); monitorTimer_->start(MONITOR_HEART_SPED);
id_ = QString("0.0.0.0:%1").arg(serverPort()); id_ = QString("0.0.0.0:%1").arg(serverPort());
return true; return true;
} }
@@ -101,7 +104,7 @@ void Server::onClientDisconnected()
clients_.remove(clientId); clients_.remove(clientId);
} }
qDebug() << "Client disconnected:" << clientId; qDebug() << "Client disconnected:" << __LINE__ << clientId;
socket->deleteLater(); socket->deleteLater();
} }
@@ -233,7 +236,8 @@ void Server::monitorClients()
QWriteLocker locker(&rwLock_); QWriteLocker locker(&rwLock_);
for (auto it = clients_.begin(); it != clients_.end();) { for (auto it = clients_.begin(); it != clients_.end();) {
if (now - it.value()->connectTime > 300) { auto t = now - it.value()->connectTime;
if (t > NO_HEATBEAT_TIMEOUT) {
qDebug() << "Disconnecting inactive client:" << it.value()->id; qDebug() << "Disconnecting inactive client:" << it.value()->id;
it.value()->socket->disconnectFromHost(); it.value()->socket->disconnectFromHost();
it = clients_.erase(it); it = clients_.erase(it);