From ae77ff56e0752a41529d89841798f5a58ebb78ea Mon Sep 17 00:00:00 2001 From: Stuart Longland Date: Tue, 7 Apr 2015 10:23:26 +1000 Subject: [PATCH] QAmqpClientPrivate: Store pointers to named queues and exchanges. --- src/qamqpclient.cpp | 14 ++++++++++++-- src/qamqpclient_p.h | 6 ++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/qamqpclient.cpp b/src/qamqpclient.cpp index 716e7cf..eaa166f 100644 --- a/src/qamqpclient.cpp +++ b/src/qamqpclient.cpp @@ -660,14 +660,19 @@ QAmqpExchange *QAmqpClient::createExchange(int channelNumber) QAmqpExchange *QAmqpClient::createExchange(const QString &name, int channelNumber) { Q_D(QAmqpClient); + if (!name.isEmpty() && d->exchanges.contains(name)) + return d->exchanges[name]; + QAmqpExchange *exchange = new QAmqpExchange(channelNumber, this); d->methodHandlersByChannel[exchange->channelNumber()].append(exchange->d_func()); connect(this, SIGNAL(connected()), exchange, SLOT(_q_open())); connect(this, SIGNAL(disconnected()), exchange, SLOT(_q_disconnected())); exchange->d_func()->open(); - if (!name.isEmpty()) + if (!name.isEmpty()) { exchange->setName(name); + d->exchanges[name] = exchange; + } return exchange; } @@ -679,6 +684,9 @@ QAmqpQueue *QAmqpClient::createQueue(int channelNumber) QAmqpQueue *QAmqpClient::createQueue(const QString &name, int channelNumber) { Q_D(QAmqpClient); + if (!name.isEmpty() && d->queues.contains(name)) + return d->queues[name]; + QAmqpQueue *queue = new QAmqpQueue(channelNumber, this); d->methodHandlersByChannel[queue->channelNumber()].append(queue->d_func()); d->contentHandlerByChannel[queue->channelNumber()].append(queue->d_func()); @@ -687,8 +695,10 @@ QAmqpQueue *QAmqpClient::createQueue(const QString &name, int channelNumber) connect(this, SIGNAL(disconnected()), queue, SLOT(_q_disconnected())); queue->d_func()->open(); - if (!name.isEmpty()) + if (!name.isEmpty()) { queue->setName(name); + d->queues[name] = queue; + } return queue; } diff --git a/src/qamqpclient_p.h b/src/qamqpclient_p.h index 9856019..ea84146 100644 --- a/src/qamqpclient_p.h +++ b/src/qamqpclient_p.h @@ -100,6 +100,12 @@ public: QAMQP::Error error; QString errorString; + /*! Exchange objects */ + QHash exchanges; + + /*! Named queue objects */ + QHash queues; + QAmqpClient * const q_ptr; Q_DECLARE_PUBLIC(QAmqpClient)