Skip to content
Snippets Groups Projects
server.h 1.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • Peter Altenbernd's avatar
    Peter Altenbernd committed
    #ifndef SERVER_H
    #define SERVER_H
    
    #include <QObject>
    #include <QWebSocket>
    #include <QWebSocketServer>
    #include <QMutex>
    
    #include <QSerialPort>
    #include <QSerialPortInfo>
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    #include <QNetworkAccessManager>
    #include <QNetworkReply>
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    #include "solarControl.h"
    
    class Server : public QObject
    {
        Q_OBJECT
    public:
        explicit Server(QString TCPhostNamen, QObject *parent = nullptr);
    
    private:
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        friend class TestSHserver;
        Server(); // Nur zum Testen
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        // TCP Verbindung zu Smart Home gateway
        QString m_gatewayHostName;
        QTcpSocket  m_gatewayTCPsocket;
    
    
        // Serielle Schnittstelle zu angeschlossenem Gateway (USB)
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        // HTTP Requests für Tasmota
        QNetworkAccessManager * m_tasmota; // -> To send us a request.
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
        // WebSocket Verbindung zu Clients
        QWebSocketServer *m_webSocketServer;
        QVector<QWebSocket *> m_webSocketClients;
        QMutex mutex;
        const int maxClientNo = 25;
    
        void startWebSocketServer();
        void sendToClient(const QJsonObject &jsonObj);
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        // Peters Zauber-Steuerung
        SolarControl * m_solarControl;
        void startTimers();
    
        // helper (for better testing)
        void processTasmotaMsg(QString jsonMSG);
    
    
    
    private slots:
        void onReadyReadSensorValueTCP(); // TCP Socket interface to Smart Home Gateway
    
        // void onReadyReadSensorValueSerial(); // Serial interface to Smart Home Gateway
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        void showSensorValues();
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        void tasmotaReply(QNetworkReply *reply); // HTTP Requests für Tasmota
    
        // Web Socket interface to clients:
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        void onNewClientConnection();
        void processClientMessage(QString message);
        void socketClientDisconnected();
    
    
    };
    
    #endif // SERVER_H