YULTek/Otarcik_CAN/Sources/InternetMonitor.cpp

104 lines
2.7 KiB
C++

#include "InternetMonitor.h"
#include <QNetworkReply>
#include "defines.h"
#include "GeneralMessagesLogDispatcher.h"
CInternetMonitor::CInternetMonitor(QObject *parent) : QObject(parent)
{
mInternetActive = false;
mNetMgr = new QNetworkAccessManager(this);
connect(mNetMgr,&QNetworkAccessManager::finished,this,&CInternetMonitor::NetworkReqfinished);
mConnectionTimer = new QTimer;
mConnectionTimer->setSingleShot(true);
mConnectionTimer->setInterval(INTERNET_MONITOR_CONNECTION_TIMEOUT);
connect(mConnectionTimer,&QTimer::timeout,this,&CInternetMonitor::ConnectionTimerExpired);
mCheckInternetStateTimer = new QTimer;
mCheckInternetStateTimer->setSingleShot(true);
mCheckInternetStateTimer->setInterval(INTERNET_MONITOR_INET_CHECK_TIMEOUT);
connect(mCheckInternetStateTimer,&QTimer::timeout,this,&CInternetMonitor::CheckInternetTimerExpired);
}
CInternetMonitor::~CInternetMonitor()
{
delete mNetMgr;
delete mCheckInternetStateTimer;
delete mConnectionTimer;
}
bool CInternetMonitor::IsInternetActive()
{
return mInternetActive;
}
int CInternetMonitor::Start()
{
CheckInternet();
return RET_OK;
}
int CInternetMonitor::CheckInternet()
{
if(mConnectionTimer->isActive()) //are we waiting for a reply??
return RET_GENERAL_ERROR;
mNetMgr->get(QNetworkRequest(QUrl("http://google.ca")));
mConnectionTimer->start();
return RET_OK;
}
void CInternetMonitor::NetworkReqfinished(QNetworkReply *reply)
{
mConnectionTimer->stop();
if(reply->error() == QNetworkReply::NoError)
{
// QByteArray Data = reply->readAll();
// qDebug("%s",qPrintable(Data));
if(mInternetActive == false)
{
emit InternetStateChanged(true);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Internet Connecté...","CInternetMonitor");
}
mInternetActive = true;
//qDebug("Internet is active");
}
else
{
if(mInternetActive == true)
{
emit InternetStateChanged(false);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Internet déconnecté...","CInternetMonitor");
}
mInternetActive = false;
}
mCheckInternetStateTimer->start();
reply->close();
reply->deleteLater();
}
void CInternetMonitor::CheckInternetTimerExpired()
{
CheckInternet();
}
void CInternetMonitor::ConnectionTimerExpired()
{
mCheckInternetStateTimer->start();
mConnectionTimer->stop();
if(mInternetActive == true)
{
emit InternetStateChanged(false);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Internet déconnecté...","CInternetMonitor");
}
mInternetActive = false;
}