#pragma once #include #include #include #include #include #ifdef FEATURE_REDIS #include #endif 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); ~WebServer() override; bool bind(QTcpServer *server); private slots: void newWebSocketConnection(); private: #ifdef FEATURE_REDIS void createTraefikRoute(const QString &serial); void destroyTraefikRoute(const QString &serial); #endif QHttpServerWebSocketUpgradeResponse verifySocketUpgrade(const QHttpServerRequest &request); void newWebSocketConnection(std::unique_ptr &&socket); QHttpServer m_server; QString m_identity; std::unordered_map>> m_clients; #ifdef FEATURE_REDIS redisAsyncContext *m_redis; #endif };