Ctrl K
ComunidadGuías…

controller.h

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#ifndef CONTROLLER_H
#define CONTROLLER_H

#define SERVICE_VERSION     "2.25.0"
#define COOKIE_MAX_AGE      31536000
#define TICKET_MAX_AGE      30
#define REQUEST_TIMEOUT     5000

#include <QMetaEnum>
#include <QTcpServer>
#include <QWebSocket>
#include <QWebSocketServer>
#include "database.h"
#include "homed.h"

struct Ticket
{
    QString token;
    qint64 expire;
};

class Controller : public HOMEd
{
    Q_OBJECT

public:

    enum class Command
    {
        restartService,
        updateDashboards,
        updateIcons,
        updateNames
    };

    Controller(const QString &configFile);

    Q_ENUM(Command)

private:

    Database *m_database;

    QTcpServer *m_tcpServer;
    QWebSocketServer *m_webSocket;
    QTimer *m_timer;

    QMetaEnum m_commands;

    QString m_frontend, m_title, m_username, m_password, m_guest;
    bool m_debug, m_auth;

    QList <QString> m_retained, m_types;
    QMap <QString, QByteArray> m_messages;

    QList <QTcpSocket*> m_sockets;
    QMap <QWebSocket*, QList <QString>> m_clients;

    QMap <QString, Ticket> m_tickets;

    QString includeList(const QString &path, const QString &filter, const QString &tag);
    QString ticketToken(const QString &ticket);

    void httpResponse(QTcpSocket *socket, quint16 code, const QMap <QString, QString> &headers = QMap <QString, QString> (), const QByteArray &response = QByteArray());
    void fileResponse(QTcpSocket *socket, const QString &fileName);

public slots:

    void quit(void) override;

private slots:

    void mqttConnected(void) override;
    void mqttDisconnected(void) override;
    void mqttReceived(const QByteArray &message, const QMqttTopicName &topic) override;

    void socketConnected(void);
    void socketDisconnected(void);
    void readyRead(void);

    void clientConnected(void);
    void clientDisconnected(void);
    void textMessageReceived(const QString &message);

    void pingClients(void);

};

#endif