Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/BuildingControlUnit/handle_http_request.cpp
T
torstenandCopilot b774f4035c Qt6 Migration: DDS-Stubs, Logger-Fixes, Export-Header Korrekturen
- NGL_ADD_LIBRARY2: 87 CMakeLists.txt konvertiert für Export-Header Generierung
- 44 Export-Header Include-Pfade korrigiert (_export.h)
- 81 DDS-Stub-Header generiert (*_dtc.h, *_fts.h, *_dts.h, *_ftc.h)
- INGLLogger: Duplikat gelöscht, m_logger Member entfernt, variadische Makros
- Q_FUNC_INFO Redefinition behoben (Qt6 definiert bereits)
- FATAL_LOG Makro hinzugefügt
- InfrastructureManagement DDS-Stubs (ism.hpp, ism_enums.hpp, ism_ftc.h)
- FilterManagement DDS-Stubs (flt_ftc.h, flt_dts.h)
- AreaEffectSimulation DDS-Stubs (aes.hpp, aes_enums.hpp)
- SymbolAppearance Klasse vollständig definiert mit content() Methode
- BuildingComponentFilter Klasse definiert mit Copy-Konstruktor
- Ftc Factory: nullptr Return (abstract class)
- AesFilter Klasse in aes.hpp hinzugefügt
- Dtc Klasse in ppm.hpp mit participantChanged Signal
- AesType Enum: alle 15 At* Werte definiert
- AesEffectState_def: EsReceived hinzugefügt
- DataModification Enum: eAdded/eModified/eRemoved
- function_reply_object.h → core_types.h Include-Pfad (72 Dateien)
- Enum-Class-Streaming Template-Operator in INGLLogger.h
- ism_mounting_point.h: QImage → QtGui/QImage, QGuiApplication/QScreen
- ism_data_plugin_interface.h: QSet Include, Include-Reihenfolge
- QRegExp → QRegularExpression in tpm_js_parser.cpp
- .underlying() Aufrufe zu direktem Enum-Vergleich korrigiert
- Include-Pfade: aes.hpp in symbol_appearance_settings_impl.h und aes_display_filter_impl.h

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-19 06:06:24 +02:00

172 lines
5.0 KiB
C++
Executable File

#include "handle_http_request.h"
#include <QAuthenticator>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>
namespace BuildingControlUnit
{
HandleHttpRequest::HandleHttpRequest(bool useQueue, QObject *parent)
: QObject(parent)
, m_nam(new QNetworkAccessManager(this))
, m_bUseQueue(useQueue)
{
INFO_LOG() << "Using Queue: " << m_bUseQueue;
connect(m_nam, &QNetworkAccessManager::finished,
this, &HandleHttpRequest::onReplyFinished);
connect(m_nam, &QNetworkAccessManager::authenticationRequired,
this, &HandleHttpRequest::onAuthenticationRequired);
}
void HandleHttpRequest::init(const QString &username, const QString &passwd)
{
m_username = username;
m_passwd = passwd;
}
void HandleHttpRequest::enqueue(const QUrl &url, HandleHttpQueueMessageStatus status)
{
QString host = url.host();
if (!m_queueMap.contains(host))
{
m_queueMap.insert(host, HandleHttpQueue());
}
if ((HandleHttpQueueMessageStatus::MS_Cyclic == status) &&
m_queueMap[host].uniquenessChecker.contains(url.toString()))
{
WARNING_LOG() << "Discarding duplicate url \"" << url.toString() << "\" due to slow message handling.";
}
else
{
NetworkRequest networkRequest;
networkRequest.request = QNetworkRequest(url);
m_queueMap[host].uniquenessChecker.insert(url.toString());
m_queueMap[host].requests.enqueue(networkRequest);
DEBUG_LOG() << "Added '" << url.toString() << " to queue for host: " << host
<< " Queue has " << m_queueMap[host].requests.count() << " elements";
trySendNextRequest();
}
}
void HandleHttpRequest::onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
{
if (!reply || !authenticator)
{
ERROR_LOG() << "Internal error - Nullptr exception!";
}
else if (!m_queueMap.contains(reply->url().host()))
{
WARNING_LOG() << "Internal error - got auth reply from unknown host!";
}
else
{
if (m_bUseQueue && reply != m_queueMap[reply->url().host()].activeReply)
WARNING_LOG() << "Internal error - got auth reply from unknown request!";
if (m_queueMap[reply->url().host()].bAuthAlreadyRequested)
return;
DEBUG_LOG() << "Authentication request";
authenticator->setUser(m_username);
authenticator->setPassword(m_passwd);
m_queueMap[reply->url().host()].bAuthAlreadyRequested = true;
}
}
void HandleHttpRequest::onReplyFinished(QNetworkReply *reply)
{
if ( reply->error() > 0)
{
m_queueMap.remove(reply->url().host());
return;
}
if (!reply)
{
ERROR_LOG() << "Internal error - Nullptr exception!";
}
else if (!m_queueMap.contains(reply->url().host()))
{
reply->deleteLater();
WARNING_LOG() << "Internal error - got reply from unknown host!";
}
else if (m_bUseQueue && reply != m_queueMap[reply->url().host()].activeReply)
{
reply->deleteLater();
WARNING_LOG() << "Internal error - got reply from unknown request!";
}
else
{
const int responseCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (responseCode == 200)
{
if ( m_newConnection)
{
m_newConnection = false;
DEBUG_LOG() << "emit newEgcuConnection host=" << reply->url().host();
emit newEgcuConnection(reply->url().host());
}
DEBUG_LOG() << "Request successfull";
}
else
WARNING_LOG() << "Invalid request for host " << reply->url().host() << ", response code: " << responseCode << ", query: " << reply->url().toString();
QByteArray replyData = reply->readAll();
DEBUG_LOG() << "Got reply (" << reply->url().toString() << "): " << replyData
<< " host=" << reply->url().host();
emit egcuReply(reply->url().host(), replyData);
m_queueMap[reply->url().host()].activeReply = nullptr;
reply->deleteLater();
QTimer::singleShot(0, this, &HandleHttpRequest::trySendNextRequest);
}
}
void HandleHttpRequest::sendNextRequest(HandleHttpQueue& queue)
{
if (m_bUseQueue && queue.activeReply != nullptr)
{
WARNING_LOG() << "Internal error - active reply not yet finished!";
}
else if (!queue.requests.isEmpty())
{
queue.bAuthAlreadyRequested = false;
const NetworkRequest networkRequest = queue.requests.dequeue();
const QNetworkRequest request = networkRequest.request;
queue.uniquenessChecker.remove(request.url().toString());
if ( networkRequest.time.secsTo(QTime::currentTime()) < 5)
{
queue.activeReply = m_nam->get(request);
DEBUG_LOG() << "Send request " << request.url().toString() << " and waiting for reply (" << queue.activeReply << ")";
}
else
{
DEBUG_LOG() << "remove request " << request.url().toString()
<< " because it's too old" << networkRequest.time.secsTo(QTime::currentTime());
sendNextRequest(queue);
m_newConnection = true;
}
}
}
void HandleHttpRequest::trySendNextRequest()
{
for (HandleHttpQueue& queue : m_queueMap)
{
if (!(m_bUseQueue && queue.activeReply != nullptr))
{
sendNextRequest(queue);
}
}
}
}