From f8a144bdc1694fee637970e2f4464ee24fb71b0a Mon Sep 17 00:00:00 2001 From: Natan Laverde Date: Mon, 18 May 2020 06:32:13 -0300 Subject: [PATCH] [C++] [Qt5] [Server] read json (#6343) * [C++] [Qt5] [Server] [Bug] fixed Incomplete Read JSON Emit signal requestReceived only after request content is entirely received. * [C++] [Qt5] [Server] [Bug] fixed Incomplete Read JSON Emit signal requestReceived only after request content is entirely received. --- .../cpp-qt5-qhttpengine-server/apirouter.h.mustache | 11 ++++++++++- .../server/src/handlers/OAIApiRouter.h | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache index f7c73187f8f..2b1c0cf75da 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache @@ -30,7 +30,16 @@ signals: protected: virtual void process(QHttpEngine::Socket *socket, const QString &path){ Q_UNUSED(path); - emit requestReceived(socket); + + // If the slot requires all data to be received, check to see if this is + // already the case, otherwise, wait until the rest of it arrives + if (socket->bytesAvailable() >= socket->contentLength()) { + emit requestReceived(socket); + } else { + connect(socket, &Socket::readChannelFinished, [this, socket, m]() { + emit requestReceived(socket); + }); + } } }; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h index 395a863b9ff..fbfe6d9e916 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h @@ -40,7 +40,16 @@ signals: protected: virtual void process(QHttpEngine::Socket *socket, const QString &path){ Q_UNUSED(path); - emit requestReceived(socket); + + // If the slot requires all data to be received, check to see if this is + // already the case, otherwise, wait until the rest of it arrives + if (socket->bytesAvailable() >= socket->contentLength()) { + emit requestReceived(socket); + } else { + connect(socket, &Socket::readChannelFinished, [this, socket, m]() { + emit requestReceived(socket); + }); + } } };