diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-11-23 17:31:35 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-11-24 11:43:58 +0000 |
commit | 983473163f0de7aea54d6d3e86d58ba8149a69dc (patch) | |
tree | d037bea1792776c43918f74c42968556bdf5c0fa | |
parent | 79c27ec6f1c337916ee196908050896f21704905 (diff) |
iostool: Allow sequential client connections
The QML debug server allows this and QtCreator uses it, so iostool
should support it, too.
Change-Id: I71d4143457d427795e5abcbef0ad5d26378d5e9d
Task-number: QTCREATORBUG-15383
Reviewed-by: Jake Petroules <jake.petroules@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
-rw-r--r-- | src/tools/iostool/main.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/tools/iostool/main.cpp b/src/tools/iostool/main.cpp index f902f761cd5..fc2bab4c84b 100644 --- a/src/tools/iostool/main.cpp +++ b/src/tools/iostool/main.cpp @@ -114,6 +114,7 @@ public: IosTool *iosTool(); public slots: void handleNewRelayConnection(); + void removeRelayConnection(Relayer *relayer); protected: virtual void newRelayConnection() = 0; @@ -231,9 +232,12 @@ void Relayer::setClientSocket(QTcpSocket *clientSocket) { QTC_CHECK(!m_clientSocket); m_clientSocket = clientSocket; - if (m_clientSocket) + if (m_clientSocket) { connect(m_clientSocket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(handleClientHasError(QAbstractSocket::SocketError))); + connect(m_clientSocket, &QAbstractSocket::disconnected, + this, [this](){server()->removeRelayConnection(this);}); + } } bool Relayer::startRelay(int serverFileDescriptor) @@ -354,7 +358,7 @@ void Relayer::handleClientHasData() void Relayer::handleClientHasError(QAbstractSocket::SocketError error) { iosTool()->errorMsg(tr("iOS Debugging connection to creator failed with error %1").arg(error)); - iosTool()->stopRelayServers(); + server()->removeRelayConnection(this); } IosTool *Relayer::iosTool() @@ -446,6 +450,12 @@ void RelayServer::handleNewRelayConnection() newRelayConnection(); } +void RelayServer::removeRelayConnection(Relayer *relayer) +{ + m_connections.removeAll(relayer); + relayer->deleteLater(); +} + SingleRelayServer::SingleRelayServer(IosTool *parent, int serverFileDescriptor) : RelayServer(parent) @@ -458,9 +468,7 @@ SingleRelayServer::SingleRelayServer(IosTool *parent, void SingleRelayServer::newRelayConnection() { if (m_connections.size() > 0) { - m_server.close(); - QTcpSocket *s = m_server.nextPendingConnection(); - delete s; + delete m_server.nextPendingConnection(); return; } QTcpSocket *clientSocket = m_server.nextPendingConnection(); @@ -469,7 +477,6 @@ void SingleRelayServer::newRelayConnection() m_connections.append(newConnection); newConnection->startRelay(m_serverFileDescriptor); } - m_server.close(); } GenericRelayServer::GenericRelayServer(IosTool *parent, int remotePort, |