Skip to content

Commit f2dff24

Browse files
committed
server从UI线程分出
1 parent 4e9a6ad commit f2dff24

26 files changed

+212
-86
lines changed

MulClient/MulClient.pro.user

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 4.11.0, 2020-03-18T22:08:37. -->
3+
<!-- Written by QtCreator 4.11.0, 2020-03-19T23:29:21. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>

MulClient/mainwindow.cpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,11 @@ MainWindow::MainWindow(QWidget *parent)
4848
{
4949
setupUI();
5050
buildConnect();
51+
qDebug() << "MainWindows: " << QThread::currentThreadId();
5152
}
5253

5354
MainWindow::~MainWindow()
5455
{
55-
if(!d->clientList.isEmpty()){
56-
qDeleteAll(d->clientList);
57-
d->clientList.clear();
58-
}
5956
delete d;
6057
}
6158

@@ -88,12 +85,15 @@ void MainWindow::onConnect()
8885
d->clientList.clear();
8986
for(int i=0; i<num; i++){
9087
Thread *thread = new Thread(ip, port, this);
91-
connect(thread, &Thread::message, d->messageEdit, &QTextEdit::append, Qt::UniqueConnection);
92-
connect(thread, &Thread::destroyed, this, &MainWindow::onClearList);
9388
d->clientList.append(thread);
9489
thread->start();
90+
QString str = QString::number(i+1) + tr(" Clients (threads) start running");
91+
d->messageEdit->append(str);
9592
}
93+
//connect(d->clientList[0], &Thread::destroyed, this, &MainWindow::onStop);
94+
connect(d->clientList[0], &Thread::destroyed, qApp, &QApplication::quit);
9695
d->sendTime->start();
96+
changeControlState(false);
9797
d->connectBtn->setText(tr("Connected"));
9898
d->connectBtn->setChecked(true);
9999
}else{
@@ -105,6 +105,7 @@ void MainWindow::onConnect()
105105
}
106106
}
107107
d->clientList.clear();
108+
changeControlState(true);
108109
d->connectBtn->setText(tr("Connect"));
109110
d->connectBtn->setChecked(false);
110111
}
@@ -121,13 +122,14 @@ void MainWindow::onWrite()
121122
}
122123
}
123124

124-
void MainWindow::onClearList()
125-
{
126-
d->sendTime->stop();
127-
d->clientList.clear();
128-
d->connectBtn->setText(tr("Connect"));
129-
d->connectBtn->setChecked(false);
130-
}
125+
//void MainWindow::onStop()
126+
//{
127+
// d->sendTime->stop();
128+
// d->clientList.clear();
129+
// changeControlState(true);
130+
// d->connectBtn->setText(tr("Connect"));
131+
// d->connectBtn->setChecked(false);
132+
//}
131133

132134
void MainWindow::warningBox(const QString &str, QWidget *w)
133135
{
@@ -167,3 +169,11 @@ void MainWindow::setupUI()
167169
setCentralWidget(frame);
168170
}
169171

172+
void MainWindow::changeControlState(bool state)
173+
{
174+
d->ipEdit->setEnabled(state);
175+
d->portSpinBox->setEnabled(state);
176+
d->numSpinBox->setEnabled(state);
177+
d->timeSpinBox->setEnabled(state);
178+
}
179+

MulClient/mainwindow.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ class MainWindow : public QMainWindow
1414
private slots:
1515
void onConnect();
1616
void onWrite();
17-
void onClearList();
17+
//void onStop();
1818

1919
private:
2020
void warningBox(const QString&, QWidget*);
2121
void buildConnect();
2222
void setupUI();
23+
void changeControlState(bool);
2324

2425
MainWindowPrivate *d;
2526
};

MulClient/tcpclient.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,5 @@ void TcpClient::onReadyRead()
3030
{
3131
QByteArray buf = readAll();
3232
QString str = getInfo() + buf;
33-
emit message(str);
3433
//qDebug() << "onReadyRead: " << str;
3534
}

MulClient/tcpclient.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ class TcpClient : public QTcpSocket
1212

1313
QString getInfo() const;
1414

15-
signals:
16-
void message(QString);
17-
1815
public slots:
1916
void onWrite(const QByteArray&);
2017
void onReadyRead();

MulClient/thread.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@ void Thread::run()
2626
<< client->errorString();
2727
return;
2828
}
29-
qDebug() << tr("Server: ") << client->getInfo();
29+
// while(!client->waitForConnected(3000)){
30+
// client->connectToHost(ip, quint16(port));
31+
// qWarning() << tr("connection failed fd: ")
32+
// << client->errorString();
33+
// }
34+
qDebug() << "New Client: " << QThread::currentThreadId();
3035
connect(this, &Thread::writeToServer, client.data(), &TcpClient::onWrite);
3136
connect(client.data(), &TcpClient::readyRead,
3237
client.data(), &TcpClient::onReadyRead, Qt::DirectConnection);
3338
connect(client.data(), &TcpClient::disconnected, this, &QThread::deleteLater);
34-
connect(client.data(), &TcpClient::message, this, &Thread::message);
3539
exec();
3640
}

