parent
8a4c5dbc57
commit
e12f436cbe
|
|
@ -341,3 +341,13 @@ void QAMQP::Client::setSsl( bool value )
|
||||||
{
|
{
|
||||||
pd_func()->network_->setSsl(value);
|
pd_func()->network_->setSsl(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QAMQP::Client::autoReconnect() const
|
||||||
|
{
|
||||||
|
return pd_func()->network_->autoReconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Client::setAutoReconnect( bool value )
|
||||||
|
{
|
||||||
|
pd_func()->network_->setAutoReconnect(value);
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,7 @@ namespace QAMQP
|
||||||
Q_PROPERTY(QString user READ user WRITE setUser);
|
Q_PROPERTY(QString user READ user WRITE setUser);
|
||||||
Q_PROPERTY(QString password READ password WRITE setPassword);
|
Q_PROPERTY(QString password READ password WRITE setPassword);
|
||||||
Q_PROPERTY(bool ssl READ isSsl WRITE setSsl);
|
Q_PROPERTY(bool ssl READ isSsl WRITE setSsl);
|
||||||
|
Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect);
|
||||||
|
|
||||||
Q_DISABLE_COPY(Client)
|
Q_DISABLE_COPY(Client)
|
||||||
|
|
||||||
|
|
@ -69,6 +70,8 @@ namespace QAMQP
|
||||||
bool isSsl() const;
|
bool isSsl() const;
|
||||||
void setSsl(bool value);
|
void setSsl(bool value);
|
||||||
|
|
||||||
|
bool autoReconnect() const;
|
||||||
|
void setAutoReconnect(bool value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ClientPrivate * const pd_ptr;
|
ClientPrivate * const pd_ptr;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include "amqp_network.h"
|
#include "amqp_network.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
QAMQP::Network::Network( QObject * parent /*= 0*/ ):QObject(parent)
|
QAMQP::Network::Network( QObject * parent /*= 0*/ ):QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
@ -10,6 +10,8 @@ QAMQP::Network::Network( QObject * parent /*= 0*/ ):QObject(parent)
|
||||||
buffer_ = new QBuffer(this);
|
buffer_ = new QBuffer(this);
|
||||||
offsetBuf = 0;
|
offsetBuf = 0;
|
||||||
leftSize = 0;
|
leftSize = 0;
|
||||||
|
timeOut_ = 1000;
|
||||||
|
connect_ = false;
|
||||||
|
|
||||||
buffer_->open(QIODevice::ReadWrite);
|
buffer_->open(QIODevice::ReadWrite);
|
||||||
|
|
||||||
|
|
@ -23,41 +25,60 @@ QAMQP::Network::~Network()
|
||||||
|
|
||||||
void QAMQP::Network::connectTo( const QString & host, quint32 port )
|
void QAMQP::Network::connectTo( const QString & host, quint32 port )
|
||||||
{
|
{
|
||||||
|
QString h(host);
|
||||||
|
int p(port);
|
||||||
|
connect_ = true;
|
||||||
|
if(host.isEmpty())
|
||||||
|
h = lastHost_ ;
|
||||||
|
if(port == 0)
|
||||||
|
p = lastPort_;
|
||||||
|
|
||||||
if (isSsl())
|
if (isSsl())
|
||||||
{
|
{
|
||||||
static_cast<QSslSocket *>(socket_.data())->connectToHostEncrypted(host, port);
|
static_cast<QSslSocket *>(socket_.data())->connectToHostEncrypted(h, p);
|
||||||
} else {
|
} else {
|
||||||
socket_->connectToHost(host, port);
|
socket_->connectToHost(h, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastHost_ = h;
|
||||||
|
lastPort_ = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAMQP::Network::disconnect()
|
void QAMQP::Network::disconnect()
|
||||||
{
|
{
|
||||||
|
connect_ = false;
|
||||||
if(socket_)
|
if(socket_)
|
||||||
socket_->abort();
|
socket_->abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAMQP::Network::connected()
|
|
||||||
{
|
|
||||||
if(isSsl() && !static_cast<QSslSocket *>(socket_.data())->isEncrypted() )
|
|
||||||
{
|
|
||||||
qDebug() << "[SSL] start encrypt";
|
|
||||||
static_cast<QSslSocket *>(socket_.data())->startClientEncryption();
|
|
||||||
} else {
|
|
||||||
conectionReady();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void QAMQP::Network::disconnected()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void QAMQP::Network::error( QAbstractSocket::SocketError socketError )
|
void QAMQP::Network::error( QAbstractSocket::SocketError socketError )
|
||||||
{
|
{
|
||||||
|
if(timeOut_ == 0)
|
||||||
|
{
|
||||||
|
timeOut_ = 1000;
|
||||||
|
} else {
|
||||||
|
if(timeOut_ < 120000)
|
||||||
|
{
|
||||||
|
timeOut_ *= 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Q_UNUSED(socketError);
|
Q_UNUSED(socketError);
|
||||||
|
switch(socketError)
|
||||||
|
{
|
||||||
|
case QAbstractSocket::ConnectionRefusedError:
|
||||||
|
case QAbstractSocket::RemoteHostClosedError:
|
||||||
|
case QAbstractSocket::SocketTimeoutError:
|
||||||
|
case QAbstractSocket::NetworkError:
|
||||||
|
if( autoReconnect_ && connect_ )
|
||||||
|
{
|
||||||
|
QTimer::singleShot(timeOut_, this, SLOT(connectTo()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAMQP::Network::readyRead()
|
void QAMQP::Network::readyRead()
|
||||||
|
|
@ -159,7 +180,7 @@ void QAMQP::Network::initSocket( bool ssl /*= false*/ )
|
||||||
connect(socket_, SIGNAL(connected()), this, SLOT(conectionReady()));
|
connect(socket_, SIGNAL(connected()), this, SLOT(conectionReady()));
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(socket_, SIGNAL(disconnected()), this, SLOT(disconnected()));
|
connect(socket_, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
|
||||||
connect(socket_, SIGNAL(readyRead()), this, SLOT(readyRead()));
|
connect(socket_, SIGNAL(readyRead()), this, SLOT(readyRead()));
|
||||||
connect(socket_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
|
connect(socket_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
|
||||||
}
|
}
|
||||||
|
|
@ -171,6 +192,18 @@ void QAMQP::Network::sslErrors( const QList<QSslError> & errors )
|
||||||
|
|
||||||
void QAMQP::Network::conectionReady()
|
void QAMQP::Network::conectionReady()
|
||||||
{
|
{
|
||||||
|
emit connected();
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QAMQP::Network::autoReconnect() const
|
||||||
|
{
|
||||||
|
return autoReconnect_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Network::setAutoReconnect( bool value )
|
||||||
|
{
|
||||||
|
autoReconnect_ = value;
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,6 @@ namespace QAMQP
|
||||||
Network(QObject * parent = 0);
|
Network(QObject * parent = 0);
|
||||||
~Network();
|
~Network();
|
||||||
|
|
||||||
void connectTo(const QString & host, quint32 port);
|
|
||||||
void disconnect();
|
void disconnect();
|
||||||
void sendFrame();
|
void sendFrame();
|
||||||
|
|
||||||
|
|
@ -28,14 +27,20 @@ namespace QAMQP
|
||||||
bool isSsl() const;
|
bool isSsl() const;
|
||||||
void setSsl(bool value);
|
void setSsl(bool value);
|
||||||
|
|
||||||
|
bool autoReconnect() const;
|
||||||
|
void setAutoReconnect(bool value);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void connectTo(const QString & host = QString(), quint32 port = 0);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void connected();
|
||||||
|
void disconnected();
|
||||||
void method(const QAMQP::Frame::Method & method);
|
void method(const QAMQP::Frame::Method & method);
|
||||||
void content(const QAMQP::Frame::Content & content);
|
void content(const QAMQP::Frame::Content & content);
|
||||||
void body(int channeNumber, const QByteArray & body);
|
void body(int channeNumber, const QByteArray & body);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void connected();
|
|
||||||
void disconnected();
|
|
||||||
void error( QAbstractSocket::SocketError socketError );
|
void error( QAbstractSocket::SocketError socketError );
|
||||||
void readyRead();
|
void readyRead();
|
||||||
void sslErrors ( const QList<QSslError> & errors );
|
void sslErrors ( const QList<QSslError> & errors );
|
||||||
|
|
@ -46,9 +51,15 @@ namespace QAMQP
|
||||||
void initSocket(bool ssl = false);
|
void initSocket(bool ssl = false);
|
||||||
QPointer<QTcpSocket> socket_;
|
QPointer<QTcpSocket> socket_;
|
||||||
QPointer<QBuffer> buffer_;
|
QPointer<QBuffer> buffer_;
|
||||||
|
QString lastHost_;
|
||||||
|
int lastPort_;
|
||||||
int offsetBuf;
|
int offsetBuf;
|
||||||
int leftSize;
|
int leftSize;
|
||||||
qint8 lastType_;
|
qint8 lastType_;
|
||||||
|
bool autoReconnect_;
|
||||||
|
int timeOut_;
|
||||||
|
|
||||||
|
bool connect_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif // amqp_network_h__
|
#endif // amqp_network_h__
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ namespace QAMQP
|
||||||
bool isSSl() const;
|
bool isSSl() const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Client * const pq_ptr;
|
Client * const pq_ptr;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue