diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2018-08-14 11:11:02 +0200 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2018-08-16 06:46:43 +0000 |
commit | 0b5da60094a1c38c5bbbef6564656e870eebb14a (patch) | |
tree | 6f3b5b2627bd7e8b0d3d5eea7d8e11e9a796baf2 /src | |
parent | a0ade068004ad869d6235ae8d6cd5e2050bf765d (diff) |
QBluetoothSocket: Move (dis-)connected logic into setSocketState
Instead of duplicating that logic everywhere, it can be handled
in one place.
Additionally setOpenMode should be called before setSocketState
so that every member variable is changed, before signals are
emitted.
Change-Id: Ic1d4317ba31046d78d97874ec00c59481a67bb50
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/bluetooth/qbluetoothsocket.cpp | 12 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_android.cpp | 15 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_bluez.cpp | 1 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_bluezdbus.cpp | 5 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_winrt.cpp | 3 |
5 files changed, 16 insertions, 20 deletions
diff --git a/src/bluetooth/qbluetoothsocket.cpp b/src/bluetooth/qbluetoothsocket.cpp index 36e4a54c..62633bb1 100644 --- a/src/bluetooth/qbluetoothsocket.cpp +++ b/src/bluetooth/qbluetoothsocket.cpp @@ -518,10 +518,20 @@ QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state) { Q_D(QBluetoothSocketBase); - SocketState old = d->state; + const SocketState old = d->state; + if (state == old) + return; + d->state = state; if(old != d->state) emit stateChanged(state); + if (state == QBluetoothSocket::ConnectedState) { + emit connected(); + } else if ((old == QBluetoothSocket::ConnectedState + || old == QBluetoothSocket::ClosingState) + && state == QBluetoothSocket::UnconnectedState) { + emit disconnected(); + } if(state == ListeningState){ // TODO: look at this, is this really correct? // if we're a listening socket we can't handle connects? diff --git a/src/bluetooth/qbluetoothsocket_android.cpp b/src/bluetooth/qbluetoothsocket_android.cpp index abb0c5e9..a478819b 100644 --- a/src/bluetooth/qbluetoothsocket_android.cpp +++ b/src/bluetooth/qbluetoothsocket_android.cpp @@ -626,7 +626,6 @@ void QBluetoothSocketPrivateAndroid::socketConnectSuccess(const QAndroidJniObjec q->setOpenMode(QIODevice::ReadWrite|QIODevice::Unbuffered); q->setSocketState(QBluetoothSocket::ConnectedState); - emit q->connected(); } void QBluetoothSocketPrivateAndroid::defaultSocketConnectFailed( @@ -714,10 +713,9 @@ void QBluetoothSocketPrivateAndroid::abort() // close() without further feedback. Therefore we have to set // Unconnected (now) in advance Q_Q(QBluetoothSocket); - q->setSocketState(QBluetoothSocket::UnconnectedState); q->setOpenMode(QIODevice::NotOpen); + q->setSocketState(QBluetoothSocket::UnconnectedState); emit q->readChannelFinished(); - emit q->disconnected(); } } } @@ -841,10 +839,9 @@ void QBluetoothSocketPrivateAndroid::inputThreadError(int errorCode) } } - q->setSocketState(QBluetoothSocket::UnconnectedState); q->setOpenMode(QIODevice::NotOpen); + q->setSocketState(QBluetoothSocket::UnconnectedState); emit q->readChannelFinished(); - emit q->disconnected(); } void QBluetoothSocketPrivateAndroid::close() @@ -917,10 +914,6 @@ bool QBluetoothSocketPrivateAndroid::setSocketDescriptor(const QAndroidJniObject this, SLOT(inputThreadError(int)), Qt::QueuedConnection); inputThread->run(); - - q->setSocketState(socketState); - q->setOpenMode(openMode | QIODevice::Unbuffered); - // WorkerThread manages all sockets for us // When we come through here the socket was already connected by // server socket listener (see QBluetoothServer) @@ -929,8 +922,8 @@ bool QBluetoothSocketPrivateAndroid::setSocketDescriptor(const QAndroidJniObject workerThread->setupWorker(this, socketObject, QAndroidJniObject(), !USE_FALLBACK); workerThread->start(); - if (socketState == QBluetoothSocket::ConnectedState) - emit q->connected(); + q->setOpenMode(openMode | QIODevice::Unbuffered); + q->setSocketState(socketState); return true; } diff --git a/src/bluetooth/qbluetoothsocket_bluez.cpp b/src/bluetooth/qbluetoothsocket_bluez.cpp index 26ab40dd..f19c81b8 100644 --- a/src/bluetooth/qbluetoothsocket_bluez.cpp +++ b/src/bluetooth/qbluetoothsocket_bluez.cpp @@ -325,7 +325,6 @@ void QBluetoothSocketPrivateBluez::_q_writeNotify() } q->setSocketState(QBluetoothSocket::ConnectedState); - emit q->connected(); connectWriteNotifier->setEnabled(false); connecting = false; diff --git a/src/bluetooth/qbluetoothsocket_bluezdbus.cpp b/src/bluetooth/qbluetoothsocket_bluezdbus.cpp index c3055d63..c98d0c26 100644 --- a/src/bluetooth/qbluetoothsocket_bluezdbus.cpp +++ b/src/bluetooth/qbluetoothsocket_bluezdbus.cpp @@ -345,7 +345,6 @@ void QBluetoothSocketPrivateBluezDBus::abort() q->setOpenMode(QIODevice::NotOpen); q->setSocketState(QBluetoothSocket::UnconnectedState); emit q->readChannelFinished(); - emit q->disconnected(); } } @@ -542,7 +541,6 @@ void QBluetoothSocketPrivateBluezDBus::remoteConnected(const QDBusUnixFileDescri socket = descriptor; q->setSocketState(QBluetoothSocket::ConnectedState); - emit q->connected(); } } @@ -556,10 +554,9 @@ void QBluetoothSocketPrivateBluezDBus::socketStateChanged(QLocalSocket::LocalSoc break; case QLocalSocket::UnconnectedState: clearSocket(); - q->setSocketState(QBluetoothSocket::UnconnectedState); q->setOpenMode(QIODevice::NotOpen); + q->setSocketState(QBluetoothSocket::UnconnectedState); emit q->readChannelFinished(); - emit q->disconnected(); break; default: // ConnectingState and ConnectedState not mapped diff --git a/src/bluetooth/qbluetoothsocket_winrt.cpp b/src/bluetooth/qbluetoothsocket_winrt.cpp index f985952a..b4ffc61c 100644 --- a/src/bluetooth/qbluetoothsocket_winrt.cpp +++ b/src/bluetooth/qbluetoothsocket_winrt.cpp @@ -523,7 +523,6 @@ void QBluetoothSocketPrivateWinRT::abort() if (wasConnected) { q->setOpenMode(QIODevice::NotOpen); emit q->readChannelFinished(); - emit q->disconnected(); } } @@ -739,7 +738,6 @@ void QBluetoothSocketPrivateWinRT::handleError(QBluetoothSocket::SocketError err if (wasConnected) { q->setOpenMode(QIODevice::NotOpen); emit q->readChannelFinished(); - emit q->disconnected(); } } @@ -810,7 +808,6 @@ HRESULT QBluetoothSocketPrivateWinRT::handleConnectOpFinished(ABI::Windows::Foun q->setOpenMode(requestedOpenMode); q->setSocketState(QBluetoothSocket::ConnectedState); m_worker->startReading(); - emit q->connected(); return S_OK; } |