From f15e2314d6155442c67058ff9cf04911eb6fb91c Mon Sep 17 00:00:00 2001 From: Alexey Shcherbakov Date: Sun, 17 Feb 2013 15:06:48 +0600 Subject: [PATCH 1/4] fix for Qt5 --- QAMQP.sln | 6 +- QAMQP.vcxproj | 240 +++++++++++++++++++++++++++++++++++++++ src/main.cpp | 25 ++++ src/qamqp/amqp_frame.cpp | 20 +++- 4 files changed, 286 insertions(+), 5 deletions(-) create mode 100644 QAMQP.vcxproj diff --git a/QAMQP.sln b/QAMQP.sln index 30e4eaf..e337e48 100644 --- a/QAMQP.sln +++ b/QAMQP.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QAMQP", "QAMQP.vcproj", "{479207E5-BC66-4954-A7E9-AE8DA7F2D7B9}" +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QAMQP", "QAMQP.vcxproj", "{479207E5-BC66-4954-A7E9-AE8DA7F2D7B9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/QAMQP.vcxproj b/QAMQP.vcxproj new file mode 100644 index 0000000..07618f0 --- /dev/null +++ b/QAMQP.vcxproj @@ -0,0 +1,240 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {479207E5-BC66-4954-A7E9-AE8DA7F2D7B9} + QAMQP + Qt4VSv1.0 + + + + Application + v100 + + + Application + v110 + + + + + + + + + + + + + <_ProjectFileVersion>11.0.50727.1 + + + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + + + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + + + + $(QTDIR)\include;.\GeneratedFiles\$(Configuration);$(QTDIR)\include\qtmain;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) + UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_NETWORK_LIB;QT_DLL;%(PreprocessorDefinitions) + MultiThreadedDLL + false + + + + qtmain.lib;QtCore4.lib;QtNetwork4.lib;%(AdditionalDependencies) + $(OutDir)$(ProjectName).exe + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + false + Console + + + + + Disabled + $(QTDIR)\include;.\GeneratedFiles\$(Configuration);$(QTDIR)\include\qtmain;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) + UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_NETWORK_LIB;QT_DLL;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + false + Level3 + ProgramDatabase + + + qtmaind.lib;Qt5Cored.lib;Qt5Networkd.lib;%(AdditionalDependencies) + $(OutDir)$(ProjectName).exe + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + true + Console + + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_channel.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_channel.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_connection.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_connection.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_exchange.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_exchange.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_network.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_network.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_queue.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\qamqp\amqp_queue.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\test.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + Moc%27ing %(Filename)%(Extension)... + "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB -DQT_DLL "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" ".\src\test.h" -o ".\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp" + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + .\GeneratedFiles\$(Configuration)\moc_%(Filename).cpp;%(Outputs) + + + + + + + + + + + \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 63109ee..a072bc9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,7 @@ #include #include "test.h" +#if QT_VERSION < 0x050000 void myMessageOutput(QtMsgType type, const char *msg) { switch (type) { @@ -25,10 +26,34 @@ void myMessageOutput(QtMsgType type, const char *msg) break; } } +#else +void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) +{ + QByteArray localMsg = msg.toLocal8Bit(); + switch (type) { + case QtDebugMsg: + fprintf(stderr, "#: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + break; + case QtWarningMsg: + fprintf(stderr, "%s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + break; + case QtCriticalMsg: + fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + break; + case QtFatalMsg: + fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + abort(); + } +} +#endif int main(int argc, char *argv[]) { + #if QT_VERSION < 0x050000 qInstallMsgHandler(myMessageOutput); + #else + qInstallMessageHandler(myMessageOutput); + #endif QCoreApplication a(argc, argv); diff --git a/src/qamqp/amqp_frame.cpp b/src/qamqp/amqp_frame.cpp index 3534bf3..50eef9f 100644 --- a/src/qamqp/amqp_frame.cpp +++ b/src/qamqp/amqp_frame.cpp @@ -148,7 +148,7 @@ QVariant QAMQP::Frame::readField( qint8 valueType, QDataStream &s ) { QVariant value; QByteArray tmp; - qint8 nameSize_; + qint8 nameSize_ = 0; char octet = 0; switch(valueType) @@ -235,7 +235,11 @@ QVariant QAMQP::Frame::readField( qint8 valueType, QDataStream &s ) s >> nameSize_; tmp.resize(nameSize_); s.readRawData(tmp.data(), tmp.size()); + #if QT_VERSION < 0x050000 value = QString::fromAscii(tmp.data(), nameSize_); + #else // For Qt5 + value = QString::fromLatin1(tmp.data(), nameSize_); + #endif break; case 'S': { @@ -244,7 +248,11 @@ QVariant QAMQP::Frame::readField( qint8 valueType, QDataStream &s ) tmp.resize(length_); } s.readRawData(tmp.data(), tmp.size()); - value = QString::fromAscii(tmp.data(), tmp.size()); + #if QT_VERSION < 0x050000 + value = QString::fromAscii(tmp.data(), nameSize_); + #else // For Qt5 + value = QString::fromLatin1(tmp.data(), nameSize_); + #endif break; case 'A': { @@ -391,14 +399,22 @@ void QAMQP::Frame::writeField( qint8 valueType, QDataStream &s, const QVariant & { QString str = value.toString(); s << quint8(str.length()); + #if QT_VERSION < 0x050000 s.writeRawData(str.toAscii().data(), str.length()); + #else // For Qt5 + s.writeRawData(str.toLatin1().data(), str.length()); + #endif } break; case 'S': { QString str = value.toString(); s << quint32(str.length()); + #if QT_VERSION < 0x050000 s.writeRawData(str.toAscii().data(), str.length()); + #else // For Qt5 + s.writeRawData(str.toLatin1().data(), str.length()); + #endif } break; case 'A': From 6bc0ae82f1855ca902973b2d0b5d07ed37725b5c Mon Sep 17 00:00:00 2001 From: Alexey Shcherbakov Date: Sun, 17 Feb 2013 15:09:04 +0600 Subject: [PATCH 2/4] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 571976f..3307801 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ QAMQP ============= -Qt4 implementation of AMQP 0.9.1. +Qt4/Qt5 implementation of AMQP 0.9.1. Implement ------------ From fb17149dca25c66b7ddb1b11b24978705f589e8e Mon Sep 17 00:00:00 2001 From: Alexey Shcherbakov Date: Wed, 20 Feb 2013 19:06:30 +0600 Subject: [PATCH 3/4] up --- QAMQP.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QAMQP.vcxproj b/QAMQP.vcxproj index 07618f0..0abf79f 100644 --- a/QAMQP.vcxproj +++ b/QAMQP.vcxproj @@ -54,7 +54,7 @@ - qtmain.lib;QtCore4.lib;QtNetwork4.lib;%(AdditionalDependencies) + qtmain.lib;Qt5Core.lib;Qt5Network.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(QTDIR)\lib;%(AdditionalLibraryDirectories) false From 9699491ef16b18e27c46c67bc0de3b18d307e9c9 Mon Sep 17 00:00:00 2001 From: Alexey Shcherbakov Date: Sat, 23 Feb 2013 13:20:01 +0600 Subject: [PATCH 4/4] add heartbeat --- src/main.cpp | 8 ++++---- src/qamqp/amqp_connection.cpp | 20 +++++++++++++++++--- src/qamqp/amqp_connection.h | 1 + src/qamqp/amqp_connection_p.h | 4 ++++ src/qamqp/amqp_frame.cpp | 8 ++++++++ src/qamqp/amqp_frame.h | 18 ++++++++++++++++++ src/qamqp/amqp_network.cpp | 5 +++++ src/test.cpp | 2 +- src/test.h | 2 +- 9 files changed, 59 insertions(+), 9 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a072bc9..963f238 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,16 +32,16 @@ void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QS QByteArray localMsg = msg.toLocal8Bit(); switch (type) { case QtDebugMsg: - fprintf(stderr, "#: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + fprintf(stderr, "#: %s\n", localMsg.constData(), context.file, context.line, context.function); break; case QtWarningMsg: - fprintf(stderr, "%s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + fprintf(stderr, "%s\n", localMsg.constData(), context.file, context.line, context.function); break; case QtCriticalMsg: - fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + fprintf(stderr, "Critical: %s\n", localMsg.constData(), context.file, context.line, context.function); break; case QtFatalMsg: - fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); + fprintf(stderr, "Fatal: %s\n", localMsg.constData(), context.file, context.line, context.function); abort(); } } diff --git a/src/qamqp/amqp_connection.cpp b/src/qamqp/amqp_connection.cpp index 987baea..cd18b04 100644 --- a/src/qamqp/amqp_connection.cpp +++ b/src/qamqp/amqp_connection.cpp @@ -4,11 +4,11 @@ #include "amqp_p.h" #include "amqp_frame.h" - #include #include #include #include +#include using namespace QAMQP; @@ -53,6 +53,9 @@ void ConnectionPrivate::init(Client * parent) { pq_func()->setParent(parent); client_ = parent; + heartbeatTimer_ = new QTimer(parent); + QObject::connect(heartbeatTimer_, SIGNAL(timeout()), + pq_func(), SLOT(_q_heartbeat())); } void ConnectionPrivate::startOk() @@ -91,7 +94,7 @@ void ConnectionPrivate::tuneOk() stream << qint16(0); //channel_max stream << qint32(FRAME_MAX); //frame_max - stream << qint16(0); //heartbeat + stream << qint16(heartbeatTimer_->interval()/1000); //heartbeat frame.setArguments(arguments_); client_->pd_func()->network_->sendFrame(frame); @@ -157,10 +160,16 @@ void ConnectionPrivate::tune( const QAMQP::Frame::Method & frame ) stream >> channel_max; stream >> frame_max; stream >> heartbeat; + qDebug(">> channel_max: %d", channel_max); qDebug(">> frame_max: %d", frame_max); qDebug(">> heartbeat: %d", heartbeat); + if(heartbeatTimer_) + { + heartbeatTimer_->setInterval(heartbeat * 1000); + heartbeatTimer_->start(); + } tuneOk(); open(); } @@ -239,7 +248,6 @@ void ConnectionPrivate::setQOS( qint32 prefetchSize, quint16 prefetchCount, int client_->pd_func()->network_->sendFrame(frame); } - bool ConnectionPrivate::_q_method( const QAMQP::Frame::Method & frame ) { if(frame.methodClass() != QAMQP::Frame::fcConnection) @@ -281,6 +289,12 @@ bool ConnectionPrivate::_q_method( const QAMQP::Frame::Method & frame ) return true; } +void ConnectionPrivate::_q_heartbeat() +{ + QAMQP::Frame::Heartbeat frame; + client_->pd_func()->network_->sendFrame(frame); +} + ////////////////////////////////////////////////////////////////////////// Connection::Connection( Client * parent /*= 0*/ ) diff --git a/src/qamqp/amqp_connection.h b/src/qamqp/amqp_connection.h index 703f133..3ab0e6d 100644 --- a/src/qamqp/amqp_connection.h +++ b/src/qamqp/amqp_connection.h @@ -46,6 +46,7 @@ namespace QAMQP friend class ClientPrivate; friend class ChannelPrivate; Q_PRIVATE_SLOT(pd_func(), void _q_method(const QAMQP::Frame::Method & frame)) + Q_PRIVATE_SLOT(pd_func(), void _q_heartbeat()) }; } diff --git a/src/qamqp/amqp_connection_p.h b/src/qamqp/amqp_connection_p.h index 1fe0f74..cbf2032 100644 --- a/src/qamqp/amqp_connection_p.h +++ b/src/qamqp/amqp_connection_p.h @@ -5,6 +5,8 @@ #include +class QTimer; + namespace QAMQP { class Client; @@ -39,12 +41,14 @@ namespace QAMQP void close(const QAMQP::Frame::Method & frame); void closeOk(const QAMQP::Frame::Method & frame); bool _q_method(const QAMQP::Frame::Method & frame); + void _q_heartbeat(); void setQOS(qint32 prefetchSize, quint16 prefetchCount, int channel, bool global); QPointer client_; bool closed_; bool connected; + QPointer heartbeatTimer_; Connection * const pq_ptr; diff --git a/src/qamqp/amqp_frame.cpp b/src/qamqp/amqp_frame.cpp index 50eef9f..3c05364 100644 --- a/src/qamqp/amqp_frame.cpp +++ b/src/qamqp/amqp_frame.cpp @@ -703,3 +703,11 @@ qint32 QAMQP::Frame::ContentBody::size() const { return body_.size(); } + +////////////////////////////////////////////////////////////////////////// + +QAMQP::Frame::Heartbeat::Heartbeat() : Base(ftHeartbeat) {} + +void QAMQP::Frame::Heartbeat::readPayload(QDataStream & stream) {} +void QAMQP::Frame::Heartbeat::writePayload(QDataStream & stream) const {} + diff --git a/src/qamqp/amqp_frame.h b/src/qamqp/amqp_frame.h index d5e91aa..4d8ca64 100644 --- a/src/qamqp/amqp_frame.h +++ b/src/qamqp/amqp_frame.h @@ -356,6 +356,24 @@ namespace QAMQP private: QByteArray body_; }; + + /*! + @brief Class for working with heartbeat frames. + @detailed Implement frame for heartbeat send. + */ + class Heartbeat : public Base + { + public: + /*! + Heartbeat class constructor. + @detailed Construct frame class for sending. + */ + Heartbeat(); + + protected: + void writePayload(QDataStream & stream) const; + void readPayload(QDataStream & stream); + }; } } diff --git a/src/qamqp/amqp_network.cpp b/src/qamqp/amqp_network.cpp index c3dcb74..07ec9dd 100644 --- a/src/qamqp/amqp_network.cpp +++ b/src/qamqp/amqp_network.cpp @@ -141,6 +141,11 @@ void QAMQP::Network::readyRead() emit body(frame.channel(), frame.body()); } break; + case QAMQP::Frame::ftHeartbeat: + { + qDebug("Heartbeat"); + } + break; default: qWarning("Unknown frame type"); } diff --git a/src/test.cpp b/src/test.cpp index e51be11..2312648 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -4,7 +4,7 @@ Test::Test() { - QUrl con(QString("amqp://guest:guest@localhost:5672/")); + QUrl con(QString("amqp://guest:guest@192.168.28.128:5672/")); client_ = new QAMQP::Client(this); client_->open(con); exchange_ = client_->createExchange("test.test2"); diff --git a/src/test.h b/src/test.h index 217cf99..177a69f 100644 --- a/src/test.h +++ b/src/test.h @@ -16,7 +16,7 @@ public: private slots: void declared(); - void newMessage(); + void newMessage(); private: QPointer client_;