QAmqpClientPrivate: Store pointers to named queues and exchanges.

This commit is contained in:
Stuart Longland 2015-04-07 10:23:26 +10:00
parent 943180da27
commit ae77ff56e0
2 changed files with 18 additions and 2 deletions

View File

@ -660,14 +660,19 @@ QAmqpExchange *QAmqpClient::createExchange(int channelNumber)
QAmqpExchange *QAmqpClient::createExchange(const QString &name, int channelNumber) QAmqpExchange *QAmqpClient::createExchange(const QString &name, int channelNumber)
{ {
Q_D(QAmqpClient); Q_D(QAmqpClient);
if (!name.isEmpty() && d->exchanges.contains(name))
return d->exchanges[name];
QAmqpExchange *exchange = new QAmqpExchange(channelNumber, this); QAmqpExchange *exchange = new QAmqpExchange(channelNumber, this);
d->methodHandlersByChannel[exchange->channelNumber()].append(exchange->d_func()); d->methodHandlersByChannel[exchange->channelNumber()].append(exchange->d_func());
connect(this, SIGNAL(connected()), exchange, SLOT(_q_open())); connect(this, SIGNAL(connected()), exchange, SLOT(_q_open()));
connect(this, SIGNAL(disconnected()), exchange, SLOT(_q_disconnected())); connect(this, SIGNAL(disconnected()), exchange, SLOT(_q_disconnected()));
exchange->d_func()->open(); exchange->d_func()->open();
if (!name.isEmpty()) if (!name.isEmpty()) {
exchange->setName(name); exchange->setName(name);
d->exchanges[name] = exchange;
}
return exchange; return exchange;
} }
@ -679,6 +684,9 @@ QAmqpQueue *QAmqpClient::createQueue(int channelNumber)
QAmqpQueue *QAmqpClient::createQueue(const QString &name, int channelNumber) QAmqpQueue *QAmqpClient::createQueue(const QString &name, int channelNumber)
{ {
Q_D(QAmqpClient); Q_D(QAmqpClient);
if (!name.isEmpty() && d->queues.contains(name))
return d->queues[name];
QAmqpQueue *queue = new QAmqpQueue(channelNumber, this); QAmqpQueue *queue = new QAmqpQueue(channelNumber, this);
d->methodHandlersByChannel[queue->channelNumber()].append(queue->d_func()); d->methodHandlersByChannel[queue->channelNumber()].append(queue->d_func());
d->contentHandlerByChannel[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())); connect(this, SIGNAL(disconnected()), queue, SLOT(_q_disconnected()));
queue->d_func()->open(); queue->d_func()->open();
if (!name.isEmpty()) if (!name.isEmpty()) {
queue->setName(name); queue->setName(name);
d->queues[name] = queue;
}
return queue; return queue;
} }

View File

@ -100,6 +100,12 @@ public:
QAMQP::Error error; QAMQP::Error error;
QString errorString; QString errorString;
/*! Exchange objects */
QHash<QString, QAmqpExchange*> exchanges;
/*! Named queue objects */
QHash<QString, QAmqpQueue*> queues;
QAmqpClient * const q_ptr; QAmqpClient * const q_ptr;
Q_DECLARE_PUBLIC(QAmqpClient) Q_DECLARE_PUBLIC(QAmqpClient)