Skip to content
Snippets Groups Projects
main.cpp 2.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • akiraohgaki's avatar
    akiraohgaki committed
    #include <QStringList>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QJsonObject>
    //#include <QTranslator>
    //#include <QLocale>
    #include <QCommandLineParser>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QCommandLineOption>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QCoreApplication>
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include <QDebug>
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    #include "handlers/confighandler.h"
    
    akiraohgaki's avatar
    akiraohgaki committed
    //#include "handlers/systemhandler.h"
    //#include "handlers/ocshandler.h"
    //#include "handlers/itemhandler.h"
    
    akiraohgaki's avatar
    akiraohgaki committed
    #include "websockets/websocketserver.h"
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    int main(int argc, char *argv[])
    {
        // Init
        QCoreApplication app(argc, argv);
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        ConfigHandler *configHandler = new ConfigHandler(&app);
    
    akiraohgaki's avatar
    akiraohgaki committed
        QJsonObject appConfigApplication = configHandler->getAppConfigApplication();
    
        app.setApplicationName(appConfigApplication["name"].toString());
        app.setApplicationVersion(appConfigApplication["version"].toString());
        app.setOrganizationName(appConfigApplication["organization"].toString());
        app.setOrganizationDomain(appConfigApplication["domain"].toString());
    
        // Setup translator
        //QTranslator translator;
        //if (translator.load(QLocale(), "messages", ".", ":/i18n")) {
        //    app.installTranslator(&translator);
        //}
    
        // 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
        int port = clParser.value(clOptionPort).toInt();
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        // Setup websocket server
    
    akiraohgaki's avatar
    akiraohgaki committed
        WebSocketServer *wsServer = new WebSocketServer(appConfigApplication["id"].toString(), port, &app);
        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();
    }