diff --git a/src/blackcore/vatsimbookingreader.cpp b/src/blackcore/vatsimbookingreader.cpp index 885e6b30c..6239e7358 100644 --- a/src/blackcore/vatsimbookingreader.cpp +++ b/src/blackcore/vatsimbookingreader.cpp @@ -2,7 +2,9 @@ #include "blackmisc/avatcstation.h" #include "blackmisc/nwuser.h" #include "vatsimbookingreader.h" + #include +#include using namespace BlackMisc; using namespace BlackMisc::Aviation; @@ -41,6 +43,14 @@ namespace BlackCore * Bookings read from XML */ void CVatsimBookingReader::loadFinished(QNetworkReply *nwReply) + { + QtConcurrent::run(this, &CVatsimBookingReader::parseBookings, nwReply); + } + + /* + * Parse bookings + */ + void CVatsimBookingReader::parseBookings(QNetworkReply *nwReply) { if (nwReply->error() == QNetworkReply::NoError) { @@ -100,10 +110,12 @@ namespace BlackCore } m_updateTimestamp = QDateTime::currentDateTimeUtc(); emit this->dataRead(bookedStations); - nwReply->close(); - nwReply->deleteLater(); } // node } // content + + nwReply->close(); + nwReply->deleteLater(); + } // method } // namespace diff --git a/src/blackcore/vatsimbookingreader.h b/src/blackcore/vatsimbookingreader.h index 25b6feb31..b8a763baf 100644 --- a/src/blackcore/vatsimbookingreader.h +++ b/src/blackcore/vatsimbookingreader.h @@ -49,9 +49,12 @@ namespace BlackCore QDateTime m_updateTimestamp; QTimer *m_updateTimer; + //! Parse received bookings + void parseBookings(QNetworkReply *nwReply); + signals: - //! \brief Bookings have been read and converted to BlackMisc::Aviation::CAtcStationList - void dataRead(BlackMisc::Aviation::CAtcStationList bookedStations); + //! Bookings have been read and converted to BlackMisc::Aviation::CAtcStationList + void dataRead(const BlackMisc::Aviation::CAtcStationList &bookedStations); }; } #endif // guard diff --git a/src/blackcore/vatsimdatafilereader.cpp b/src/blackcore/vatsimdatafilereader.cpp index 290ed9bad..0dc9f3339 100644 --- a/src/blackcore/vatsimdatafilereader.cpp +++ b/src/blackcore/vatsimdatafilereader.cpp @@ -5,6 +5,7 @@ #include "vatsimdatafilereader.h" #include +#include using namespace BlackMisc; using namespace BlackMisc::Aviation; @@ -27,9 +28,13 @@ namespace BlackCore void CVatsimDataFileReader::read() { if (this->m_serviceUrls.isEmpty()) return; + + // round robin for load distribution this->m_currentUrlIndex++; if (this->m_serviceUrls.size() >= this->m_currentUrlIndex) this->m_currentUrlIndex = 0; + // remark: Don't use QThread to run network operations in the background + // see http://qt-project.org/doc/qt-4.7/qnetworkaccessmanager.html QUrl url(this->m_serviceUrls.at(this->m_currentUrlIndex)); if (url.isEmpty()) return; Q_ASSERT(this->m_networkManager); @@ -111,6 +116,14 @@ namespace BlackCore * Data file read from XML */ void CVatsimDataFileReader::loadFinished(QNetworkReply *nwReply) + { + QtConcurrent::run(this, &CVatsimDataFileReader::parseVatsimFileInBackground, nwReply); + } + + /* + * Data file read from XML + */ + void CVatsimDataFileReader::parseVatsimFileInBackground(QNetworkReply *nwReply) { // Example: http://info.vroute.net/vatsim-data.txt if (nwReply->error() == QNetworkReply::NoError) @@ -248,6 +261,9 @@ namespace BlackCore } } // for each } + + nwReply->close(); + nwReply->deleteLater(); // we are responsible for reading this emit this->dataRead(); } diff --git a/src/blackcore/vatsimdatafilereader.h b/src/blackcore/vatsimdatafilereader.h index 0d8031932..c23862279 100644 --- a/src/blackcore/vatsimdatafilereader.h +++ b/src/blackcore/vatsimdatafilereader.h @@ -98,6 +98,9 @@ namespace BlackCore SectionGeneral }; + //! Parse the VATSIM data file in backgroun + void parseVatsimFileInBackground(QNetworkReply *nwReply); + signals: //! Data have been read void dataRead();