diff options
author | mpimenov <mpimenov@users.noreply.github.com> | 2016-12-09 16:20:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-09 16:20:04 +0300 |
commit | 263638e996a74176c7d3a7ed8dd25f3a20b71e1d (patch) | |
tree | 8ffeae1e141351c051bbf8147ef6ae55af968a0a /traffic | |
parent | db122bb5a28340d64e8eb5d93d0695e93d6d3ad6 (diff) | |
parent | 10885c6713a52d6abd8f104ddb26027deb382a7c (diff) |
Merge pull request #4936 from syershov/fix-traffic-processing
Fix traffic processing
Diffstat (limited to 'traffic')
-rw-r--r-- | traffic/traffic_info.cpp | 31 | ||||
-rw-r--r-- | traffic/traffic_info.hpp | 17 |
2 files changed, 31 insertions, 17 deletions
diff --git a/traffic/traffic_info.cpp b/traffic/traffic_info.cpp index d8ba284675..ed383ac8b4 100644 --- a/traffic/traffic_info.cpp +++ b/traffic/traffic_info.cpp @@ -157,10 +157,17 @@ void TrafficInfo::SetTrafficKeysForTesting(vector<RoadSegmentId> const & keys) bool TrafficInfo::ReceiveTrafficData(string & etag) { vector<SpeedGroup> values; - if (!ReceiveTrafficValues(etag, values)) + switch (ReceiveTrafficValues(etag, values)) + { + case ServerDataStatus::New: + return UpdateTrafficData(values); + case ServerDataStatus::NotChanged: + return true; + case ServerDataStatus::NotFound: + case ServerDataStatus::Error: return false; - - return UpdateTrafficData(values); + } + return false; } SpeedGroup TrafficInfo::GetSpeedGroup(RoadSegmentId const & id) const @@ -419,19 +426,19 @@ bool TrafficInfo::ReceiveTrafficKeys() return true; } -bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values) +TrafficInfo::ServerDataStatus TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values) { if (!m_mwmId.IsAlive()) return false; auto const & info = m_mwmId.GetInfo(); if (!info) - return false; + return ServerDataStatus::Error; uint64_t const version = info->GetVersion(); string const url = MakeRemoteURL(info->GetCountryName(), version); if (url.empty()) - return false; + return ServerDataStatus::Error; platform::HttpClient request(url); request.LoadHeaders(true); @@ -456,7 +463,7 @@ bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & value alohalytics::TStringMap({{"mwm", info->GetCountryName()}, {"version", strings::to_string(info->GetVersion())}})); - return false; + return ServerDataStatus::Error; } // Update ETag for this MWM. auto const & headers = request.GetHeaders(); @@ -465,7 +472,7 @@ bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & value etag = it->second; m_availability = Availability::IsAvailable; - return true; + return ServerDataStatus::New; } bool TrafficInfo::UpdateTrafficData(vector<SpeedGroup> const & values) @@ -491,7 +498,7 @@ bool TrafficInfo::UpdateTrafficData(vector<SpeedGroup> const & values) return true; } -bool TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion) +TrafficInfo::ServerDataStatus TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion) { switch (request.ErrorCode()) { @@ -506,12 +513,12 @@ bool TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t m_availability = Availability::ExpiredApp; else m_availability = Availability::NoData; - return false; + return ServerDataStatus::NotFound; } case 304: /* Not Modified */ { m_availability = Availability::IsAvailable; - return true; + return ServerDataStatus::NotChanged; } } @@ -520,7 +527,7 @@ bool TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t "$TrafficNetworkError", alohalytics::TStringMap({{"code", strings::to_string(request.ErrorCode())}})); - return false; + return ServerDataStatus::Error; } string DebugPrint(TrafficInfo::RoadSegmentId const & id) diff --git a/traffic/traffic_info.hpp b/traffic/traffic_info.hpp index 23cbb268f0..b687ab2a6e 100644 --- a/traffic/traffic_info.hpp +++ b/traffic/traffic_info.hpp @@ -117,22 +117,29 @@ public: static void DeserializeTrafficValues(vector<uint8_t> const & data, vector<SpeedGroup> & result); private: + enum class ServerDataStatus + { + New, + NotChanged, + NotFound, + Error, + }; + friend void UnitTest_TrafficInfo_UpdateTrafficData(); // todo(@m) A temporary method. Remove it once the keys are added // to the generator and the data is regenerated. bool ReceiveTrafficKeys(); - // Tries to read the values of the Coloring map from server. - // Returns true and updates m_coloring if the values are read successfully and - // their number is equal to the number of keys. + // Tries to read the values of the Coloring map from server into |values|. + // Returns result of communicating with server as ServerDataStatus. // Otherwise, returns false and does not change m_coloring. - bool ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values); + ServerDataStatus ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values); // Updates the coloring and changes the availability status if needed. bool UpdateTrafficData(vector<SpeedGroup> const & values); - bool ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion); + ServerDataStatus ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion); // The mapping from feature segments to speed groups (see speed_groups.hpp). Coloring m_coloring; |