Skip to content
Snippets Groups Projects
main.cpp 2.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • akiraohgaki's avatar
    akiraohgaki committed
    #include <QStringList>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QJsonObject>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QTranslator>
    #include <QLocale>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QCommandLineParser>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QCommandLineOption>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QGuiApplication>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QDebug>
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    #include "handlers/confighandler.h"
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include "websockets/websocketserver.h"
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    int main(int argc, char *argv[])
    {
        // Init
    
    akiraohgaki's avatar
    akiraohgaki committed
        QGuiApplication app(argc, argv); // This is backend program, but need GUI module
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        auto *configHandler = new ConfigHandler();
        auto appConfigApplication = configHandler->getAppConfigApplication();
    
    akiraohgaki's avatar
    akiraohgaki committed
    
        app.setApplicationName(appConfigApplication["name"].toString());
        app.setApplicationVersion(appConfigApplication["version"].toString());
        app.setOrganizationName(appConfigApplication["organization"].toString());
        app.setOrganizationDomain(appConfigApplication["domain"].toString());
    
        // Setup translator
    
    akiraohgaki's avatar
    akiraohgaki committed
        QTranslator translator;
        if (translator.load(QLocale(), "messages", ".", ":/i18n")) {
            app.installTranslator(&translator);
        }
    
    akiraohgaki's avatar
    akiraohgaki committed
    
        // Setup CLI
        QCommandLineParser clParser;
        clParser.setApplicationDescription(appConfigApplication["description"].toString());
        clParser.addHelpOption();
        clParser.addVersionOption();
    
    akiraohgaki's avatar
    akiraohgaki committed
    
        // Port 49152-61000 will available as ephemeral port
        // https://en.wikipedia.org/wiki/Ephemeral_port
        QCommandLineOption clOptionPort(QStringList() << "p" << "port", "Port for websocket server [default: 49152].", "port", "49152");
        clParser.addOption(clOptionPort);
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        clParser.process(app);
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        auto port = clParser.value(clOptionPort).toInt();
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        // Setup websocket server
    
    akiraohgaki's avatar
    akiraohgaki committed
        auto *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app);
    
    akiraohgaki's avatar
    akiraohgaki committed
        QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        if (wsServer->start()) {
            qDebug() << "Websocket server started at:" << wsServer->serverUrl().toString();
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
        else {
    
    akiraohgaki's avatar
    akiraohgaki committed
            qCritical() << "Failed to start websocket server:" << wsServer->errorString();
    
    akiraohgaki's avatar
    akiraohgaki committed
            return 1;
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
    
    akiraohgaki's avatar
    akiraohgaki committed
        return app.exec();
    }