diff --git a/ClientCore/ClientCore.cpp b/ClientCore/ClientCore.cpp index d2152ac..fdf2537 100644 --- a/ClientCore/ClientCore.cpp +++ b/ClientCore/ClientCore.cpp @@ -48,6 +48,13 @@ bool ClientCore::Connect(const QString& ip, quint16 port) void ClientCore::Disconnect() { + QMutexLocker locker(&conMutex_); + if (socket_ && socket_->state() != QAbstractSocket::UnconnectedState) { + socket_->disconnectFromHost(); + if (socket_->state() != QAbstractSocket::UnconnectedState) { + socket_->waitForDisconnected(1000); + } + } connected_ = false; } @@ -219,9 +226,9 @@ QString ClientCore::GetOwnID() SocketWorker::SocketWorker(ClientCore* core, QObject* parent) : QThread(parent), core_(core) { - connect(core_, &ClientCore::sigDisconnect, this, [this]() { - thread()->quit(); - }); + //connect(core_, &ClientCore::sigDisconnect, this, [this]() { + // thread()->quit(); + //}); } SocketWorker::~SocketWorker() diff --git a/Gui/Control/ConnectControl.cpp b/Gui/Control/ConnectControl.cpp index 1f6697f..5559f24 100644 --- a/Gui/Control/ConnectControl.cpp +++ b/Gui/Control/ConnectControl.cpp @@ -47,6 +47,7 @@ void Connecter::RunWorker(ClientCore* clientCore) }); connect(this, &Connecter::sigDoConnect, clientCore_, &ClientCore::DoConnect); + connect(this, &Connecter::sigDisConnect, clientCore_, &ClientCore::Disconnect); connect(sockWorker_, &QThread::finished, sockWorker_, &QObject::deleteLater); sockWorker_->start(); @@ -99,8 +100,8 @@ void Connecter::setState(ConnectState cs) void Connecter::Disconnect() { - sockWorker_->quit(); - qWarning() << QString(tr("Disconnected...")); + qWarning() << QString(tr("Disconnected requeset...")); + emit sigDisConnect(); } void Connecter::RefreshClient() diff --git a/Gui/Control/ConnectControl.h b/Gui/Control/ConnectControl.h index 9fac0dd..a02cc63 100644 --- a/Gui/Control/ConnectControl.h +++ b/Gui/Control/ConnectControl.h @@ -33,6 +33,7 @@ public: signals: void sendConnect(ConnectState cs); void sigDoConnect(const QString& ip, quint16 port); + void sigDisConnect(); private: void InitControl();