#pragma once #include #include #include #include class GamesPanel; class LightsPanel; class LogPanel; class PanelsPanel; class PowerPanel; class QLabel; class QLineEdit; class QTextEdit; class SettingsTree; class VersionsPanel; class WebSocketController : public QObject { Q_OBJECT public: explicit WebSocketController(QLineEdit *urlEdit, QLabel *statusLabel, QObject *parent = nullptr); QWebSocket *socket(); bool isConnected() const; void addLogView(QTextEdit *log); void setSettingsTree(SettingsTree *tree); void setGamesPanel(GamesPanel *panel); void setVersionsPanel(VersionsPanel *panel); void setPowerPanel(PowerPanel *panel); void setLogPanel(LogPanel *panel); void setPanelsPanel(PanelsPanel *panel); void setLightsPanel(LightsPanel *panel); public slots: void startConnection(); void closeConnection(); void sendCommand(const QString &cmd); void onConnected(); void onDisconnected(); void onTextMessageReceived(const QString &message); void onErrorOccurred(QAbstractSocket::SocketError error); private slots: void onValueEdited(const QString &key, const QString &newValue); private: void handleProtocol(const QString &msg); void broadcast(const QString &line); QWebSocket m_socket; QLineEdit *m_urlEdit = nullptr; QLabel *m_statusLabel = nullptr; QList m_logs; SettingsTree *m_settingsTree = nullptr; GamesPanel *m_gamesPanel = nullptr; VersionsPanel *m_versionsPanel = nullptr; PowerPanel *m_powerPanel = nullptr; LogPanel *m_logPanel = nullptr; PanelsPanel *m_panelsPanel = nullptr; LightsPanel *m_lightsPanel = nullptr; QStringList m_settingsKeys; int m_rnpCount = -1; };