1
Fork 0
steamwrap/main.cpp

82 lines
2.2 KiB
C++
Raw Normal View History

#include <QHttpServer>
#include <QTcpServer>
#include <QCoreApplication>
#include <QJsonObject>
#include <QJsonDocument>
#include <cstdlib>
2023-12-21 20:18:42 -05:00
#include <iostream>
#include <steam/steam_api.h>
#include <steam/steamclientpublic.h>
2023-12-21 20:18:42 -05:00
static bool isInitialized = false;
2023-12-21 20:18:42 -05:00
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
2023-12-21 20:18:42 -05:00
QHttpServer server;
2023-12-21 20:18:42 -05:00
server.route("/init", QHttpServerRequest::Method::Post, [] (const QHttpServerRequest &request) {
if (isInitialized) {
return "";
}
const bool freeTrial = request.query().queryItemValue(QStringLiteral("ft")) == QStringLiteral("1");
2023-12-21 20:18:42 -05:00
if (freeTrial) {
putenv("SteamAppId=312060");
putenv("SteamGameId=312060");
} else {
putenv("SteamAppId=39210");
putenv("SteamGameId=39210");
}
2023-12-21 20:18:42 -05:00
if (!SteamAPI_Init()) {
qFatal() << "Failed to initialize Steam API!";
}
2023-12-21 20:18:42 -05:00
qInfo() << "Initialized Steam API...";
2023-12-21 20:18:42 -05:00
isInitialized = true;
return "";
});
server.route("/shutdown", QHttpServerRequest::Method::Post, [] () {
if (!isInitialized) {
return "";
}
SteamAPI_Shutdown();
2023-12-21 20:18:42 -05:00
qInfo() << "Shutting down Steam API!";
return "";
});
server.route("/ticket", QHttpServerRequest::Method::Get, [] () {
auto user = SteamAPI_GetHSteamUser();
2023-12-21 20:18:42 -05:00
const int bufsize = 1024;
char* buf = new char[bufsize];
2023-12-21 20:18:42 -05:00
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"), QString::number(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;
}
2023-12-21 20:18:42 -05:00
qInfo() << "Listening on port" << tcpserver->serverPort();
2023-12-21 20:18:42 -05:00
return QCoreApplication::exec();
2023-12-21 20:18:42 -05:00
}