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)
{
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;
}

View File

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