cpp-qt5-qhttpengine-server.main.cpp.mustache Maven / Gradle / Ivy
{{>licenseInfo}}
#include
#include
#include
#include
#include
#include
#include
#include
#ifdef __linux__
#include
#include
#endif
#include
#include "{{prefix}}ApiRouter.h"
#ifdef __linux__
void catchUnixSignals(QList quitSignals) {
auto handler = [](int sig) -> void {
// blocking and not aysnc-signal-safe func are valid
qDebug() << "\nquit the application by signal " << sig;
QCoreApplication::quit();
};
sigset_t blocking_mask;
sigemptyset(&blocking_mask);
for (auto sig : quitSignals)
sigaddset(&blocking_mask, sig);
struct sigaction sa;
sa.sa_handler = handler;
sa.sa_mask = blocking_mask;
sa.sa_flags = 0;
for (auto sig : quitSignals)
sigaction(sig, &sa, nullptr);
}
#endif
int main(int argc, char * argv[])
{
QCoreApplication a(argc, argv);
#ifdef __linux__
QList sigs({SIGQUIT, SIGINT, SIGTERM, SIGHUP});
catchUnixSignals(sigs);
#endif
// Build the command-line options
QCommandLineParser parser;
QCommandLineOption addressOption(
QStringList() << "a" << "address",
"address to bind to",
"address",
"0.0.0.0"
);
parser.addOption(addressOption);
QCommandLineOption portOption(
QStringList() << "p" << "port",
"port to listen on",
"port",
"8080"
);
parser.addOption(portOption);
parser.addHelpOption();
// Parse the options that were provided
parser.process(a);
// Obtain the values
QHostAddress address = QHostAddress(parser.value(addressOption));
quint16 port = static_cast(parser.value(portOption).toInt());
QSharedPointer<{{cppNamespace}}::RequestHandler> handler(new {{cppNamespace}}::RequestHandler());
{{cppNamespace}}::ApiRouter router;
router.setUpRoutes();
QObject::connect(handler.data(), &{{cppNamespace}}::RequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) {
router.processRequest(socket);
});
QHttpEngine::Server server(handler.data());
qDebug() << "Serving on " << address.toString() << ":" << port;
// Attempt to listen on the specified port
if (!server.listen(address, port)) {
qCritical("Unable to listen on the specified port.");
return 1;
}
return a.exec();
}