diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2015-12-18 15:27:00 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-12-18 15:48:20 -0800 |
commit | ec5afdd8b78224593bc9f29ef2c6e7c6cde60579 (patch) | |
tree | 15f26f76604e20ec0379d5c86867ebbaf4f91662 /src/mbgl/storage | |
parent | 20d2ceef4b6c74c83dd1d77648ee46f3e593d268 (diff) | |
download | qtlocation-mapboxgl-ec5afdd8b78224593bc9f29ef2c6e7c6cde60579.tar.gz |
[core] Merge default_file_source_impl.hpp into default_file_source.cpp
After previous refactors, no other files include default_file_source_imp.hpp.
Diffstat (limited to 'src/mbgl/storage')
-rw-r--r-- | src/mbgl/storage/default_file_source.cpp | 103 | ||||
-rw-r--r-- | src/mbgl/storage/default_file_source_impl.hpp | 115 |
2 files changed, 102 insertions, 116 deletions
diff --git a/src/mbgl/storage/default_file_source.cpp b/src/mbgl/storage/default_file_source.cpp index 367c083360..3a8a09a99c 100644 --- a/src/mbgl/storage/default_file_source.cpp +++ b/src/mbgl/storage/default_file_source.cpp @@ -1,4 +1,4 @@ -#include <mbgl/storage/default_file_source_impl.hpp> +#include <mbgl/storage/default_file_source.hpp> #include <mbgl/storage/asset_context_base.hpp> #include <mbgl/storage/http_context_base.hpp> #include <mbgl/storage/network_status.hpp> @@ -11,6 +11,9 @@ #include <mbgl/util/mapbox.hpp> #include <mbgl/util/exception.hpp> #include <mbgl/util/chrono.hpp> +#include <mbgl/util/async_task.hpp> +#include <mbgl/util/noncopyable.hpp> +#include <mbgl/util/timer.hpp> #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" @@ -21,11 +24,109 @@ #include <algorithm> #include <cassert> +#include <set> +#include <unordered_map> namespace algo = boost::algorithm; namespace mbgl { +class RequestBase; + +class DefaultFileRequest : public FileRequest { +public: + DefaultFileRequest(const Resource& resource_, + DefaultFileSource& fileSource_) + : resource(resource_), + fileSource(fileSource_) { + } + + ~DefaultFileRequest() { + fileSource.cancel(resource, this); + } + + Resource resource; + DefaultFileSource& fileSource; + + std::unique_ptr<WorkRequest> workRequest; +}; + +class DefaultFileRequestImpl : public util::noncopyable { +public: + using Callback = std::function<void (Response)>; + + const Resource resource; + std::unique_ptr<WorkRequest> cacheRequest; + RequestBase* realRequest = nullptr; + std::unique_ptr<util::Timer> timerRequest; + + inline DefaultFileRequestImpl(const Resource& resource_) + : resource(resource_) {} + + ~DefaultFileRequestImpl(); + + // Observer accessors. + void addObserver(FileRequest*, Callback); + void removeObserver(FileRequest*); + bool hasObservers() const; + + // Updates/gets the response of this request object. + void setResponse(const std::shared_ptr<const Response>&); + const std::shared_ptr<const Response>& getResponse() const; + + // Returns the seconds we have to wait until we need to redo this request. A value of 0 + // means that we need to redo it immediately, and a negative value means that we're not setting + // a timeout at all. + Seconds getRetryTimeout() const; + + // Checks the currently stored response and replaces it with an idential one, except with the + // stale flag set, if the response is expired. + void checkResponseFreshness(); + + // Notifies all observers. + void notify(); + + +private: + // Stores a set of all observing Request objects. + std::unordered_map<FileRequest*, Callback> observers; + + // The current response data. We're storing it because we can satisfy requests for the same + // resource directly by returning this response object. We also need it to create conditional + // HTTP requests, and to check whether new responses we got changed any data. + std::shared_ptr<const Response> response; + + // Counts the number of subsequent failed requests. We're using this value for exponential + // backoff when retrying requests. + int failedRequests = 0; +}; + +class DefaultFileSource::Impl { +public: + using Callback = std::function<void (Response)>; + + Impl(FileCache*, const std::string& = ""); + ~Impl(); + + void networkIsReachableAgain(); + + void add(Resource, FileRequest*, Callback); + void cancel(Resource, FileRequest*); + +private: + void update(DefaultFileRequestImpl&); + void startCacheRequest(DefaultFileRequestImpl&); + void startRealRequest(DefaultFileRequestImpl&); + void reschedule(DefaultFileRequestImpl&); + + std::unordered_map<Resource, std::unique_ptr<DefaultFileRequestImpl>, Resource::Hash> pending; + FileCache* const cache; + const std::string assetRoot; + const std::unique_ptr<AssetContextBase> assetContext; + const std::unique_ptr<HTTPContextBase> httpContext; + util::AsyncTask reachability; +}; + DefaultFileSource::DefaultFileSource(FileCache* cache, const std::string& root) : thread(std::make_unique<util::Thread<Impl>>( util::ThreadContext{ "FileSource", util::ThreadType::Unknown, util::ThreadPriority::Low }, diff --git a/src/mbgl/storage/default_file_source_impl.hpp b/src/mbgl/storage/default_file_source_impl.hpp deleted file mode 100644 index 9b5f97332a..0000000000 --- a/src/mbgl/storage/default_file_source_impl.hpp +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef MBGL_STORAGE_DEFAULT_DEFAULT_FILE_SOURCE_IMPL -#define MBGL_STORAGE_DEFAULT_DEFAULT_FILE_SOURCE_IMPL - -#include <mbgl/storage/default_file_source.hpp> -#include <mbgl/storage/asset_context_base.hpp> -#include <mbgl/storage/http_context_base.hpp> -#include <mbgl/util/async_task.hpp> -#include <mbgl/util/noncopyable.hpp> -#include <mbgl/util/chrono.hpp> -#include <mbgl/util/timer.hpp> - -#include <set> -#include <unordered_map> - -namespace mbgl { - -class RequestBase; - -class DefaultFileRequest : public FileRequest { -public: - DefaultFileRequest(const Resource& resource_, - DefaultFileSource& fileSource_) - : resource(resource_), - fileSource(fileSource_) { - } - - ~DefaultFileRequest() { - fileSource.cancel(resource, this); - } - - Resource resource; - DefaultFileSource& fileSource; - - std::unique_ptr<WorkRequest> workRequest; -}; - -class DefaultFileRequestImpl : public util::noncopyable { -public: - using Callback = std::function<void (Response)>; - - const Resource resource; - std::unique_ptr<WorkRequest> cacheRequest; - RequestBase* realRequest = nullptr; - std::unique_ptr<util::Timer> timerRequest; - - inline DefaultFileRequestImpl(const Resource& resource_) - : resource(resource_) {} - - ~DefaultFileRequestImpl(); - - // Observer accessors. - void addObserver(FileRequest*, Callback); - void removeObserver(FileRequest*); - bool hasObservers() const; - - // Updates/gets the response of this request object. - void setResponse(const std::shared_ptr<const Response>&); - const std::shared_ptr<const Response>& getResponse() const; - - // Returns the seconds we have to wait until we need to redo this request. A value of 0 - // means that we need to redo it immediately, and a negative value means that we're not setting - // a timeout at all. - Seconds getRetryTimeout() const; - - // Checks the currently stored response and replaces it with an idential one, except with the - // stale flag set, if the response is expired. - void checkResponseFreshness(); - - // Notifies all observers. - void notify(); - - -private: - // Stores a set of all observing Request objects. - std::unordered_map<FileRequest*, Callback> observers; - - // The current response data. We're storing it because we can satisfy requests for the same - // resource directly by returning this response object. We also need it to create conditional - // HTTP requests, and to check whether new responses we got changed any data. - std::shared_ptr<const Response> response; - - // Counts the number of subsequent failed requests. We're using this value for exponential - // backoff when retrying requests. - int failedRequests = 0; -}; - -class DefaultFileSource::Impl { -public: - using Callback = std::function<void (Response)>; - - Impl(FileCache*, const std::string& = ""); - ~Impl(); - - void networkIsReachableAgain(); - - void add(Resource, FileRequest*, Callback); - void cancel(Resource, FileRequest*); - -private: - void update(DefaultFileRequestImpl&); - void startCacheRequest(DefaultFileRequestImpl&); - void startRealRequest(DefaultFileRequestImpl&); - void reschedule(DefaultFileRequestImpl&); - - std::unordered_map<Resource, std::unique_ptr<DefaultFileRequestImpl>, Resource::Hash> pending; - FileCache* const cache; - const std::string assetRoot; - const std::unique_ptr<AssetContextBase> assetContext; - const std::unique_ptr<HTTPContextBase> httpContext; - util::AsyncTask reachability; -}; - -} // namespace mbgl - -#endif |