mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 00:16:51 +08:00
refs #712, improved readers
* only trigger read when network interface is available * do not trigger all reads at same time but slightly shifted * renamed to hasReceivedOkReply()
This commit is contained in:
@@ -109,6 +109,12 @@ namespace BlackCore
|
||||
{
|
||||
// ps_read is implemented in the derived classes
|
||||
if (entities == CEntityFlags::NoEntity) { return; }
|
||||
if (!this->isNetworkAvailable())
|
||||
{
|
||||
CLogMessage(this).warning("No network, will not read %1") << CEntityFlags::flagToString(entities);
|
||||
return;
|
||||
}
|
||||
|
||||
const bool s = QMetaObject::invokeMethod(this, "ps_read",
|
||||
Q_ARG(BlackMisc::Network::CEntityFlags::Entity, entities),
|
||||
Q_ARG(QDateTime, newerThan));
|
||||
@@ -169,7 +175,7 @@ namespace BlackCore
|
||||
|
||||
CDatabaseReader::JsonDatastoreResponse CDatabaseReader::setStatusAndTransformReplyIntoDatastoreResponse(QNetworkReply *nwReply)
|
||||
{
|
||||
this->setConnectionStatus(nwReply);
|
||||
this->setReplyStatus(nwReply);
|
||||
return this->transformReplyIntoDatastoreResponse(nwReply);
|
||||
}
|
||||
|
||||
@@ -233,17 +239,23 @@ namespace BlackCore
|
||||
return oldS != currentS;
|
||||
}
|
||||
|
||||
bool CDatabaseReader::canConnect() const
|
||||
bool CDatabaseReader::hasReceivedOkReply() const
|
||||
{
|
||||
QReadLocker rl(&this->m_statusLock);
|
||||
return m_canConnect;
|
||||
return m_1stReplyReceived && m_1stReplyStatus == QNetworkReply::NoError;
|
||||
}
|
||||
|
||||
bool CDatabaseReader::canConnect(QString &message) const
|
||||
bool CDatabaseReader::hasReceivedOkReply(QString &message) const
|
||||
{
|
||||
QReadLocker rl(&this->m_statusLock);
|
||||
message = m_statusMessage;
|
||||
return m_canConnect;
|
||||
return m_1stReplyReceived && m_1stReplyStatus == QNetworkReply::NoError;
|
||||
}
|
||||
|
||||
bool CDatabaseReader::hasReceivedFirstReply() const
|
||||
{
|
||||
QReadLocker rl(&this->m_statusLock);
|
||||
return m_1stReplyReceived;
|
||||
}
|
||||
|
||||
const QString &CDatabaseReader::getStatusMessage() const
|
||||
@@ -251,28 +263,20 @@ namespace BlackCore
|
||||
return this->m_statusMessage;
|
||||
}
|
||||
|
||||
void CDatabaseReader::setConnectionStatus(bool ok, const QString &message)
|
||||
void CDatabaseReader::setReplyStatus(QNetworkReply::NetworkError status, const QString &message)
|
||||
{
|
||||
{
|
||||
QWriteLocker wl(&this->m_statusLock);
|
||||
this->m_statusMessage = message;
|
||||
this->m_canConnect = ok;
|
||||
}
|
||||
QWriteLocker wl(&this->m_statusLock);
|
||||
this->m_statusMessage = message;
|
||||
this->m_1stReplyStatus = status;
|
||||
this->m_1stReplyReceived = true;
|
||||
}
|
||||
|
||||
void CDatabaseReader::setConnectionStatus(QNetworkReply *nwReply)
|
||||
void CDatabaseReader::setReplyStatus(QNetworkReply *nwReply)
|
||||
{
|
||||
Q_ASSERT_X(nwReply, Q_FUNC_INFO, "Missing network reply");
|
||||
if (nwReply->isFinished())
|
||||
if (nwReply && nwReply->isFinished())
|
||||
{
|
||||
if (nwReply->error() == QNetworkReply::NoError)
|
||||
{
|
||||
setConnectionStatus(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
setConnectionStatus(false, nwReply->errorString());
|
||||
}
|
||||
this->setReplyStatus(nwReply->error(), nwReply->errorString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <QString>
|
||||
#include <QTimer>
|
||||
#include <QtGlobal>
|
||||
#include <QNetworkReply>
|
||||
|
||||
class QNetworkReply;
|
||||
namespace BlackMisc { class CLogCategoryList; }
|
||||
@@ -98,14 +99,18 @@ namespace BlackCore
|
||||
//! Start reading in own thread (without config/caching)
|
||||
void startReadFromDbInBackgroundThread(BlackMisc::Network::CEntityFlags::Entity entities, const QDateTime &newerThan);
|
||||
|
||||
//! Can connect to DB
|
||||
//! Has received Ok response from server at least once?
|
||||
//! \threadsafe
|
||||
bool canConnect() const;
|
||||
bool hasReceivedOkReply() const;
|
||||
|
||||
//! Can connect to server?
|
||||
//! \return message why connect failed
|
||||
//! Has received Ok response from server at least once?
|
||||
//! A message why connect failed can be obtained.
|
||||
//! \threadsafe
|
||||
bool canConnect(QString &message) const;
|
||||
bool hasReceivedOkReply(QString &message) const;
|
||||
|
||||
//! Has received 1st reply?
|
||||
//! \threadsafe
|
||||
bool hasReceivedFirstReply() const;
|
||||
|
||||
//! Get cache timestamp
|
||||
virtual QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entities) const = 0;
|
||||
@@ -144,10 +149,11 @@ namespace BlackCore
|
||||
void dataRead(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState state, int number);
|
||||
|
||||
protected:
|
||||
CDatabaseReaderConfigList m_config; //!< DB reder configuration
|
||||
QString m_statusMessage; //!< Returned status message from watchdog
|
||||
bool m_canConnect = false; //!< Successful connection?
|
||||
mutable QReadWriteLock m_statusLock; //!< Lock
|
||||
CDatabaseReaderConfigList m_config; //!< DB reder configuration
|
||||
QString m_statusMessage; //!< Returned status message from watchdog
|
||||
bool m_1stReplyReceived = false; //!< Successful connection?
|
||||
QNetworkReply::NetworkError m_1stReplyStatus = QNetworkReply::UnknownServerError; //!< Successful connection?
|
||||
mutable QReadWriteLock m_statusLock; //!< Lock
|
||||
|
||||
//! Constructor
|
||||
CDatabaseReader(QObject *owner, const CDatabaseReaderConfigList &config, const QString &name);
|
||||
@@ -192,11 +198,11 @@ namespace BlackCore
|
||||
|
||||
//! Feedback about connection status
|
||||
//! \threadsafe
|
||||
void setConnectionStatus(bool ok, const QString &message = "");
|
||||
void setReplyStatus(QNetworkReply::NetworkError status, const QString &message = "");
|
||||
|
||||
//! Feedback about connection status
|
||||
//! \threadsafe
|
||||
void setConnectionStatus(QNetworkReply *nwReply);
|
||||
void setReplyStatus(QNetworkReply *nwReply);
|
||||
};
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
Reference in New Issue
Block a user