#include #include #include #include #include #include #include #include #include static bool isInitialized = false; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QHttpServer server; server.route("/init", QHttpServerRequest::Method::Post, [] (const QHttpServerRequest &request) { if (isInitialized) { return ""; } const bool freeTrial = request.query().queryItemValue(QStringLiteral("ft")) == QStringLiteral("1"); if (freeTrial) { putenv("SteamAppId=312060"); putenv("SteamGameId=312060"); } else { putenv("SteamAppId=39210"); putenv("SteamGameId=39210"); } if (!SteamAPI_Init()) { qFatal() << "Failed to initialize Steam API!"; } qInfo() << "Initialized Steam API..."; isInitialized = true; return ""; }); server.route("/shutdown", QHttpServerRequest::Method::Post, [] () { if (!isInitialized) { return ""; } SteamAPI_Shutdown(); qInfo() << "Shutting down Steam API!"; return ""; }); server.route("/ticket", QHttpServerRequest::Method::Get, [] () { auto user = SteamAPI_GetHSteamUser(); const int bufsize = 1024; char* buf = new char[bufsize]; unsigned int length = 0; HAuthTicket ret = SteamUser()->GetAuthSessionTicket(buf, bufsize, &length, nullptr); QJsonObject response { {QStringLiteral("ticket"), QString::fromLatin1(QByteArray::fromRawData(buf, length).toHex())}, {QStringLiteral("time"), static_cast(SteamUtils()->GetServerRealTime())} }; return QJsonDocument(response).toJson(QJsonDocument::Compact); }); auto tcpserver = new QTcpServer(); if (!tcpserver->listen(QHostAddress::Any, 50481) || !server.bind(tcpserver)) { delete tcpserver; return -1; } qInfo() << "Listening on port" << tcpserver->serverPort(); return QCoreApplication::exec(); }