/** * @RDE_HEADER@ * One EGCU instance * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-02-07 */ #pragma once #include #include #include #include #include #include #include "bcu_types.h" #include // #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; }; // exported for test app only 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: QNetworkAccessManager *m_nam; bool m_bUseQueue; LOGGER_T m_logger; QString m_username; QString m_passwd; QMap m_queueMap; bool m_newConnection = true; }; } // namespace BuildingControlUnit