Merge pull request #54 from droidsyer/fixedTimeout

Added Fixed timeout and Git version.
This commit is contained in:
Matt Broadstone 2016-10-04 10:11:15 -04:00 committed by GitHub
commit 21c03b2bab
5 changed files with 64 additions and 8 deletions

View File

@ -19,6 +19,7 @@ QAmqpClientPrivate::QAmqpClientPrivate(QAmqpClient *q)
host(AMQP_HOST), host(AMQP_HOST),
virtualHost(AMQP_VHOST), virtualHost(AMQP_VHOST),
autoReconnect(false), autoReconnect(false),
reconnectFixedTimeout(false),
timeout(0), timeout(0),
connecting(false), connecting(false),
useSsl(false), useSsl(false),
@ -161,7 +162,10 @@ void QAmqpClientPrivate::_q_disconnect()
// private slots // private slots
void QAmqpClientPrivate::_q_socketConnected() void QAmqpClientPrivate::_q_socketConnected()
{ {
if(reconnectFixedTimeout == false)
{
timeout = 0; timeout = 0;
}
char header[8] = {'A', 'M', 'Q', 'P', 0, 0, 9, 1}; char header[8] = {'A', 'M', 'Q', 'P', 0, 0, 9, 1};
socket->write(header, 8); socket->write(header, 8);
} }
@ -185,12 +189,15 @@ void QAmqpClientPrivate::_q_heartbeat()
void QAmqpClientPrivate::_q_socketError(QAbstractSocket::SocketError error) void QAmqpClientPrivate::_q_socketError(QAbstractSocket::SocketError error)
{ {
Q_Q(QAmqpClient); Q_Q(QAmqpClient);
if(reconnectFixedTimeout == false)
{
if (timeout <= 0) { if (timeout <= 0) {
timeout = 1000; timeout = 1000;
} else { } else {
if (timeout < 120000) if (timeout < 120000)
timeout *= 5; timeout *= 5;
} }
}
switch (error) { switch (error) {
case QAbstractSocket::ConnectionRefusedError: case QAbstractSocket::ConnectionRefusedError:
@ -747,10 +754,21 @@ bool QAmqpClient::autoReconnect() const
return d->autoReconnect; return d->autoReconnect;
} }
void QAmqpClient::setAutoReconnect(bool value) void QAmqpClient::setAutoReconnect(bool value, int timeout)
{ {
Q_D(QAmqpClient); Q_D(QAmqpClient);
d->autoReconnect = value; d->autoReconnect = value;
if((value == true) && (timeout > 0))
{
d->timeout = timeout;
d->reconnectFixedTimeout = true;
}
else
{
d->timeout = 0;
d->reconnectFixedTimeout = false;
}
} }
qint16 QAmqpClient::channelMax() const qint16 QAmqpClient::channelMax() const
@ -866,6 +884,11 @@ void QAmqpClient::setSslConfiguration(const QSslConfiguration &config)
} }
} }
QString QAmqpClient::gitVersion()
{
return QString(GIT_VERSION);
}
void QAmqpClient::ignoreSslErrors(const QList<QSslError> &errors) void QAmqpClient::ignoreSslErrors(const QList<QSslError> &errors)
{ {
Q_D(QAmqpClient); Q_D(QAmqpClient);

View File

@ -67,7 +67,7 @@ public:
QAmqpAuthenticator *auth() const; QAmqpAuthenticator *auth() const;
bool autoReconnect() const; bool autoReconnect() const;
void setAutoReconnect(bool value); void setAutoReconnect(bool value, int timeout = 0);
bool isConnected() const; bool isConnected() const;
@ -95,6 +95,8 @@ public:
QSslConfiguration sslConfiguration() const; QSslConfiguration sslConfiguration() const;
void setSslConfiguration(const QSslConfiguration &config); void setSslConfiguration(const QSslConfiguration &config);
static QString gitVersion();
// channels // channels
QAmqpExchange *createExchange(int channelNumber = -1); QAmqpExchange *createExchange(int channelNumber = -1);
QAmqpExchange *createExchange(const QString &name, int channelNumber = -1); QAmqpExchange *createExchange(const QString &name, int channelNumber = -1);

View File

@ -81,6 +81,7 @@ public:
// Network // Network
QByteArray buffer; QByteArray buffer;
bool autoReconnect; bool autoReconnect;
bool reconnectFixedTimeout;
int timeout; int timeout;
bool connecting; bool connecting;
bool useSsl; bool useSsl;

View File

@ -34,6 +34,13 @@ greaterThan(NEED_GCOV_SUPPORT, 0) {
} }
} }
#Define GIT Macros
GIT_VERSION = $$system(git describe --long --dirty --tags)
DEFINES += GIT_VERSION=\\\"$$GIT_VERSION\\\"
GIT_TAG = $$system(git describe --abbrev=0)
VERSION = $$replace(GIT_TAG, v,)
PRIVATE_HEADERS += \ PRIVATE_HEADERS += \
qamqpchannel_p.h \ qamqpchannel_p.h \
qamqpchannelhash_p.h \ qamqpchannelhash_p.h \

View File

@ -27,6 +27,7 @@ private Q_SLOTS:
public Q_SLOTS: // temporarily disabled public Q_SLOTS: // temporarily disabled
void autoReconnect(); void autoReconnect();
void autoReconnectTimeout();
void sslConnect(); void sslConnect();
private: private:
@ -147,6 +148,28 @@ void tst_QAMQPClient::autoReconnect()
QVERIFY(waitForSignal(&client, SIGNAL(connected()), 2)); QVERIFY(waitForSignal(&client, SIGNAL(connected()), 2));
} }
void tst_QAMQPClient::autoReconnectTimeout()
{
// TODO: this is a fairly crude way of testing this, research
// better alternatives
QAmqpClient client;
client.setAutoReconnect(true, 3);
client.connectToHost();
QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60));
qDebug() <<"connected" ;
QProcess::execute("rabbitmqctl", QStringList() << "stop_app");
QVERIFY(waitForSignal(&client, SIGNAL(disconnected()), 60));
qDebug() <<"disconnected" ;
QProcess::execute("rabbitmqctl", QStringList() << "start_app");
QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60));
qDebug() <<"connected" ;
QVERIFY(waitForSignal(&client, SIGNAL(disconnected()), 60));
QProcess::execute("rabbitmqctl", QStringList() << "start_app");
QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60));
}
void tst_QAMQPClient::tune() void tst_QAMQPClient::tune()
{ {
QAmqpClient client; QAmqpClient client;