aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-23 17:31:35 +0100
committerUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-24 11:43:58 +0000
commit983473163f0de7aea54d6d3e86d58ba8149a69dc (patch)
treed037bea1792776c43918f74c42968556bdf5c0fa
parent79c27ec6f1c337916ee196908050896f21704905 (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.cpp19
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,