Allowing to configure the write timeout of AMQP frames

This commit is contained in:
Gauthier Brion 2015-03-16 15:03:23 +01:00
parent 9b3288ca9d
commit 2c330566e5
4 changed files with 36 additions and 1 deletions

View File

@ -767,6 +767,16 @@ void QAmqpClient::setHeartbeatDelay(qint16 delay)
d->heartbeatDelay = delay;
}
int QAmqpClient::writeTimeout() const
{
return QAmqpFrame::writeTimeout();
}
void QAmqpClient::setWriteTimeout(int msecs)
{
QAmqpFrame::setWriteTimeout(msecs);
}
void QAmqpClient::addCustomProperty(const QString &name, const QString &value)
{
Q_D(QAmqpClient);

View File

@ -80,6 +80,9 @@ public:
qint16 heartbeatDelay() const;
void setHeartbeatDelay(qint16 delay);
int writeTimeout() const;
void setWriteTimeout(int msecs);
void addCustomProperty(const QString &name, const QString &value);
QString customProperty(const QString &name) const;

View File

@ -6,6 +6,9 @@
#include "qamqpglobal.h"
#include "qamqpframe_p.h"
QReadWriteLock QAmqpFrame::lock_;
int QAmqpFrame::writeTimeout_ = 1000;
QAmqpFrame::QAmqpFrame(FrameType type)
: size_(0),
type_(type),
@ -27,6 +30,18 @@ void QAmqpFrame::setChannel(quint16 channel)
channel_ = channel;
}
int QAmqpFrame::writeTimeout()
{
QReadLocker locker(&lock_);
return writeTimeout_;
}
void QAmqpFrame::setWriteTimeout(int msecs)
{
QWriteLocker locker(&lock_);
writeTimeout_ = msecs;
}
quint16 QAmqpFrame::channel() const
{
return channel_;
@ -58,7 +73,7 @@ QDataStream &operator<<(QDataStream &stream, const QAmqpFrame &frame)
// write end
stream << qint8(QAmqpFrame::FRAME_END);
stream.device()->waitForBytesWritten(1000);
stream.device()->waitForBytesWritten(frame.writeTimeout());
return stream;
}

View File

@ -2,6 +2,7 @@
#define QAMQPFRAME_P_H
#include <QDataStream>
#include <QReadWriteLock>
#include <QHash>
#include <QVariant>
@ -42,6 +43,9 @@ public:
quint16 channel() const;
void setChannel(quint16 channel);
static int writeTimeout();
static void setWriteTimeout(int msecs);
virtual qint32 size() const;
static QVariant readAmqpField(QDataStream &s, QAmqpMetaType::ValueType type);
@ -58,6 +62,9 @@ private:
qint8 type_;
quint16 channel_;
static QReadWriteLock lock_;
static int writeTimeout_;
friend QDataStream &operator<<(QDataStream &stream, const QAmqpFrame &frame);
friend QDataStream &operator>>(QDataStream &stream, QAmqpFrame &frame);
};