[*] 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()
{
if(network_->state() != QAbstractSocket::UnconnectedState )
{
disconnect();
}
network_->connectTo(host, port);
}
@ -130,7 +133,7 @@ Exchange * ClientPrivate::createExchange(int channelNumber, const QString &name
exchange_, SLOT(_q_method(const QAMQP::Frame::Method &)));
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);
return exchange_;
}
@ -148,6 +151,7 @@ Queue * ClientPrivate::createQueue(int channelNumber, const QString &name )
queue_, SLOT(_q_body(int, const QByteArray &)));
QObject::connect(connection_, SIGNAL(connected()), queue_, SLOT(_q_open()));
QObject::connect(pq_func(), SIGNAL(disconnected()), queue_, SLOT(_q_disconnected()));
queue_->setName(name);
return queue_;
}
@ -155,12 +159,16 @@ Queue * ClientPrivate::createQueue(int channelNumber, const QString &name )
void ClientPrivate::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(">> method-id: %d", methodId);
connected = false;
client_->pd_func()->network_->error(QAbstractSocket::RemoteHostClosedError);
QMetaObject::invokeMethod(pq_func(), "disconnected");
}

View File

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

View File

@ -30,8 +30,11 @@ namespace QAMQP
bool autoReconnect() const;
void setAutoReconnect(bool value);
QAbstractSocket::SocketState state() const;
public slots:
void connectTo(const QString & host = QString(), quint32 port = 0);
void error( QAbstractSocket::SocketError socketError );
signals:
void connected();
@ -41,7 +44,6 @@ namespace QAMQP
void body(int channeNumber, const QByteArray & body);
private slots:
void error( QAbstractSocket::SocketError socketError );
void readyRead();
void sslErrors ( const QList<QSslError> & errors );