#pragma once #include #include #include #include #include #include #include "bcu_types.h" #include class QNetworkAccessManager; class QNetworkReply; class QAuthenticator; namespace BuildingControlUnit { struct NetworkRequest { QNetworkRequest request; QTime time = QTime::currentTime(); }; enum class HandleHttpQueueMessageStatus { MS_Single, MS_Cyclic }; struct HandleHttpQueue { HandleHttpQueue(): activeReply(nullptr), bAuthAlreadyRequested(false) { } QQueue requests; QSet uniquenessChecker; QNetworkReply *activeReply; bool bAuthAlreadyRequested; }; class HandleHttpRequest : public QObject { Q_OBJECT public: explicit HandleHttpRequest(bool useQueue, QObject *parent = nullptr); void init(const QString &username, const QString &passwd); Q_SIGNALS: void egcuReply(const QString &host, const QByteArray &data); void newEgcuConnection(const QString &host); public Q_SLOTS: void enqueue(const QUrl &url, HandleHttpQueueMessageStatus status); private Q_SLOTS: void onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator); void onReplyFinished(QNetworkReply *reply); void sendNextRequest(HandleHttpQueue &queue); void trySendNextRequest(); private: NGL::INGLLogger &m_logger; QNetworkAccessManager *m_nam; bool m_bUseQueue; QString m_username; QString m_passwd; QMap m_queueMap; bool m_newConnection = true; }; }