[*] fix reconnection

This commit is contained in:
fuCtor 2012-05-24 20:34:16 -07:00
parent 8cd2702641
commit 8fb83ba1a4
4 changed files with 29 additions and 9 deletions

View File

@ -114,7 +114,10 @@ void ClientPrivate::parseCnnString( const QUrl & con )
void ClientPrivate::sockConnect() void ClientPrivate::sockConnect()
{ {
disconnect(); if(network_->state() != QAbstractSocket::UnconnectedState )
{
disconnect();
}
network_->connectTo(host, port); network_->connectTo(host, port);
} }
@ -130,7 +133,7 @@ Exchange * ClientPrivate::createExchange(int channelNumber, const QString &name
exchange_, SLOT(_q_method(const QAMQP::Frame::Method &))); exchange_, SLOT(_q_method(const QAMQP::Frame::Method &)));
QObject::connect(connection_, SIGNAL(connected()), exchange_, SLOT(_q_open())); QObject::connect(connection_, SIGNAL(connected()), exchange_, SLOT(_q_open()));
QObject::connect(connection_, SIGNAL(disconnected()), exchange_, SLOT(_q_disconnected())); QObject::connect(pq_func(), SIGNAL(disconnected()), exchange_, SLOT(_q_disconnected()));
exchange_->setName(name); exchange_->setName(name);
return exchange_; return exchange_;
} }
@ -148,6 +151,7 @@ Queue * ClientPrivate::createQueue(int channelNumber, const QString &name )
queue_, SLOT(_q_body(int, const QByteArray &))); queue_, SLOT(_q_body(int, const QByteArray &)));
QObject::connect(connection_, SIGNAL(connected()), queue_, SLOT(_q_open())); QObject::connect(connection_, SIGNAL(connected()), queue_, SLOT(_q_open()));
QObject::connect(pq_func(), SIGNAL(disconnected()), queue_, SLOT(_q_disconnected()));
queue_->setName(name); queue_->setName(name);
return queue_; return queue_;
} }
@ -155,12 +159,16 @@ Queue * ClientPrivate::createQueue(int channelNumber, const QString &name )
void ClientPrivate::disconnect() void ClientPrivate::disconnect()
{ {
network_->QAMQP::Network::disconnect(); P_Q(QAMQP::Client);
//connection_->close();
if(network_->state() != QAbstractSocket::UnconnectedState)
{
network_->QAMQP::Network::disconnect();
connection_->pd_func()->connected = false;
emit pq_func()->disconnected();
}
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////

View File

@ -185,6 +185,7 @@ void ConnectionPrivate::close( const QAMQP::Frame::Method & frame )
qDebug(">> class-id: %d", classId); qDebug(">> class-id: %d", classId);
qDebug(">> method-id: %d", methodId); qDebug(">> method-id: %d", methodId);
connected = false; connected = false;
client_->pd_func()->network_->error(QAbstractSocket::RemoteHostClosedError);
QMetaObject::invokeMethod(pq_func(), "disconnected"); QMetaObject::invokeMethod(pq_func(), "disconnected");
} }

View File

@ -48,7 +48,7 @@ void QAMQP::Network::disconnect()
{ {
connect_ = false; connect_ = false;
if(socket_) if(socket_)
socket_->abort(); socket_->close();
} }
void QAMQP::Network::error( QAbstractSocket::SocketError socketError ) void QAMQP::Network::error( QAbstractSocket::SocketError socketError )
@ -70,6 +70,9 @@ void QAMQP::Network::error( QAbstractSocket::SocketError socketError )
case QAbstractSocket::RemoteHostClosedError: case QAbstractSocket::RemoteHostClosedError:
case QAbstractSocket::SocketTimeoutError: case QAbstractSocket::SocketTimeoutError:
case QAbstractSocket::NetworkError: case QAbstractSocket::NetworkError:
case QAbstractSocket::ProxyConnectionClosedError:
case QAbstractSocket::ProxyConnectionRefusedError:
case QAbstractSocket::ProxyConnectionTimeoutError:
if( autoReconnect_ && connect_ ) if( autoReconnect_ && connect_ )
{ {
QTimer::singleShot(timeOut_, this, SLOT(connectTo())); QTimer::singleShot(timeOut_, this, SLOT(connectTo()));
@ -77,6 +80,7 @@ void QAMQP::Network::error( QAbstractSocket::SocketError socketError )
break; break;
default: default:
qWarning() << "AMQP Socket Error: " << socket_->errorString();
break; break;
} }
} }
@ -210,3 +214,8 @@ void QAMQP::Network::setAutoReconnect( bool value )
{ {
autoReconnect_ = value; autoReconnect_ = value;
} }
QAbstractSocket::SocketState QAMQP::Network::state() const
{
return socket_->state();
}

View File

@ -30,8 +30,11 @@ namespace QAMQP
bool autoReconnect() const; bool autoReconnect() const;
void setAutoReconnect(bool value); void setAutoReconnect(bool value);
QAbstractSocket::SocketState state() const;
public slots: public slots:
void connectTo(const QString & host = QString(), quint32 port = 0); void connectTo(const QString & host = QString(), quint32 port = 0);
void error( QAbstractSocket::SocketError socketError );
signals: signals:
void connected(); void connected();
@ -40,8 +43,7 @@ namespace QAMQP
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 error( QAbstractSocket::SocketError socketError );
void readyRead(); void readyRead();
void sslErrors ( const QList<QSslError> & errors ); void sslErrors ( const QList<QSslError> & errors );