#ifndef MBGL_STORAGE_DEFAULT_DEFAULT_FILE_SOURCE #define MBGL_STORAGE_DEFAULT_DEFAULT_FILE_SOURCE #include #include #include #include #include namespace mapbox { namespace util { template class variant; } } namespace mbgl { namespace util { template class AsyncQueue; } class SharedRequestBase; class DefaultFileSource : public FileSource { public: DefaultFileSource(FileCache *cache); DefaultFileSource(FileCache *cache, uv_loop_t *loop); ~DefaultFileSource(); Request *request(const Resource &resource, uv_loop_t *loop, Callback callback); void cancel(Request *request); void request(const Resource &resource, Callback callback); enum class CacheHint : uint8_t { Full, Refresh, No }; void notify(SharedRequestBase *sharedRequest, const std::set &observers, std::shared_ptr response, FileCache::Hint hint); private: struct ActionDispatcher; struct AddRequestAction; struct RemoveRequestAction; struct ResultAction; struct StopAction; using Action = mapbox::util::variant; using Queue = util::AsyncQueue; void process(AddRequestAction &action); void process(RemoveRequestAction &action); void process(ResultAction &action); void process(StopAction &action); SharedRequestBase *find(const Resource &resource); std::unordered_map pending; uv_loop_t *loop = nullptr; FileCache *cache = nullptr; Queue *queue = nullptr; std::thread thread; }; } #endif