Skip to content
Snippets Groups Projects
websocketserver.h 2.12 KiB
Newer Older
akiraohgaki's avatar
akiraohgaki committed
#pragma once

#include <QObject>
akiraohgaki's avatar
akiraohgaki committed
#include <QUrl>
akiraohgaki's avatar
akiraohgaki committed
#include <QJsonObject>
#include <QJsonArray>
akiraohgaki's avatar
akiraohgaki committed

class QWebSocketServer;
akiraohgaki's avatar
akiraohgaki committed
class QWebSocket;
akiraohgaki's avatar
akiraohgaki committed
class ConfigHandler;
class SystemHandler;
akiraohgaki's avatar
akiraohgaki committed
class OcsApiHandler;
akiraohgaki's avatar
akiraohgaki committed
class ItemHandler;
class UpdateHandler;
class DesktopThemeHandler;
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
class WebSocketServer : public QObject
{
    Q_OBJECT

public:
akiraohgaki's avatar
akiraohgaki committed
    explicit WebSocketServer(ConfigHandler *configHandler, const QString &serverName = QString("WebSocketServer"), quint16 serverPort = 0, QObject *parent = nullptr);
akiraohgaki's avatar
akiraohgaki committed
    ~WebSocketServer();

akiraohgaki's avatar
akiraohgaki committed
signals:
    void started();
    void stopped();

public slots:
akiraohgaki's avatar
akiraohgaki committed
    bool start();
    void stop();
akiraohgaki's avatar
akiraohgaki committed
    bool isError() const;
    QString errorString() const;
    QUrl serverUrl() const;
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
private slots:
    void wsNewConnection();
    void wsDisconnected();
akiraohgaki's avatar
akiraohgaki committed
    void wsTextMessageReceived(const QString &message);
    void wsBinaryMessageReceived(const QByteArray &message);
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
    void itemMetadataSetChanged();
    void itemDownloadStarted(QJsonObject result);
    void itemDownloadFinished(QJsonObject result);
    void itemDownloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal);
akiraohgaki's avatar
akiraohgaki committed
    void itemSaveStarted(QJsonObject result);
    void itemSaveFinished(QJsonObject result);
akiraohgaki's avatar
akiraohgaki committed
    void itemInstallStarted(QJsonObject result);
    void itemInstallFinished(QJsonObject result);
    void itemUninstallStarted(QJsonObject result);
    void itemUninstallFinished(QJsonObject result);

    void updateCheckAllStarted();
    void updateCheckAllFinished();
akiraohgaki's avatar
akiraohgaki committed
    void updateUpdateStarted(QString fileKey);
    void updateUpdateFinished(QString fileKey);
    void updateUpdateProgress(QString fileKey, int progress);
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
private:
akiraohgaki's avatar
akiraohgaki committed
    void receiveMessage(const QString &id, const QString &func, const QJsonArray &data);
    void sendMessage(const QString &id, const QString &func, const QJsonArray &data);
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
    ConfigHandler *configHandler_;
    SystemHandler *systemHandler_;
akiraohgaki's avatar
akiraohgaki committed
    OcsApiHandler *ocsApiHandler_;
akiraohgaki's avatar
akiraohgaki committed
    ItemHandler *itemHandler_;
    UpdateHandler *updateHandler_;
    DesktopThemeHandler *desktopThemeHandler_;
akiraohgaki's avatar
akiraohgaki committed

    QString serverName_;
    quint16 serverPort_;
    QWebSocketServer *wsServer_;
    QList<QWebSocket *> wsClients_;