Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions src/qamqpclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ QAmqpClientPrivate::QAmqpClientPrivate(QAmqpClient *q)
connected(false),
channelMax(0),
heartbeatDelay(0),
heartbeatLosts(0),
frameMax(AMQP_FRAME_MAX),
error(QAMQP::NoError),
q_ptr(q)
q_ptr(q),
sendHeartbitTime(QDateTime::currentDateTime()),
reciveHeartbitTime(QDateTime::currentDateTime())
{
qRegisterMetaType<QAmqpMessage::PropertyHash>();
}
Expand Down Expand Up @@ -178,6 +181,14 @@ void QAmqpClientPrivate::_q_socketDisconnected()

void QAmqpClientPrivate::_q_heartbeat()
{
sendHeartbitTime=QDateTime::currentDateTime();

if( heartbeatLosts > 0
&& qAbs( sendHeartbitTime.secsTo( reciveHeartbitTime ) ) > (heartbeatDelay*heartbeatLosts) )
{
emit q_ptr->error(QAMQP::HeartbeatMissed);
}

QAmqpHeartbeatFrame frame;
sendFrame(frame);
}
Expand Down Expand Up @@ -242,7 +253,7 @@ void QAmqpClientPrivate::_q_readyRead()
close(QAMQP::UnexpectedFrameError, "wrong end of frame");
return;
}

reciveHeartbitTime=QDateTime::currentDateTime();
QDataStream streamB(&buffer, QIODevice::ReadOnly);
switch (static_cast<QAmqpFrame::FrameType>(type)) {
case QAmqpFrame::Method:
Expand Down Expand Up @@ -804,11 +815,28 @@ void QAmqpClient::setHeartbeatDelay(qint16 delay)
d->heartbeatDelay = delay;
}

quint16 QAmqpClient::heartbeatLosts() const
{
Q_D(const QAmqpClient);
return d->heartbeatLosts;
}

int QAmqpClient::writeTimeout() const
{
return QAmqpFrame::writeTimeout();
}

void QAmqpClient::setHeartbeatLosts(qint16 lostCount)
{
Q_D(QAmqpClient);
if (d->connected) {
qAmqpDebug() << Q_FUNC_INFO << "can't modify value while connected";
return;
}

d->heartbeatLosts = lostCount;
}

void QAmqpClient::setWriteTimeout(int msecs)
{
QAmqpFrame::setWriteTimeout(msecs);
Expand Down
5 changes: 5 additions & 0 deletions src/qamqpclient.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ class QAMQP_EXPORT QAmqpClient : public QObject
Q_PROPERTY(qint16 channelMax READ channelMax WRITE setChannelMax)
Q_PROPERTY(qint32 frameMax READ frameMax WRITE setFrameMax)
Q_PROPERTY(qint16 heartbeatDelay READ heartbeatDelay() WRITE setHeartbeatDelay)
Q_PROPERTY(qint16 heartbeatLosts READ heartbeatLosts() WRITE setHeartbeatLosts)


public:
explicit QAmqpClient(QObject *parent = 0);
Expand Down Expand Up @@ -80,6 +82,9 @@ class QAMQP_EXPORT QAmqpClient : public QObject
qint16 heartbeatDelay() const;
void setHeartbeatDelay(qint16 delay);

quint16 heartbeatLosts() const;
void setHeartbeatLosts(qint16 lostCount);

int writeTimeout() const;
void setWriteTimeout(int msecs);

Expand Down
7 changes: 6 additions & 1 deletion src/qamqpclient_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <QPointer>
#include <QAbstractSocket>
#include <QSslError>
#include <QDateTime>

#include "qamqpchannelhash_p.h"
#include "qamqpglobal.h"
Expand Down Expand Up @@ -97,6 +98,7 @@ class QAMQP_EXPORT QAmqpClientPrivate : public QAmqpMethodFrameHandler
QAmqpTable customProperties;
qint16 channelMax;
qint16 heartbeatDelay;
qint16 heartbeatLosts;
qint32 frameMax;

QAMQP::Error error;
Expand All @@ -109,8 +111,11 @@ class QAMQP_EXPORT QAmqpClientPrivate : public QAmqpMethodFrameHandler
QAmqpChannelHash queues;

QAmqpClient * const q_ptr;
Q_DECLARE_PUBLIC(QAmqpClient)

QDateTime sendHeartbitTime;
QDateTime reciveHeartbitTime;

Q_DECLARE_PUBLIC(QAmqpClient)
};

#endif // QAMQPCLIENT_P_H
3 changes: 2 additions & 1 deletion src/qamqpglobal.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ enum Error
ResourceError = 506,
NotAllowedError = 530,
NotImplementedError = 540,
InternalError = 541
InternalError = 541,
HeartbeatMissed =542
};

struct Decimal
Expand Down