#ifndef BASECONN_H #define BASECONN_H #include #include #include #include #include #include #include #include #include #include #include #include "headers/appsettings.h" #include "headers/speedtimer.h" class BaseConn : public QObject { Q_OBJECT public: explicit BaseConn(QObject *parent = nullptr); // values for the socket connection int connection_progress; QString ip; ushort port = 3563; int errors; int errors_until_disconnect = 4; // the current state QString state; // can be: // - 'disconnected' // - 'connecting' // - 'connected' QVariant connections; QString latestReadReply; //---general status values---// private: QDateTime *date; //to get the current time QTcpSocket *socket; //socket for communication with the extention QTimer *timeoutTimer; QString readBuffer; int nextConnectionId; struct waitingRequest { int id; QEventLoop * loop; QJsonObject reply; }; QList waitingRequests; signals: void stateChanged(); //is emitted, when the connection state changes void progressChanged(); //is emmited during the connection process when the progress changes void gotUnexpectedReply(QString reply); void gotUpdate(QVariant data); void connectionsChanged(); void connectionSlotReleased(); void nextRemoteActionChanged(); void nextRemoteActionDelayProgChanged(); void gotError(QString error); public slots: Q_INVOKABLE void connectToHost(); //function to connect to the base station void connectionTimeout(); Q_INVOKABLE bool init(); Q_INVOKABLE void deInit(); Q_INVOKABLE void closeConnection(); void gotError(QAbstractSocket::SocketError err); // --- socket communication handling --- Q_INVOKABLE QVariantMap sendCommand(int header, QJsonValue data = ""); // --- helper functions --- Q_INVOKABLE int writeRemoteSetting(QString key, QString value); Q_INVOKABLE bool refreshConnections(); // functions for the qml adapter QString getIP() const; void setIP(const QString &ipAdress); QString getState() const; void setState(QString newState); int getProgress() const; QVariant getConnections(); private slots: void readyRead(); void processSocketMessage(QString message); void socketReplyRecieved(QString reply); void socketStateChanged(QAbstractSocket::SocketState socketState); }; extern BaseConn * pGlobalBaseConn; #endif // BASECONN_H