MulClient/thread.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class Thread : public QThread
1111
~Thread() override;
1212

1313
signals:
14-
void message(QString);
1514
void writeToServer(const QByteArray&);
1615

1716
protected:

MulServer/MulServer.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ DEFINES += QT_DEPRECATED_WARNINGS
1616
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
1717

1818
SOURCES += \
19+
accepter.cpp \
1920
main.cpp \
2021
mainwindow.cpp \
2122
tcpserver.cpp \
2223
tcpsocket.cpp \
2324
thread.cpp
2425

2526
HEADERS += \
27+
accepter.h \
2628
mainwindow.h \
2729
tcpserver.h \
2830
tcpsocket.h \

MulServer/MulServer.pro.user

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 4.11.0, 2020-03-18T22:08:37. -->
3+
<!-- Written by QtCreator 4.11.0, 2020-03-19T23:29:21. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>

MulServer/accepter.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include "accepter.h"
2+
#include "tcpserver.h"
3+
4+
Accepter::Accepter(quint16 port_, QObject *parent)
5+
:QThread(parent)
6+
,port(port_)
7+
{
8+
9+
}
10+
11+
Accepter::~Accepter()
12+
{
13+
if(isRunning()){
14+
quit();
15+
wait();
16+
}
17+
qDebug() << "~Accepter";
18+
}
19+
20+
void Accepter::run()
21+
{
22+
QScopedPointer<TcpServer> tcpServer(new TcpServer);
23+
connect(tcpServer.data(), &TcpServer::destroyed, this, &Accepter::deleteLater);
24+
connect(tcpServer.data(), &TcpServer::message, this, &Accepter::message);
25+
connect(tcpServer.data(), &TcpServer::maxCount, this, &Accepter::maxCount);
26+
connect(tcpServer.data(), &TcpServer::clientCount, this, &Accepter::clientCount);
27+
if(!tcpServer->listen(QHostAddress::Any, port)){
28+
qDebug() << "TcpServer online failure: " << tcpServer->errorString() << QThread::currentThreadId();
29+
return;
30+
}
31+
qDebug() << "TcpServer online: " << QThread::currentThreadId();
32+
exec();
33+
}

MulServer/accepter.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef ACCEPTER_H
2+
#define ACCEPTER_H
3+
4+
#include <QThread>
5+
6+
class Accepter : public QThread
7+
{
8+
Q_OBJECT
9+
public:
10+
Accepter(quint16, QObject *parent = nullptr);
11+
~Accepter() override;
12+
13+
signals:
14+
void message(const QString&);
15+
void maxCount(QAtomicInt);
16+
void clientCount(QAtomicInt);
17+
18+
protected:
19+
void run() override;
20+
21+
private:
22+
quint16 port;
23+
};
24+
25+
#endif // ACCEPTER_H

MulServer/mainwindow.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#include "mainwindow.h"
2-
#include "tcpserver.h"
2+
#include "accepter.h"
33

4-
#include <QHostAddress>
54
#include <QNetworkInterface>
65
#include <QtWidgets>
76

@@ -25,7 +24,7 @@ class MainWindowPrivate
2524
QTextEdit *messageEdit;
2625
QLabel *currentConnections;
2726
QLabel *historyMaxConnections;
28-
TcpServer *tcpServer;
27+
Accepter *accepter;
2928
};
3029

3130
MainWindow::MainWindow(QWidget *parent)
@@ -35,6 +34,7 @@ MainWindow::MainWindow(QWidget *parent)
3534
setupUI();
3635
initParam();
3736
buildConnect();
37+
qDebug() << "MainWindows: " << QThread::currentThreadId();
3838
}
3939

