More fixes in JSON API

Schedule delayed async session closing properly (without recurrence)
Fix double capture of this in async method registering, that was causing
  compilation error for Android
Fix minor compiler warning in jsonapi-generator
This commit is contained in:
Gioacchino Mazzurco 2019-08-29 01:24:51 +02:00
parent 76dfa04bb5
commit 2d7b855983
No known key found for this signature in database
GPG Key ID: A1FBCA3872E87051
3 changed files with 9 additions and 16 deletions

View File

@ -18,8 +18,8 @@
* *
*******************************************************************************/
registerHandler("$%apiPath%$",
[this, $%captureVars%$](const std::shared_ptr<rb::Session> session)
registerHandler( "$%apiPath%$",
[this](const std::shared_ptr<rb::Session> session)
{
const std::multimap<std::string, std::string> headers
{
@ -29,7 +29,7 @@ registerHandler("$%apiPath%$",
session->yield(rb::OK, headers);
size_t reqSize = session->get_request()->get_header("Content-Length", 0);
session->fetch( reqSize, [this, $%captureVars%$](
session->fetch( reqSize, [this](
const std::shared_ptr<rb::Session> session,
const rb::Bytes& body )
{
@ -74,5 +74,4 @@ $%outputParamsSerialization%$
session->yield(message.str());
$%sessionDelayedClose%$
} );
}, $%requiresAuth%$);
}, $%requiresAuth%$ );

View File

@ -92,7 +92,7 @@ int main(int argc, char *argv[])
{
QDomDocument hDoc;
QString hFilePath(it.next());
QString parseError; int line, column;
QString parseError; int line = -1, column = -1;
QFile hFile(hFilePath);
if (!hFile.open(QIODevice::ReadOnly) ||
!hDoc.setContent(&hFile, &parseError, &line, &column))
@ -320,18 +320,13 @@ int main(int argc, char *argv[])
"\t\t\tRS_SERIAL_PROCESS(retval);\n";
if(hasOutput) outputParamsSerialization += "\t\t}\n";
QString captureVars;
QString sessionEarlyClose;
if(hasSingleCallback)
sessionEarlyClose = "session->close();";
QString sessionDelayedClose;
if(hasMultiCallback)
{
sessionDelayedClose = "mService.schedule( [session](){session->close();}, std::chrono::seconds(maxWait+120) );";
captureVars = "this";
}
sessionDelayedClose = "RsThread::async( [=](){ std::this_thread::sleep_for(std::chrono::seconds(maxWait+120)); mService.schedule( [=](){ auto session = weakSession.lock(); if(session && session->is_open()) session->close(); } ); } );";
QString callbackParamsSerialization;
@ -381,7 +376,6 @@ int main(int argc, char *argv[])
substitutionsMap.insert("apiPath", apiPath);
substitutionsMap.insert("sessionEarlyClose", sessionEarlyClose);
substitutionsMap.insert("sessionDelayedClose", sessionDelayedClose);
substitutionsMap.insert("captureVars", captureVars);
substitutionsMap.insert("callbackName", callbackName);
substitutionsMap.insert("callbackParams", callbackParams);
substitutionsMap.insert("callbackParamsSerialization", callbackParamsSerialization);

View File

@ -18,8 +18,8 @@
* *
*******************************************************************************/
registerHandler("$%apiPath%$",
[$%captureVars%$](const std::shared_ptr<rb::Session> session)
registerHandler( "$%apiPath%$",
[](const std::shared_ptr<rb::Session> session)
{
size_t reqSize = session->get_request()->get_header("Content-Length", 0);
session->fetch( reqSize, [](
@ -46,5 +46,5 @@ $%outputParamsSerialization%$
// return them to the API caller
DEFAULT_API_CALL_JSON_RETURN(rb::OK);
} );
}, $%requiresAuth%$);
}, $%requiresAuth%$ );