AusweisApp2/src/network/NetworkReplyTimeout.cpp

52 lines
1.1 KiB
C++

/*!
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#include "NetworkReplyTimeout.h"
#include "NetworkManager.h"
#include <QCoreApplication>
using namespace governikus;
NetworkReplyTimeout::NetworkReplyTimeout(QNetworkReply* pReply, const int pTimeout)
: QObject(pReply)
{
Q_ASSERT(pReply);
if (pReply == nullptr)
{
return;
}
connect(&mTimer, &QTimer::timeout, this, &NetworkReplyTimeout::onTimeout);
mTimer.setSingleShot(true);
mTimer.setInterval(pTimeout);
mTimer.start();
}
void NetworkReplyTimeout::onTimeout()
{
auto* reply = static_cast<QNetworkReply*>(parent());
if (reply != nullptr && reply->isRunning())
{
reply->abort();
}
}
void NetworkReplyTimeout::onShutdown()
{
mTimer.stop();
onTimeout();
}
void NetworkReplyTimeout::setTimeout(QNetworkReply* pReply, const int pTimeout)
{
// since the QNetworkReply is set as parent, we don't need to care about destruction
auto* timeout = new NetworkReplyTimeout(pReply, pTimeout);
connect(Env::getSingleton<NetworkManager>(), &NetworkManager::fireShutdown, timeout, &NetworkReplyTimeout::onShutdown);
}