From 2c330566e5d95c78f7b7c32374b5a49d8539615b Mon Sep 17 00:00:00 2001 From: Gauthier Brion Date: Mon, 16 Mar 2015 15:03:23 +0100 Subject: [PATCH] Allowing to configure the write timeout of AMQP frames --- src/qamqpclient.cpp | 10 ++++++++++ src/qamqpclient.h | 3 +++ src/qamqpframe.cpp | 17 ++++++++++++++++- src/qamqpframe_p.h | 7 +++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/qamqpclient.cpp b/src/qamqpclient.cpp index d803587..716e7cf 100644 --- a/src/qamqpclient.cpp +++ b/src/qamqpclient.cpp @@ -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); diff --git a/src/qamqpclient.h b/src/qamqpclient.h index 7758685..c6e90e4 100644 --- a/src/qamqpclient.h +++ b/src/qamqpclient.h @@ -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; diff --git a/src/qamqpframe.cpp b/src/qamqpframe.cpp index a46d554..f94bea9 100644 --- a/src/qamqpframe.cpp +++ b/src/qamqpframe.cpp @@ -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; } diff --git a/src/qamqpframe_p.h b/src/qamqpframe_p.h index e81ef1b..644f6bf 100644 --- a/src/qamqpframe_p.h +++ b/src/qamqpframe_p.h @@ -2,6 +2,7 @@ #define QAMQPFRAME_P_H #include +#include #include #include @@ -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); };