Files
less_shitty_proxyjs/webserver.h

54 lines
1.1 KiB
C
Raw Permalink Normal View History

2025-07-16 20:25:01 +02:00
#pragma once
#include <QObject>
#include <QHttpServer>
#include <unordered_map>
#include <set>
#include <memory>
#ifdef FEATURE_REDIS
2025-07-16 20:25:01 +02:00
#include <hiredis/async.h>
#endif
2025-07-16 20:25:01 +02:00
class QWebSocket;
class Client;
class WebServer : public QObject
{
Q_OBJECT
friend class Client;
public:
explicit WebServer(const QString &identity,
#ifdef FEATURE_REDIS
redisAsyncContext *redis,
#endif
QObject *parent = nullptr);
2025-07-16 20:25:01 +02:00
~WebServer() override;
bool bind(QTcpServer *server);
private slots:
void newWebSocketConnection();
private:
#ifdef FEATURE_REDIS
2025-07-16 20:25:01 +02:00
void createTraefikRoute(const QString &serial);
void destroyTraefikRoute(const QString &serial);
#endif
2025-07-16 20:25:01 +02:00
QHttpServerWebSocketUpgradeResponse verifySocketUpgrade(const QHttpServerRequest &request);
void newWebSocketConnection(std::unique_ptr<QWebSocket> &&socket);
QHttpServer m_server;
QString m_identity;
std::unordered_map<QString, std::set<std::unique_ptr<Client>>> m_clients;
#ifdef FEATURE_REDIS
2025-07-16 20:25:01 +02:00
redisAsyncContext *m_redis;
#endif
2025-07-16 20:25:01 +02:00
};