diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-06-16 13:40:08 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-08-04 13:34:48 +0000 |
commit | a010f3a8f92a9a364e9d17d12b06074fde6f8a17 (patch) | |
tree | 33a3a91f63d8daa4a5a939a4af4e29812c803bc0 /src/plugins/qmltooling/qmldbg_local | |
parent | 31291359a327c5ffa6aa3aff76b62491782408d7 (diff) |
Deduplicate debug server connection code.
The packet protocol can be part of the server, now that the server is
not part of QtQml anymore. This enables us to remove some duplicated
code from the connections.
As an added benefit, with more control over the sending process,
QQmlDebugServer can now efficiently send single packets, without
creating a QList<QByteArray> first.
Change-Id: I13cc831e254c02b737e64816d6d3ab051d760995
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/plugins/qmltooling/qmldbg_local')
3 files changed, 12 insertions, 58 deletions
diff --git a/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.cpp b/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.cpp index 266f450720..cf4512cc6e 100644 --- a/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.cpp +++ b/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.cpp @@ -47,14 +47,12 @@ public: bool block; QString filename; QLocalSocket *socket; - QPacketProtocol *protocol; QQmlDebugServer *debugServer; }; QLocalClientConnectionPrivate::QLocalClientConnectionPrivate() : block(false), socket(0), - protocol(0), debugServer(0) { } @@ -83,21 +81,6 @@ bool QLocalClientConnection::isConnected() const return d->socket && d->socket->state() == QLocalSocket::ConnectedState; } -void QLocalClientConnection::send(const QList<QByteArray> &messages) -{ - Q_D(QLocalClientConnection); - - if (!isConnected() || !d->protocol || !d->socket) - return; - - foreach (const QByteArray &message, messages) { - QPacket pack; - pack.writeRawData(message.data(), message.length()); - d->protocol->send(pack); - } - d->socket->flush(); -} - void QLocalClientConnection::disconnect() { Q_D(QLocalClientConnection); @@ -105,19 +88,10 @@ void QLocalClientConnection::disconnect() while (d->socket && d->socket->bytesToWrite() > 0) d->socket->waitForBytesWritten(); - // protocol might still be processing packages at this point - d->protocol->deleteLater(); - d->protocol = 0; d->socket->deleteLater(); d->socket = 0; } -bool QLocalClientConnection::waitForMessage() -{ - Q_D(QLocalClientConnection); - return d->protocol->waitForReadyRead(-1); -} - bool QLocalClientConnection::setPortRange(int portFrom, int portTo, bool block, const QString &hostaddress) { @@ -133,7 +107,7 @@ bool QLocalClientConnection::setFileName(const QString &filename, bool block) Q_D(QLocalClientConnection); d->filename = filename; d->block = block; - return connect(); + return connectToServer(); } void QLocalClientConnection::waitForConnection() @@ -142,7 +116,7 @@ void QLocalClientConnection::waitForConnection() d->socket->waitForConnected(-1); } -bool QLocalClientConnection::connect() +bool QLocalClientConnection::connectToServer() { Q_D(QLocalClientConnection); @@ -155,33 +129,17 @@ bool QLocalClientConnection::connect() return true; } -void QLocalClientConnection::readyRead() +void QLocalClientConnection::flush() { Q_D(QLocalClientConnection); - if (!d->protocol) - return; - - QPacket packet = d->protocol->read(); - - QByteArray content = packet.data(); - d->debugServer->receiveMessage(content); + if (d->socket) + d->socket->flush(); } void QLocalClientConnection::connectionEstablished() { Q_D(QLocalClientConnection); - - d->protocol = new QPacketProtocol(d->socket, this); - QObject::connect(d->protocol, SIGNAL(readyRead()), this, SLOT(readyRead())); - QObject::connect(d->protocol, SIGNAL(invalidPacket()), this, SLOT(invalidPacket())); - - if (d->block) - d->protocol->waitForReadyRead(-1); -} - -void QLocalClientConnection::invalidPacket() -{ - qWarning("QML Debugger: Received a corrupted packet! Giving up ..."); + d->debugServer->setDevice(d->socket); } QT_END_NAMESPACE diff --git a/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.h b/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.h index afc86a22ef..4d20b8db2f 100644 --- a/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.h +++ b/src/plugins/qmltooling/qmldbg_local/qlocalclientconnection.h @@ -56,19 +56,17 @@ public: bool setFileName(const QString &filename, bool block); bool isConnected() const; - void send(const QList<QByteArray> &messages); void disconnect(); - bool waitForMessage(); void waitForConnection(); - bool connect(); + void flush(); private Q_SLOTS: - void readyRead(); void connectionEstablished(); - void invalidPacket(); private: + bool connectToServer(); + QLocalClientConnectionPrivate *d_ptr; }; diff --git a/src/plugins/qmltooling/qmldbg_local/qmldbg_local.pro b/src/plugins/qmltooling/qmldbg_local/qmldbg_local.pro index d8eb5ed5b6..4fa05234e6 100644 --- a/src/plugins/qmltooling/qmldbg_local/qmldbg_local.pro +++ b/src/plugins/qmltooling/qmldbg_local/qmldbg_local.pro @@ -1,19 +1,17 @@ TARGET = qmldbg_local -QT = qml-private core-private +QT = qml-private PLUGIN_TYPE = qmltooling PLUGIN_CLASS_NAME = QLocalClientConnection load(qt_plugin) SOURCES += \ - $$PWD/qlocalclientconnection.cpp \ - $$PWD/../shared/qpacketprotocol.cpp + $$PWD/qlocalclientconnection.cpp HEADERS += \ $$PWD/qlocalclientconnection.h \ $$PWD/../shared/qqmldebugserver.h \ - $$PWD/../shared/qqmldebugserverconnection.h \ - $$PWD/../shared/qpacketprotocol.h + $$PWD/../shared/qqmldebugserverconnection.h INCLUDEPATH += $$PWD \ $$PWD/../shared |