QAmqpClient: Re-factor using QAmqpChannelHash.
This commit is contained in:
parent
beb89b30b8
commit
ae4f1b336e
|
|
@ -551,26 +551,6 @@ void QAmqpClientPrivate::close(int code, const QString &text, int classId, int m
|
||||||
sendFrame(frame);
|
sendFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* Iterate through our list of objects and clean up the NULL pointers.
|
|
||||||
*/
|
|
||||||
void QAmqpClientPrivate::_q_objectDestroyed()
|
|
||||||
{
|
|
||||||
/* Clean up Exchanges */
|
|
||||||
QHash<QString, QPointer<QAmqpExchange> > exchanges(this->exchanges);
|
|
||||||
QHash<QString, QPointer<QAmqpExchange> >::iterator ex_it;
|
|
||||||
for (ex_it = exchanges.begin() ; ex_it != exchanges.end(); ex_it++)
|
|
||||||
if (ex_it.value().isNull())
|
|
||||||
this->exchanges.remove(ex_it.key());
|
|
||||||
|
|
||||||
/* Clean up Queues */
|
|
||||||
QHash<QString, QPointer<QAmqpQueue> > queues(this->queues);
|
|
||||||
QHash<QString, QPointer<QAmqpQueue> >::iterator q_it;
|
|
||||||
for (q_it = queues.begin() ; q_it != queues.end(); q_it++)
|
|
||||||
if (q_it.value().isNull())
|
|
||||||
this->queues.remove(q_it.key());
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
QAmqpClient::QAmqpClient(QObject *parent)
|
QAmqpClient::QAmqpClient(QObject *parent)
|
||||||
|
|
@ -680,29 +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)
|
QAmqpExchange *exchange = static_cast<QAmqpExchange*>(d->exchanges.get(name));
|
||||||
&& (!d->exchanges[name].isNull()))
|
if (exchange != NULL)
|
||||||
return d->exchanges[name].data();
|
return exchange;
|
||||||
|
|
||||||
QAmqpExchange *exchange = new QAmqpExchange(channelNumber, this);
|
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()));
|
||||||
connect(exchange, SIGNAL(destroyed()), this, SLOT(_q_objectDestroyed()));
|
|
||||||
exchange->d_func()->open();
|
exchange->d_func()->open();
|
||||||
|
|
||||||
if (!name.isEmpty())
|
if (!name.isEmpty())
|
||||||
exchange->setName(name);
|
exchange->setName(name);
|
||||||
if (name.isNull())
|
d->exchanges.put(exchange);
|
||||||
/*
|
|
||||||
* We don't want two copies of the default exchange, one referenced by
|
|
||||||
* QString() and the other by QString(""). QString() != QString("") So
|
|
||||||
* if it's null, overwrite with the empty string, since that's its
|
|
||||||
* official name.
|
|
||||||
*/
|
|
||||||
d->exchanges[""] = exchange;
|
|
||||||
else
|
|
||||||
d->exchanges[name] = exchange;
|
|
||||||
return exchange;
|
return exchange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -714,23 +684,21 @@ 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)
|
QAmqpQueue *queue = static_cast<QAmqpQueue*>(d->queues.get(name));
|
||||||
&& (!d->queues[name].isNull()))
|
if (queue != NULL)
|
||||||
return d->queues[name].data();
|
return queue;
|
||||||
|
|
||||||
QAmqpQueue *queue = new QAmqpQueue(channelNumber, this);
|
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());
|
||||||
d->bodyHandlersByChannel[queue->channelNumber()].append(queue->d_func());
|
d->bodyHandlersByChannel[queue->channelNumber()].append(queue->d_func());
|
||||||
connect(this, SIGNAL(connected()), queue, SLOT(_q_open()));
|
connect(this, SIGNAL(connected()), queue, SLOT(_q_open()));
|
||||||
connect(this, SIGNAL(disconnected()), queue, SLOT(_q_disconnected()));
|
connect(this, SIGNAL(disconnected()), queue, SLOT(_q_disconnected()));
|
||||||
connect(queue, SIGNAL(destroyed()), this, SLOT(_q_objectDestroyed()));
|
|
||||||
queue->d_func()->open();
|
queue->d_func()->open();
|
||||||
|
|
||||||
if (!name.isEmpty()) {
|
if (!name.isEmpty())
|
||||||
queue->setName(name);
|
queue->setName(name);
|
||||||
d->queues[name] = queue;
|
d->queues.put(queue);
|
||||||
}
|
|
||||||
return queue;
|
return queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,6 @@ private:
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_heartbeat())
|
Q_PRIVATE_SLOT(d_func(), void _q_heartbeat())
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_connect())
|
Q_PRIVATE_SLOT(d_func(), void _q_connect())
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_disconnect())
|
Q_PRIVATE_SLOT(d_func(), void _q_disconnect())
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_objectDestroyed())
|
|
||||||
|
|
||||||
friend class QAmqpChannelPrivate;
|
friend class QAmqpChannelPrivate;
|
||||||
friend class QAmqpQueuePrivate;
|
friend class QAmqpQueuePrivate;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include <QAbstractSocket>
|
#include <QAbstractSocket>
|
||||||
#include <QSslError>
|
#include <QSslError>
|
||||||
|
|
||||||
|
#include "qamqpchannelhash_p.h"
|
||||||
#include "qamqpglobal.h"
|
#include "qamqpglobal.h"
|
||||||
#include "qamqpauthenticator.h"
|
#include "qamqpauthenticator.h"
|
||||||
#include "qamqptable.h"
|
#include "qamqptable.h"
|
||||||
|
|
@ -51,11 +52,6 @@ public:
|
||||||
virtual void _q_connect();
|
virtual void _q_connect();
|
||||||
void _q_disconnect();
|
void _q_disconnect();
|
||||||
|
|
||||||
/*!
|
|
||||||
* Iterate through our list of objects and clean up the NULL pointers.
|
|
||||||
*/
|
|
||||||
void _q_objectDestroyed();
|
|
||||||
|
|
||||||
virtual bool _q_method(const QAmqpMethodFrame &frame);
|
virtual bool _q_method(const QAmqpMethodFrame &frame);
|
||||||
|
|
||||||
// method handlers, FROM server
|
// method handlers, FROM server
|
||||||
|
|
@ -106,10 +102,10 @@ public:
|
||||||
QString errorString;
|
QString errorString;
|
||||||
|
|
||||||
/*! Exchange objects */
|
/*! Exchange objects */
|
||||||
QHash<QString, QPointer<QAmqpExchange> > exchanges;
|
QAmqpChannelHash exchanges;
|
||||||
|
|
||||||
/*! Named queue objects */
|
/*! Named queue objects */
|
||||||
QHash<QString, QPointer<QAmqpQueue> > queues;
|
QAmqpChannelHash queues;
|
||||||
|
|
||||||
QAmqpClient * const q_ptr;
|
QAmqpClient * const q_ptr;
|
||||||
Q_DECLARE_PUBLIC(QAmqpClient)
|
Q_DECLARE_PUBLIC(QAmqpClient)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue