#ifndef MBGL_STORAGE_DEFAULT_REQUEST #define MBGL_STORAGE_DEFAULT_REQUEST #include #include #include #include #include #include #include typedef struct uv_async_s uv_async_t; typedef struct uv_loop_s uv_loop_t; namespace mbgl { class Response; class Environment; class Request : private util::noncopyable { MBGL_STORE_THREAD(tid) public: using Callback = std::function; Request(const Resource &resource, uv_loop_t *loop, const Environment &env, Callback callback); public: // May be called from any thread. void notify(const std::shared_ptr &response); void destruct(); // May be called only from the thread the Request was created in. void cancel(); private: ~Request(); void invoke(); void notifyCallback(); private: uv_async_t *async = nullptr; struct Canceled; std::unique_ptr canceled; Callback callback; std::shared_ptr response; public: const Resource resource; // The environment ref is used to associate requests with a particular environment. This allows // us to only terminate requests associated with that environment, e.g. when the map the env // belongs to is discarded. const Environment &env; }; } #endif