communicate: basic server and client communicate.
This commit is contained in:
@@ -12,11 +12,11 @@ class Compare : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Compare(QWidget *parent = nullptr);
|
||||
explicit Compare(QWidget* parent = nullptr);
|
||||
~Compare();
|
||||
|
||||
private:
|
||||
Ui::Compare *ui;
|
||||
Ui::Compare* ui;
|
||||
};
|
||||
|
||||
#endif // COMPARECONTROL_H
|
||||
#endif // COMPARECONTROL_H
|
||||
|
||||
@@ -4,11 +4,10 @@
|
||||
#include <InfoPack.hpp>
|
||||
#include <future>
|
||||
|
||||
#include "Control/LogControl.h"
|
||||
#include "GuiUtil/Public.h"
|
||||
#include "ui_ConnectControl.h"
|
||||
|
||||
Connecter::Connecter(QWidget* parent) : QWidget(parent), ui(new Ui::Connecter)
|
||||
Connecter::Connecter(QWidget* parent) : QWidget(parent), ui(new Ui::Connecter), th_(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
InitControl();
|
||||
@@ -16,9 +15,6 @@ Connecter::Connecter(QWidget* parent) : QWidget(parent), ui(new Ui::Connecter)
|
||||
|
||||
Connecter::~Connecter()
|
||||
{
|
||||
if (thConnect_.joinable()) {
|
||||
thConnect_.join();
|
||||
}
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@@ -28,11 +24,6 @@ void Connecter::SetClientCore(ClientCore* clientCore)
|
||||
clientCore_->SetClientsCall([this](const InfoClientVec& clients) { HandleClients(clients); });
|
||||
}
|
||||
|
||||
void Connecter::SetLogPrint(LogPrint* log)
|
||||
{
|
||||
log_ = log;
|
||||
}
|
||||
|
||||
void Connecter::SetRemoteCall(const std::function<void(const QString& id)>& call)
|
||||
{
|
||||
remoteCall_ = call;
|
||||
@@ -42,7 +33,7 @@ void Connecter::HandleClients(const InfoClientVec& clients)
|
||||
{
|
||||
model_->removeRows(0, ui->listView->model()->rowCount());
|
||||
for (const auto& client : clients.vec) {
|
||||
auto* item = new QStandardItem(client.name);
|
||||
auto* item = new QStandardItem(client.id);
|
||||
model_->appendRow(item);
|
||||
}
|
||||
}
|
||||
@@ -55,19 +46,30 @@ void Connecter::Connect()
|
||||
FTCommon::msg(this, tr("IP or Port is empty."));
|
||||
return;
|
||||
}
|
||||
auto task = [this, ip, port]() {
|
||||
emit sendConnect(ConnectState::CS_CONNECTING);
|
||||
connceted_ = clientCore_->Connect(ip, port.toInt());
|
||||
if (connceted_) {
|
||||
emit sendConnect(ConnectState::CS_CONNECTED);
|
||||
} else {
|
||||
emit sendConnect(ConnectState::CS_DISCONNECT);
|
||||
|
||||
if (th_) {
|
||||
if (th_->isRunning()) {
|
||||
th_->quit();
|
||||
th_->wait(1000);
|
||||
}
|
||||
};
|
||||
if (thConnect_.joinable()) {
|
||||
thConnect_.join();
|
||||
delete th_;
|
||||
}
|
||||
thConnect_ = std::thread(task);
|
||||
|
||||
auto* worker = new ConnectWorker(clientCore_, nullptr);
|
||||
th_ = new QThread();
|
||||
worker->moveToThread(th_);
|
||||
clientCore_->moveToThread(th_);
|
||||
|
||||
connect(th_, &QThread::started,
|
||||
[this, worker, ip, port]() { worker->doConnect(ip, port.toInt(), this->parent()->thread()); });
|
||||
connect(worker, &ConnectWorker::connecting, this, [this]() { setState(ConnectState::CS_CONNECTING); });
|
||||
connect(worker, &ConnectWorker::connectResult, this, [this](bool success) {
|
||||
emit sendConnect(success ? ConnectState::CS_CONNECTED : ConnectState::CS_DISCONNECT);
|
||||
th_->quit();
|
||||
});
|
||||
connect(th_, &QThread::finished, worker, &QObject::deleteLater);
|
||||
connect(th_, &QThread::finished, th_, &QObject::deleteLater);
|
||||
th_->start();
|
||||
}
|
||||
|
||||
void Connecter::setState(ConnectState cs)
|
||||
@@ -76,7 +78,7 @@ void Connecter::setState(ConnectState cs)
|
||||
case CS_CONNECTING:
|
||||
ui->btnConnect->setEnabled(false);
|
||||
ui->btnDisconnect->setEnabled(false);
|
||||
log_->Info(tr("Connecting..."));
|
||||
qInfo() << QString(tr("Connecting..."));
|
||||
break;
|
||||
case CS_CONNECTED:
|
||||
ui->btnConnect->setEnabled(false);
|
||||
|
||||
@@ -17,7 +17,6 @@ enum ConnectState {
|
||||
CS_CONNECTED,
|
||||
};
|
||||
|
||||
class LogPrint;
|
||||
class Connecter : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -28,7 +27,6 @@ public:
|
||||
|
||||
public:
|
||||
void SetClientCore(ClientCore* clientCore);
|
||||
void SetLogPrint(LogPrint* log);
|
||||
void SetRemoteCall(const std::function<void(const QString& id)>& call);
|
||||
void HandleClients(const InfoClientVec& clients);
|
||||
|
||||
@@ -44,10 +42,7 @@ private:
|
||||
std::string getCurClient();
|
||||
|
||||
private:
|
||||
std::thread thConnect_;
|
||||
Ui::Connecter* ui;
|
||||
LogPrint* log_;
|
||||
bool thRun_{false};
|
||||
bool connceted_{false};
|
||||
std::thread thContext_;
|
||||
std::function<void(const QString& id)> remoteCall_;
|
||||
@@ -55,7 +50,35 @@ private:
|
||||
|
||||
private:
|
||||
QMenu* menu_;
|
||||
QThread* th_;
|
||||
QThread* mainTh_;
|
||||
QStandardItemModel* model_;
|
||||
};
|
||||
|
||||
class ConnectWorker : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ConnectWorker(ClientCore* clientCore, QObject* parent = nullptr)
|
||||
: QObject(parent), clientCore_(clientCore)
|
||||
{
|
||||
}
|
||||
|
||||
public slots:
|
||||
void doConnect(const QString& ip, int port, QThread* parentThread)
|
||||
{
|
||||
emit connecting();
|
||||
bool connected = clientCore_->Connect(ip, port);
|
||||
clientCore_->moveToThread(parentThread);
|
||||
emit connectResult(connected);
|
||||
}
|
||||
|
||||
signals:
|
||||
void connectResult(bool success);
|
||||
void connecting();
|
||||
|
||||
private:
|
||||
ClientCore* clientCore_;
|
||||
};
|
||||
|
||||
#endif // CONNECTCONTROL_H
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <QTableWidgetItem>
|
||||
#include <RemoteFile.h>
|
||||
|
||||
#include "LogControl.h"
|
||||
#include "ui_FileControl.h"
|
||||
|
||||
FileManager::FileManager(QWidget* parent) : QWidget(parent), ui(new Ui::FileManager)
|
||||
@@ -38,11 +37,6 @@ void FileManager::SetModeStr(const QString& modeStr, int type, ClientCore* clien
|
||||
}
|
||||
}
|
||||
|
||||
void FileManager::SetLogPrint(LogPrint* log)
|
||||
{
|
||||
log_ = log;
|
||||
}
|
||||
|
||||
void FileManager::InitControl()
|
||||
{
|
||||
QStringList headers;
|
||||
|
||||
@@ -10,7 +10,6 @@ namespace Ui {
|
||||
class FileManager;
|
||||
}
|
||||
|
||||
class LogPrint;
|
||||
class FileManager : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -21,7 +20,6 @@ public:
|
||||
|
||||
public:
|
||||
void SetModeStr(const QString& modeStr, int type = 0, ClientCore* clientCore = nullptr);
|
||||
void SetLogPrint(LogPrint* log);
|
||||
|
||||
private:
|
||||
void InitControl();
|
||||
@@ -36,7 +34,6 @@ private:
|
||||
|
||||
private:
|
||||
Ui::FileManager* ui;
|
||||
LogPrint* log_;
|
||||
QString curRoot_;
|
||||
std::shared_ptr<DirFileHelper> fileHelper_;
|
||||
};
|
||||
|
||||
@@ -43,7 +43,7 @@ void LogPrint::Info(const QString& message)
|
||||
}
|
||||
void LogPrint::Warn(const QString& message)
|
||||
{
|
||||
Print(message, Qt::yellow);
|
||||
Print(message, Qt::gray);
|
||||
}
|
||||
void LogPrint::Error(const QString& message)
|
||||
{
|
||||
|
||||
@@ -13,4 +13,4 @@ public:
|
||||
static QString GetAppPath();
|
||||
};
|
||||
|
||||
#endif // PUBLIC_H
|
||||
#endif // PUBLIC_H
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
#include "./ui_frelayGUI.h"
|
||||
|
||||
static LogPrint* logPrint = nullptr;
|
||||
|
||||
frelayGUI::frelayGUI(QWidget* parent) : QMainWindow(parent), ui(new Ui::frelayGUI)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
@@ -20,21 +22,17 @@ frelayGUI::~frelayGUI()
|
||||
|
||||
void frelayGUI::InitControl()
|
||||
{
|
||||
log_ = new LogPrint(this);
|
||||
|
||||
clientCore_ = new ClientCore(this);
|
||||
logPrint = new LogPrint(this);
|
||||
clientCore_ = new ClientCore();
|
||||
|
||||
connecter_ = new Connecter(this);
|
||||
connecter_->SetClientCore(clientCore_);
|
||||
connecter_->SetLogPrint(log_);
|
||||
connecter_->SetRemoteCall([this](const QString& id) { clientCore_->SetRemoteID(id); });
|
||||
|
||||
localFile_ = new FileManager(this);
|
||||
remoteFile_ = new FileManager(this);
|
||||
localFile_->SetModeStr(tr("Local:"));
|
||||
remoteFile_->SetModeStr(tr("Remote:"), 1, clientCore_);
|
||||
localFile_->SetLogPrint(log_);
|
||||
remoteFile_->SetLogPrint(log_);
|
||||
|
||||
tabWidget_ = new QTabWidget(this);
|
||||
}
|
||||
@@ -57,7 +55,7 @@ void frelayGUI::ControlLayout()
|
||||
|
||||
sTop->addWidget(tabWidget_);
|
||||
sTop->addWidget(connecter_);
|
||||
tabWidget_->addTab(log_, tr("Log"));
|
||||
tabWidget_->addTab(logPrint, tr("Log"));
|
||||
|
||||
sFile->addWidget(localFile_);
|
||||
sFile->addWidget(remoteFile_);
|
||||
@@ -67,6 +65,30 @@ void frelayGUI::ControlLayout()
|
||||
setCentralWidget(splitter);
|
||||
}
|
||||
|
||||
void frelayGUI::ControlMsgHander(QtMsgType type, const QMessageLogContext& context, const QString& msg)
|
||||
{
|
||||
Q_UNUSED(context);
|
||||
|
||||
switch (type) {
|
||||
case QtDebugMsg:
|
||||
logPrint->Debug(msg);
|
||||
break;
|
||||
case QtInfoMsg:
|
||||
logPrint->Info(msg);
|
||||
break;
|
||||
case QtWarningMsg:
|
||||
logPrint->Warn(msg);
|
||||
break;
|
||||
case QtCriticalMsg:
|
||||
case QtFatalMsg:
|
||||
logPrint->Error(msg);
|
||||
break;
|
||||
default:
|
||||
logPrint->Error("Unknown QtMsgType type.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void frelayGUI::closeEvent(QCloseEvent* event)
|
||||
{
|
||||
QMainWindow::closeEvent(event);
|
||||
|
||||
@@ -30,12 +30,14 @@ private:
|
||||
void ControlSignal();
|
||||
void ControlLayout();
|
||||
|
||||
public:
|
||||
static void ControlMsgHander(QtMsgType type, const QMessageLogContext& context, const QString& msg);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent* event) override;
|
||||
|
||||
private:
|
||||
Ui::frelayGUI* ui;
|
||||
LogPrint* log_;
|
||||
QTabWidget* tabWidget_;
|
||||
Connecter* connecter_;
|
||||
FileManager* localFile_;
|
||||
|
||||
@@ -7,6 +7,8 @@ int main(int argc, char* argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
|
||||
qInstallMessageHandler(frelayGUI::ControlMsgHander);
|
||||
|
||||
#ifdef _WIN32
|
||||
QFont font("Microsoft YaHei", 9);
|
||||
a.setFont(font);
|
||||
|
||||
Reference in New Issue
Block a user