From 1f88f71a0551503e9434c9f78f39e2a3543c083e Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Tue, 15 Nov 2016 13:31:04 +0300 Subject: [PATCH] Added requesting in traffic manager --- drape_frontend/color_constants.cpp | 6 +- drape_head/drape_head.pro | 2 +- feature_list/feature_list.pro | 2 +- .../feature_segments_checker.pro | 2 +- generator/generator_tests/generator_tests.pro | 2 +- map/framework.cpp | 14 ++- map/framework.hpp | 2 + map/map_tests/map_tests.pro | 2 +- map/mwm_tests/mwm_tests.pro | 2 +- map/style_tests/style_tests.pro | 2 +- map/traffic_manager.cpp | 118 ++++++++++++++---- map/traffic_manager.hpp | 30 ++++- mapshot/mapshot.pro | 2 +- qt/qt.pro | 2 +- .../routing_benchmarks/routing_benchmarks.pro | 2 +- .../routing_consistency_tests.pro | 2 +- .../routing_integration_tests.pro | 2 +- routing/routing_tests/routing_tests.pro | 2 +- .../features_collector_tool.pro | 2 +- .../search_quality_tests.pro | 2 +- .../search_quality_tool.pro | 2 +- .../storage_integration_tests.pro | 2 +- storage/storage_tests/storage_tests.pro | 2 +- traffic/traffic_info.cpp | 5 +- traffic/traffic_info.hpp | 8 +- traffic/traffic_tests/traffic_info_test.cpp | 4 +- 26 files changed, 169 insertions(+), 54 deletions(-) diff --git a/drape_frontend/color_constants.cpp b/drape_frontend/color_constants.cpp index 23a50d0e95..a3053de113 100644 --- a/drape_frontend/color_constants.cpp +++ b/drape_frontend/color_constants.cpp @@ -27,9 +27,9 @@ unordered_map> kColorConstants = { TrafficG0, dp::Color(60, 170, 60, 255) }, { TrafficG1, dp::Color(60, 170, 60, 255) }, { TrafficG2, dp::Color(227, 38, 54, 255) }, - { TrafficG3, dp::Color(100, 100, 100, 255) }, - { TrafficG4, dp::Color(100, 100, 100, 255) }, - { TrafficG5, dp::Color(100, 100, 100, 255) }, + { TrafficG3, dp::Color(0, 100, 100, 255) }, + { TrafficG4, dp::Color(100, 0, 100, 255) }, + { TrafficG5, dp::Color(100, 100, 0, 255) }, { TrafficTempBlock, dp::Color(0, 0, 0, 255) }, { TrafficUnknown, dp::Color(0, 0, 0, 0) }, } diff --git a/drape_head/drape_head.pro b/drape_head/drape_head.pro index 925b12b1ef..0b1199eff7 100644 --- a/drape_head/drape_head.pro +++ b/drape_head/drape_head.pro @@ -1,6 +1,6 @@ # Head project for drape develop and debuging ROOT_DIR = .. -DEPENDENCIES = map drape_frontend drape indexer storage platform geometry coding base \ +DEPENDENCIES = map traffic drape_frontend drape indexer storage platform geometry coding base \ freetype expat protobuf jansson fribidi tomcrypt include($$ROOT_DIR/common.pri) diff --git a/feature_list/feature_list.pro b/feature_list/feature_list.pro index b4a016bfd5..be197b685a 100644 --- a/feature_list/feature_list.pro +++ b/feature_list/feature_list.pro @@ -1,7 +1,7 @@ # Feature List Tool ROOT_DIR = .. -DEPENDENCIES = map search_tests_support search search_quality storage indexer platform editor geometry \ +DEPENDENCIES = map traffic search_tests_support search search_quality storage indexer platform editor geometry \ coding base tomcrypt jansson protobuf stats_client succinct opening_hours pugixml include($$ROOT_DIR/common.pri) diff --git a/generator/feature_segments_checker/feature_segments_checker.pro b/generator/feature_segments_checker/feature_segments_checker.pro index be269b569b..345ec93255 100644 --- a/generator/feature_segments_checker/feature_segments_checker.pro +++ b/generator/feature_segments_checker/feature_segments_checker.pro @@ -7,7 +7,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = generator map routing storage indexer platform geometry coding base minizip succinct protobuf gflags +DEPENDENCIES = generator map traffic routing storage indexer platform geometry coding base minizip succinct protobuf gflags include($$ROOT_DIR/common.pri) diff --git a/generator/generator_tests/generator_tests.pro b/generator/generator_tests/generator_tests.pro index b5b74540ff..830c9ae746 100644 --- a/generator/generator_tests/generator_tests.pro +++ b/generator/generator_tests/generator_tests.pro @@ -5,7 +5,7 @@ TEMPLATE = app ROOT_DIR = ../.. DEPENDENCIES = generator_tests_support platform_tests_support generator drape_frontend routing search storage \ - indexer drape map platform editor geometry \ + indexer drape map traffic platform editor geometry \ coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \ minizip succinct pugixml tess2 gflags oauthcpp diff --git a/map/framework.cpp b/map/framework.cpp index 77bb757c4d..8ed23c4c98 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -341,7 +341,7 @@ Framework::Framework() , m_isRenderingEnabled(true) , m_trackingReporter(platform::CreateSocket(), TRACKING_REALTIME_HOST, TRACKING_REALTIME_PORT, tracking::Reporter::kPushDelayMs) - , m_trafficManager(m_model.GetIndex()) + , m_trafficManager(m_model.GetIndex(), bind(&Framework::GetMwmsByRect, this, _1)) , m_displacementModeManager([this](bool show) { int const mode = show ? dp::displacement::kHotelMode : dp::displacement::kDefaultMode; CallDrapeFunction(bind(&df::DrapeEngine::SetDisplacementMode, _1, mode)); @@ -3209,3 +3209,15 @@ void Framework::VizualizeRoadsInRect(m2::RectD const & rect) } }, kScale); } + +vector Framework::GetMwmsByRect(m2::RectD const & rect) +{ + vector result; + if (!m_infoGetter) + return result; + + auto countryId = m_infoGetter->GetRegionCountryId(rect.Center()); + result.push_back(m_model.GetIndex().GetMwmIdByCountryFile(platform::CountryFile(countryId))); + + return result; +} diff --git a/map/framework.hpp b/map/framework.hpp index bc4027944e..338eacc328 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -360,6 +360,8 @@ public: /// Guarantees that listener is called in the main thread context. void SetCurrentCountryChangedListener(TCurrentCountryChanged const & listener); + vector GetMwmsByRect(m2::RectD const & rect); + private: struct TapEvent { diff --git a/map/map_tests/map_tests.pro b/map/map_tests/map_tests.pro index d476a428ae..7e0d69b16e 100644 --- a/map/map_tests/map_tests.pro +++ b/map/map_tests/map_tests.pro @@ -6,7 +6,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = map drape_frontend routing search storage tracking drape indexer partners_api platform editor geometry coding base \ +DEPENDENCIES = map traffic traffic drape_frontend routing search storage tracking drape indexer partners_api platform editor geometry coding base \ freetype fribidi expat protobuf tomcrypt jansson osrm stats_client minizip succinct pugixml stats_client DEPENDENCIES *= opening_hours diff --git a/map/mwm_tests/mwm_tests.pro b/map/mwm_tests/mwm_tests.pro index 0beee1bc3c..3362d2801d 100644 --- a/map/mwm_tests/mwm_tests.pro +++ b/map/mwm_tests/mwm_tests.pro @@ -6,7 +6,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = map search storage indexer platform editor geometry coding base \ +DEPENDENCIES = map traffic search storage indexer platform editor geometry coding base \ freetype fribidi expat protobuf tomcrypt jansson succinct pugixml stats_client include($$ROOT_DIR/common.pri) diff --git a/map/style_tests/style_tests.pro b/map/style_tests/style_tests.pro index c4b1a0fb91..9df30f79cf 100644 --- a/map/style_tests/style_tests.pro +++ b/map/style_tests/style_tests.pro @@ -6,7 +6,7 @@ TEMPLATE = app INCLUDEPATH += ../../3party/protobuf/src ROOT_DIR = ../.. -DEPENDENCIES = map indexer platform geometry coding base expat protobuf tomcrypt +DEPENDENCIES = map traffic indexer platform geometry coding base expat protobuf tomcrypt macx-*: LIBS *= "-framework IOKit" diff --git a/map/traffic_manager.cpp b/map/traffic_manager.cpp index 6f6c91af2d..17007cabf1 100644 --- a/map/traffic_manager.cpp +++ b/map/traffic_manager.cpp @@ -6,6 +6,32 @@ #include "indexer/scales.hpp" +TrafficManager::TrafficManager(Index const & index, + GetMwmsByRectFn const & getMwmsByRectFn) + : m_isEnabled(true) //TODO: true is temporary + , m_index(index) + , m_getMwmsByRectFn(getMwmsByRectFn) + , m_isRunning(true) + , m_thread(&TrafficManager::ThreadRoutine, this) +{ + CHECK(m_getMwmsByRectFn != nullptr, ()); +} + +TrafficManager::~TrafficManager() +{ + { + lock_guard lock(m_requestedMwmsLock); + m_isRunning = false; + } + m_condition.notify_one(); + m_thread.join(); +} + +void TrafficManager::SetEnabled(bool enabled) +{ + m_isEnabled = enabled; +} + void TrafficManager::SetDrapeEngine(ref_ptr engine) { m_drapeEngine = engine; @@ -13,34 +39,27 @@ void TrafficManager::SetDrapeEngine(ref_ptr engine) void TrafficManager::UpdateViewport(ScreenBase const & screen) { - // 1. Determine mwm's inside viewport. + if (!m_isEnabled) + return; - // 2. Request traffic for this mwm's. + // Request traffic. + auto mwms = m_getMwmsByRectFn(screen.ClipRect()); - // 3. Cache geometry for rendering if it's necessary. - //MwmSet::MwmId mwmId; - //if (m_mwmIds.find(mwmId) == m_mwmIds.end()) - //{ - // df::TrafficSegmentsGeometry geometry; - // traffic::TrafficInfo info; - // CalculateSegmentsGeometry(info, geometry); - // m_mwmIds.insert(mwmId); - // m_drapeEngine->CacheTrafficSegmentsGeometry(geometry); - //} + // TODO: request new mwms, update old ones by timer. - // 4. Update traffic colors. - //df::TrafficSegmentsColoring coloring; - //traffic::TrafficInfo info; - //CalculateSegmentsColoring(info, coloring); - //m_drapeEngine->UpdateTraffic(coloring); + for (auto const & mwm : mwms) + RequestTrafficData(mwm); - // 5. Remove some mwm's from cache. + // TODO: Remove some mwm's from cache. //MwmSet::MwmId mwmId; //m_drapeEngine->ClearTrafficCache(mwmId); } void TrafficManager::UpdateMyPosition(MyPosition const & myPosition) { + if (!m_isEnabled) + return; + // 1. Determine mwm's nearby "my position". // 2. Request traffic for this mwm's. @@ -71,16 +90,20 @@ void TrafficManager::CalculateSegmentsGeometry(traffic::TrafficInfo const & traf { m2::PolylineD polyline; ft.ForEachPoint([&polyline](m2::PointD const & pt) { polyline.Add(pt); }, kScale); - polylines[fid] = polyline; + if (polyline.GetSize() != 0) + polylines[fid] = polyline; } }; m_index.ReadFeatures(featureReader, features); for (auto const & c : trafficInfo.GetColoring()) { - output.push_back(make_pair(df::TrafficSegmentID(trafficInfo.GetMwmId(), c.first), - polylines[c.first.m_fid].ExtractSegment(c.first.m_idx, - c.first.m_dir == 1))); + auto it = polylines.find(c.first.m_fid); + if (it == polylines.end()) + continue; + bool const isReversed = (c.first.m_dir == traffic::TrafficInfo::RoadSegmentId::kReverseDirection); + output.emplace_back(df::TrafficSegmentID(trafficInfo.GetMwmId(), c.first), + it->second.ExtractSegment(c.first.m_idx, isReversed)); } } @@ -93,3 +116,54 @@ void TrafficManager::CalculateSegmentsColoring(traffic::TrafficInfo const & traf output.emplace_back(sid, c.second); } } + +void TrafficManager::ThreadRoutine() +{ + vector mwms; + while (WaitForRequest(mwms)) + { + for (auto const & mwm : mwms) + { + traffic::TrafficInfo info(mwm); + if (info.ReceiveTrafficData("Russia_Moscow.traff")) // TODO: temporary name + OnTrafficDataResponse(info); + else + LOG(LDEBUG, ("Traffic request failed. Mwm =", mwm)); + } + mwms.clear(); + } +} + +bool TrafficManager::WaitForRequest(vector & mwms) +{ + unique_lock lock(m_requestedMwmsLock); + m_condition.wait(lock, [this] { return !m_isRunning || !m_requestedMwms.empty(); }); + if (!m_isRunning) + return false; + mwms.swap(m_requestedMwms); + return true; +} + +void TrafficManager::RequestTrafficData(MwmSet::MwmId const & mwmId) +{ + lock_guard lock(m_requestedMwmsLock); + m_requestedMwms.push_back(mwmId); + m_condition.notify_one(); +} + +void TrafficManager::OnTrafficDataResponse(traffic::TrafficInfo const & info) +{ + // Cache geometry for rendering if it's necessary. + if (m_mwmIds.find(info.GetMwmId()) == m_mwmIds.end()) + { + df::TrafficSegmentsGeometry geometry; + CalculateSegmentsGeometry(info, geometry); + m_mwmIds.insert(info.GetMwmId()); + m_drapeEngine->CacheTrafficSegmentsGeometry(geometry); + } + + // Update traffic colors. + df::TrafficSegmentsColoring coloring; + CalculateSegmentsColoring(info, coloring); + m_drapeEngine->UpdateTraffic(coloring); +} diff --git a/map/traffic_manager.hpp b/map/traffic_manager.hpp index 93982ba898..b2f60a5a45 100644 --- a/map/traffic_manager.hpp +++ b/map/traffic_manager.hpp @@ -12,14 +12,17 @@ #include "indexer/index.hpp" +#include "std/mutex.hpp" #include "std/set.hpp" +#include "std/thread.hpp" +#include "std/vector.hpp" namespace df { class DrapeEngine; } // namespace df -class TrafficManager +class TrafficManager final { public: struct MyPosition @@ -34,9 +37,12 @@ public: {} }; - TrafficManager(Index const & index) - : m_index(index) - {} + using GetMwmsByRectFn = function(m2::RectD const &)>; + + TrafficManager(Index const & index, GetMwmsByRectFn const & getMwmsByRectFn); + ~TrafficManager(); + + void SetEnabled(bool enabled); void UpdateViewport(ScreenBase const & screen); void UpdateMyPosition(MyPosition const & myPosition); @@ -49,8 +55,24 @@ private: void CalculateSegmentsColoring(traffic::TrafficInfo const & trafficInfo, df::TrafficSegmentsColoring & output) const; + void ThreadRoutine(); + bool WaitForRequest(vector & mwms); + void RequestTrafficData(MwmSet::MwmId const & mwmId); + void OnTrafficDataResponse(traffic::TrafficInfo const & info); + + bool m_isEnabled; + Index const & m_index; + GetMwmsByRectFn m_getMwmsByRectFn; + ref_ptr m_drapeEngine; m2::PointD m_myPosition; set m_mwmIds; + + bool m_isRunning; + condition_variable m_condition; + + vector m_requestedMwms; + mutex m_requestedMwmsLock; + thread m_thread; }; diff --git a/mapshot/mapshot.pro b/mapshot/mapshot.pro index 2a727a6a5a..2abb04d1be 100644 --- a/mapshot/mapshot.pro +++ b/mapshot/mapshot.pro @@ -1,7 +1,7 @@ # mapshot binary ROOT_DIR = .. -DEPENDENCIES = map drape_frontend routing search storage tracking indexer drape partners_api platform editor geometry coding base \ +DEPENDENCIES = map drape_frontend routing search storage tracking traffic indexer drape partners_api platform editor geometry coding base \ freetype expat fribidi tomcrypt gflags jansson protobuf osrm stats_client minizip succinct \ pugixml opening_hours diff --git a/qt/qt.pro b/qt/qt.pro index e9a6d23bf7..f4d42a22b5 100644 --- a/qt/qt.pro +++ b/qt/qt.pro @@ -1,6 +1,6 @@ # Main application in qt. ROOT_DIR = .. -DEPENDENCIES = map drape_frontend routing search storage tracking indexer drape partners_api platform editor geometry \ +DEPENDENCIES = map drape_frontend routing search storage tracking traffic indexer drape partners_api platform editor geometry \ coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \ minizip succinct pugixml oauthcpp diff --git a/routing/routing_benchmarks/routing_benchmarks.pro b/routing/routing_benchmarks/routing_benchmarks.pro index e1034ba9e0..3bb1337e5b 100644 --- a/routing/routing_benchmarks/routing_benchmarks.pro +++ b/routing/routing_benchmarks/routing_benchmarks.pro @@ -4,7 +4,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../../ -DEPENDENCIES = map routing search storage indexer platform editor geometry coding base \ +DEPENDENCIES = map routing traffic search storage indexer platform editor geometry coding base \ osrm jansson protobuf tomcrypt stats_client succinct pugixml macx-*: LIBS *= "-framework IOKit" diff --git a/routing/routing_consistency_tests/routing_consistency_tests.pro b/routing/routing_consistency_tests/routing_consistency_tests.pro index 03a2a2cd07..383380607e 100644 --- a/routing/routing_consistency_tests/routing_consistency_tests.pro +++ b/routing/routing_consistency_tests/routing_consistency_tests.pro @@ -7,7 +7,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = map routing search storage indexer platform editor geometry coding base osrm \ +DEPENDENCIES = map routing traffic search storage indexer platform editor geometry coding base osrm \ jansson protobuf tomcrypt succinct stats_client generator gflags pugixml include($$ROOT_DIR/common.pri) diff --git a/routing/routing_integration_tests/routing_integration_tests.pro b/routing/routing_integration_tests/routing_integration_tests.pro index 43c0ffa377..40f603d132 100644 --- a/routing/routing_integration_tests/routing_integration_tests.pro +++ b/routing/routing_integration_tests/routing_integration_tests.pro @@ -11,7 +11,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = map routing search storage indexer platform editor geometry coding base \ +DEPENDENCIES = map routing traffic search storage indexer platform editor geometry coding base \ osrm jansson protobuf tomcrypt succinct stats_client pugixml DEPENDENCIES += opening_hours diff --git a/routing/routing_tests/routing_tests.pro b/routing/routing_tests/routing_tests.pro index 257873522d..1ae0bd9712 100644 --- a/routing/routing_tests/routing_tests.pro +++ b/routing/routing_tests/routing_tests.pro @@ -7,7 +7,7 @@ TEMPLATE = app ROOT_DIR = ../.. DEPENDENCIES = routing indexer platform_tests_support platform editor geometry coding base \ - osrm protobuf tomcrypt succinct jansson stats_client map pugixml stats_client + osrm protobuf tomcrypt succinct jansson stats_client map traffic pugixml stats_client macx-*: LIBS *= "-framework IOKit" "-framework SystemConfiguration" diff --git a/search/search_quality/features_collector_tool/features_collector_tool.pro b/search/search_quality/features_collector_tool/features_collector_tool.pro index 857d1595f2..512c236683 100644 --- a/search/search_quality/features_collector_tool/features_collector_tool.pro +++ b/search/search_quality/features_collector_tool/features_collector_tool.pro @@ -7,7 +7,7 @@ TEMPLATE = app ROOT_DIR = ../../.. # todo(@m) revise -DEPENDENCIES = map drape_frontend routing search_tests_support search search_quality storage indexer drape \ +DEPENDENCIES = map drape_frontend traffic routing search_tests_support search search_quality storage indexer drape \ platform editor geometry coding base freetype expat fribidi tomcrypt gflags \ jansson protobuf osrm stats_client minizip succinct \ opening_hours pugixml diff --git a/search/search_quality/search_quality_tests/search_quality_tests.pro b/search/search_quality/search_quality_tests/search_quality_tests.pro index 6fe37de7e6..1bd627a772 100644 --- a/search/search_quality/search_quality_tests/search_quality_tests.pro +++ b/search/search_quality/search_quality_tests/search_quality_tests.pro @@ -7,7 +7,7 @@ TEMPLATE = app ROOT_DIR = ../../.. # todo(@m) revise -DEPENDENCIES = map drape_frontend routing search_tests_support search search_quality storage indexer drape platform geometry coding base \ +DEPENDENCIES = map drape_frontend traffic routing search_tests_support search search_quality storage indexer drape platform geometry coding base \ freetype expat fribidi tomcrypt gflags jansson protobuf osrm stats_client minizip succinct \ opening_hours diff --git a/search/search_quality/search_quality_tool/search_quality_tool.pro b/search/search_quality/search_quality_tool/search_quality_tool.pro index 24a4dc5480..bcd5d2cae0 100644 --- a/search/search_quality/search_quality_tool/search_quality_tool.pro +++ b/search/search_quality/search_quality_tool/search_quality_tool.pro @@ -7,7 +7,7 @@ TEMPLATE = app ROOT_DIR = ../../.. # todo(@m) revise -DEPENDENCIES = map drape_frontend routing search_tests_support search search_quality storage indexer drape \ +DEPENDENCIES = map drape_frontend traffic routing search_tests_support search search_quality storage indexer drape \ platform editor geometry coding base freetype expat fribidi tomcrypt gflags \ jansson protobuf osrm stats_client minizip succinct \ opening_hours pugixml diff --git a/storage/storage_integration_tests/storage_integration_tests.pro b/storage/storage_integration_tests/storage_integration_tests.pro index 5f922c9fc7..551c85c5c1 100644 --- a/storage/storage_integration_tests/storage_integration_tests.pro +++ b/storage/storage_integration_tests/storage_integration_tests.pro @@ -6,7 +6,7 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = map drape_frontend routing search storage tracking indexer drape partners_api platform_tests_support platform editor opening_hours geometry \ +DEPENDENCIES = map drape_frontend routing search storage tracking traffic indexer drape partners_api platform_tests_support platform editor opening_hours geometry \ coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \ minizip succinct pugixml oauthcpp diff --git a/storage/storage_tests/storage_tests.pro b/storage/storage_tests/storage_tests.pro index 6535fc5ccc..5fffd31010 100644 --- a/storage/storage_tests/storage_tests.pro +++ b/storage/storage_tests/storage_tests.pro @@ -11,7 +11,7 @@ macx*|win32*|linux* { DEPENDENCIES = generator_tests_support generator } -DEPENDENCIES *= drape_frontend map routing \ +DEPENDENCIES *= drape_frontend map routing traffic \ search storage indexer drape platform_tests_support platform editor opening_hours geometry \ coding base freetype expat fribidi tomcrypt jansson tess2 protobuf osrm stats_client \ minizip succinct pugixml oauthcpp diff --git a/traffic/traffic_info.cpp b/traffic/traffic_info.cpp index ef233b6538..a77dd9297a 100644 --- a/traffic/traffic_info.cpp +++ b/traffic/traffic_info.cpp @@ -20,7 +20,6 @@ namespace traffic { namespace { -char const kTestFileName[] = "traffic_data"; bool ReadRemoteFile(string const & url, vector & result) { @@ -46,12 +45,12 @@ TrafficInfo::RoadSegmentId::RoadSegmentId(uint32_t fid, uint16_t idx, uint8_t di // TrafficInfo -------------------------------------------------------------------------------- TrafficInfo::TrafficInfo(MwmSet::MwmId const & mwmId) : m_mwmId(mwmId) {} -bool TrafficInfo::ReceiveTrafficData() +bool TrafficInfo::ReceiveTrafficData(string const & fileName) { if (strlen(TRAFFIC_DATA_BASE_URL) == 0) return false; - string const url = string(TRAFFIC_DATA_BASE_URL) + string(kTestFileName); + string const url = string(TRAFFIC_DATA_BASE_URL) + string(fileName); vector contents; if (!ReadRemoteFile(url, contents)) return false; diff --git a/traffic/traffic_info.hpp b/traffic/traffic_info.hpp index 23309cd8ca..1db69d7493 100644 --- a/traffic/traffic_info.hpp +++ b/traffic/traffic_info.hpp @@ -12,11 +12,16 @@ namespace traffic { // This class is responsible for providing the real-time // information about road traffic for one mwm file. + class TrafficInfo { public: struct RoadSegmentId { + // m_dir can be kForwardDirection or kReverseDirection. + static int constexpr kForwardDirection = 0; + static int constexpr kReverseDirection = 1; + RoadSegmentId(); RoadSegmentId(uint32_t fid, uint16_t idx, uint8_t dir); @@ -43,7 +48,6 @@ public: uint16_t m_idx : 15; // The direction of the segment. - // todo(@m) Write up what the values 0 and 1 mean specifically. uint8_t m_dir : 1; }; @@ -58,7 +62,7 @@ public: // todo(@m, @syershov) Currently a hardcoded path is used. // Construct the url by passing an MwmId. // *NOTE* This method must not be called on the UI thread. - bool ReceiveTrafficData(); + bool ReceiveTrafficData(string const & fileName); // Returns the latest known speed group by a feature segment's id. SpeedGroup GetSpeedGroup(RoadSegmentId const & id) const; diff --git a/traffic/traffic_tests/traffic_info_test.cpp b/traffic/traffic_tests/traffic_info_test.cpp index 3efbcd7e35..3c9af855ea 100644 --- a/traffic/traffic_tests/traffic_info_test.cpp +++ b/traffic/traffic_tests/traffic_info_test.cpp @@ -21,8 +21,10 @@ SpeedGroup GetSpeedGroup(TrafficInfo::Coloring const & coloring, UNIT_TEST(TrafficInfo_RemoteFile) { + string const kTestFileName = "traffic_data"; + TrafficInfo r; - TEST(r.ReceiveTrafficData(), ()); + TEST(r.ReceiveTrafficData(kTestFileName), ()); } UNIT_TEST(TrafficInfo_Serialization)