QDBusConnectionManager: Use invokeMethod() to create servers
Use QMetaObject::invokeMethod() with a lambda instead of setting up a permanent signal/slot connections with BlockingQueuedConnection type. This makes the code flow easier to follow. Change-Id: Ib6566e7a4694ecbd69900b645d020b3331fb3462 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
338de68395
commit
7c9e61a3fe
@ -74,8 +74,6 @@ QDBusConnectionManager::QDBusConnectionManager()
|
|||||||
|
|
||||||
connect(this, &QDBusConnectionManager::connectionRequested,
|
connect(this, &QDBusConnectionManager::connectionRequested,
|
||||||
this, &QDBusConnectionManager::executeConnectionRequest, Qt::BlockingQueuedConnection);
|
this, &QDBusConnectionManager::executeConnectionRequest, Qt::BlockingQueuedConnection);
|
||||||
connect(this, &QDBusConnectionManager::serverRequested,
|
|
||||||
this, &QDBusConnectionManager::createServer, Qt::BlockingQueuedConnection);
|
|
||||||
moveToThread(this); // ugly, don't do this in other projects
|
moveToThread(this); // ugly, don't do this in other projects
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
@ -223,12 +221,17 @@ void QDBusConnectionManager::executeConnectionRequest(QDBusConnectionManager::Co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDBusConnectionManager::createServer(const QString &address, void *server)
|
void QDBusConnectionManager::createServer(const QString &address, QDBusServer *server)
|
||||||
{
|
{
|
||||||
QDBusErrorInternal error;
|
QMetaObject::invokeMethod(
|
||||||
QDBusConnectionPrivate *d = new QDBusConnectionPrivate;
|
this,
|
||||||
d->setServer(static_cast<QDBusServer *>(server),
|
[&address, server] {
|
||||||
q_dbus_server_listen(address.toUtf8().constData(), error), error);
|
QDBusErrorInternal error;
|
||||||
|
QDBusConnectionPrivate *d = new QDBusConnectionPrivate;
|
||||||
|
d->setServer(server, q_dbus_server_listen(address.toUtf8().constData(), error),
|
||||||
|
error);
|
||||||
|
},
|
||||||
|
Qt::BlockingQueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QDBusServer;
|
||||||
|
|
||||||
class QDBusConnectionManager : public QDaemonThread
|
class QDBusConnectionManager : public QDaemonThread
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -42,18 +44,18 @@ public:
|
|||||||
QDBusConnectionPrivate *connectToBus(const QString &address, const QString &name);
|
QDBusConnectionPrivate *connectToBus(const QString &address, const QString &name);
|
||||||
QDBusConnectionPrivate *connectToPeer(const QString &address, const QString &name);
|
QDBusConnectionPrivate *connectToPeer(const QString &address, const QString &name);
|
||||||
|
|
||||||
|
void createServer(const QString &address, QDBusServer *server);
|
||||||
|
|
||||||
mutable QMutex mutex;
|
mutable QMutex mutex;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void connectionRequested(ConnectionRequestData *);
|
void connectionRequested(ConnectionRequestData *);
|
||||||
void serverRequested(const QString &address, void *server);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run() override;
|
void run() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void executeConnectionRequest(ConnectionRequestData *data);
|
void executeConnectionRequest(ConnectionRequestData *data);
|
||||||
void createServer(const QString &address, void *server);
|
|
||||||
|
|
||||||
QHash<QString, QDBusConnectionPrivate *> connectionHash;
|
QHash<QString, QDBusConnectionPrivate *> connectionHash;
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent)
|
|||||||
if (!instance)
|
if (!instance)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
emit instance->serverRequested(address, this);
|
instance->createServer(address, this);
|
||||||
Q_ASSERT(d != nullptr);
|
Q_ASSERT(d != nullptr);
|
||||||
|
|
||||||
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
|
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
|
||||||
@ -67,7 +67,7 @@ QDBusServer::QDBusServer(QObject *parent)
|
|||||||
if (!instance)
|
if (!instance)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
emit instance->serverRequested(address, this);
|
instance->createServer(address, this);
|
||||||
Q_ASSERT(d != nullptr);
|
Q_ASSERT(d != nullptr);
|
||||||
|
|
||||||
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
|
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
|
||||||
|
Loading…
Reference in New Issue
Block a user