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:
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ private:
|
|||||||
quint16 port_{};
|
quint16 port_{};
|
||||||
FileTrans* fileTrans_{};
|
FileTrans* fileTrans_{};
|
||||||
SocketWorker* sockWorker_{};
|
SocketWorker* sockWorker_{};
|
||||||
|
HeatBeat* heatBeat_{};
|
||||||
ClientCore* clientCore_;
|
ClientCore* clientCore_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
QMenu* menu_;
|
QMenu* menu_;
|
||||||
SocketWorker* sockWorker_{};
|
SocketWorker* sockWorker_{};
|
||||||
|
HeatBeat* heatBeat_{};
|
||||||
QStandardItemModel* model_;
|
QStandardItemModel* model_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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"/>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 |
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user