controller.h
Rama master · réplica de lectura del repositorio original.
#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