1 #pragma once
2 
3 #include <atomic>
4 #include <mutex>
5 #include <unordered_set>
6 
7 namespace mbgl {
8 
9 namespace util {
10 class AsyncTask;
11 } // namespace util
12 
13 class NetworkStatus {
14 public:
15     enum class Status : uint8_t {
16         Online,
17         Offline,
18     };
19 
20     static Status Get();
21     static void Set(Status);
22 
23     static void Reachable();
24 
25     static void Subscribe(util::AsyncTask* async);
26     static void Unsubscribe(util::AsyncTask* async);
27 
28 private:
29     static std::atomic<bool> online;
30     static std::mutex mtx;
31     static std::unordered_set<util::AsyncTask*> observers;
32 };
33 
34 } // namespace mbgl
35