4040
MainWindow::~MainWindow()
@@ -51,22 +51,22 @@ void MainWindow::onListen()
5151
QMessageBox::warning(this, tr("Warning!"),
5252
tr("Port is empty!"), QMessageBox::Ok);
5353
return;
54-
}
55-
d->tcpServer = new TcpServer(this);
56-
connect(d->tcpServer, &TcpServer::message, d->messageEdit, &QTextEdit::append, Qt::UniqueConnection);
57-
connect(d->tcpServer, &TcpServer::maxCount, this, &MainWindow::onMaxCount, Qt::UniqueConnection);
58-
connect(d->tcpServer, &TcpServer::clientCount, this, &MainWindow::onCount, Qt::UniqueConnection);
59-
bool ok = d->tcpServer->listen(QHostAddress::Any, quint16(port.toUInt()));
54+
}
55+
d->accepter = new Accepter(quint16(port.toUInt()), this);
56+
connect(d->accepter, &Accepter::message, d->messageEdit, &QTextEdit::append, Qt::UniqueConnection);
57+
connect(d->accepter, &Accepter::maxCount, this, &MainWindow::onMaxCount, Qt::UniqueConnection);
58+
connect(d->accepter, &Accepter::clientCount, this, &MainWindow::onCount, Qt::UniqueConnection);
59+
d->accepter->start();
60+
bool ok = d->accepter->isRunning();
6061
d->ipBox->setEnabled(!ok);
6162
d->portEdit->setEnabled(!ok);
6263
d->listenBtn->setChecked(ok);
6364
QString text = ok? tr("Disconnect") : tr("Listen");
6465
d->listenBtn->setText(text);
6566
}
66-
else if(d->tcpServer->isListening()){
67-
d->tcpServer->close();
68-
delete d->tcpServer;
69-
d->tcpServer= nullptr;
67+
else if(d->accepter->isRunning()){
68+
delete d->accepter;
69+
d->accepter = nullptr;
7070
d->ipBox->setEnabled(true);
7171
d->portEdit->setEnabled(true);
7272
d->listenBtn->setChecked(false);

MulServer/tcpsocket.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ TcpSocket::TcpSocket(QObject *parent)
99

1010
TcpSocket::~TcpSocket()
1111
{
12-
qDebug() << tr("Client Offline: ") << getInfo();
1312
qDebug() << "~TcpSocket";
1413
}
1514

@@ -26,7 +25,6 @@ void TcpSocket::onReadyRead()
2625
QByteArray buf = readAll();
2726
write(buf);
2827
waitForBytesWritten(3000);
29-
QString str = getInfo() + buf;
30-
emit message(str);
28+
//QString str = getInfo() + buf;
3129
//qDebug() << "onReadyRead: " << str;
3230
}

MulServer/tcpsocket.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ class TcpSocket : public QTcpSocket
1212

1313
QString getInfo() const;
1414

15-
signals:
16-
void message(const QString&);
17-
1815
public slots:
1916
void onReadyRead();
2017
};

MulServer/thread.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Thread::~Thread()
1919
wait();
2020
}
2121
count.fetchAndSubOrdered(1);
22-
QString str = tr("Client Offline Current quantity: ") +
22+
QString str = tr("The client is offline. The current number is: ") +
2323
QString::number(count);
2424
emit message(str);
2525
emit clientCount(count);
@@ -35,13 +35,13 @@ void Thread::run()
3535
<< tcpSocket->errorString();
3636
return;
3737
}
38+
qDebug() << "New Client: " << QThread::currentThreadId();
3839
count.fetchAndAddOrdered(1);
39-
qDebug() << "onNewConnect: " << count;
4040
connect(tcpSocket.data(), &TcpSocket::readyRead,
4141
tcpSocket.data(), &TcpSocket::onReadyRead, Qt::DirectConnection);
42-
connect(tcpSocket.data(), &TcpSocket::message, this, &Thread::message);
4342
connect(tcpSocket.data(), &TcpSocket::disconnected, this, &Thread::deleteLater);
44-
QString str = tr("Client online: ") + tcpSocket->getInfo();
43+
QString str = QString::number(count) + tr(" Client online: ") +
44+
tcpSocket->getInfo();
4545
emit message(str);
4646
emit maxCount(count);
4747
emit clientCount(count);

ReactorServer/ReactorServer.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
1616
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
1717

1818
SOURCES += \
19+
accepter.cpp \
1920
main.cpp \
2021
mainwindow.cpp \
2122
subreactor.cpp \
@@ -24,6 +25,7 @@ SOURCES += \
2425
thread.cpp
2526

2627
HEADERS += \
28+
accepter.h \
2729
mainwindow.h \
2830
subreactor.h \
2931
tcpserver.h \

ReactorServer/ReactorServer.pro.user

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 4.11.0, 2020-03-18T22:08:37. -->
3+
<!-- Written by QtCreator 4.11.0, 2020-03-19T23:29:21. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>

ReactorServer/accepter.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "accepter.h"
2+
#include "tcpserver.h"
3+
4+
Accepter::Accepter(quint16 port_, int num_, QObject *parent)
5+
:QThread(parent)
6+
,port(port_)
7+
,num(num_)
8+
{
9+
10+
}
11+
12+
Accepter::~Accepter()
13+
{
14+
if(isRunning()){
15+
quit();
16+
wait();
17+
}
18+
qDebug() << "~Accepter";
19+
}
20+
21+
void Accepter::run()
22+
{
23+
QScopedPointer<TcpServer> tcpServer(new TcpServer(num));
24+
connect(tcpServer.data(), &TcpServer::destroyed, this, &Accepter::deleteLater);
25+
connect(tcpServer.data(), &TcpServer::message, this, &Accepter::message);
26+
connect(tcpServer.data(), &TcpServer::maxCount, this, &Accepter::maxCount);
27+
connect(tcpServer.data(), &TcpServer::clientCount, this, &Accepter::clientCount);
28+
if(!tcpServer->listen(QHostAddress::Any, port)){
29+
qDebug() << "TcpServer online failure: " << tcpServer->errorString() << QThread::currentThreadId();
30+
return;
31+
}
32+
qDebug() << "TcpServer online: " << QThread::currentThreadId();
33+
exec();
34+
}

0 commit comments

Comments
 (0)