[core] Add client defined network status

This API will let the client force a network status. If set
to Offline, we won't make network requests.

When set make to Online, it will trigger the pending requests
and try to fetch tiles from the network.
This commit is contained in:
Thiago Marcos P. Santos
2016-03-07 21:50:24 -03:00
parent 20c3706536
commit fa7c40c37f
2 changed files with 32 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
#ifndef MBGL_STORAGE_NETWORK_STATUS
#define MBGL_STORAGE_NETWORK_STATUS
#include <atomic>
#include <mutex>
#include <set>
@@ -12,12 +13,21 @@ class AsyncTask;
class NetworkStatus {
public:
enum class Status : uint8_t {
Online,
Offline,
};
Status Get();
void Set(Status);
static void Reachable();
static void Subscribe(util::AsyncTask* async);
static void Unsubscribe(util::AsyncTask* async);
private:
static std::atomic<bool> online;
static std::mutex mtx;
static std::set<util::AsyncTask*> observers;
};

View File

@@ -9,9 +9,27 @@
namespace mbgl {
std::atomic<bool> NetworkStatus::online(true);
std::mutex NetworkStatus::mtx;
std::set<util::AsyncTask *> NetworkStatus::observers;
NetworkStatus::Status NetworkStatus::Get() {
if (online) {
return Status::Online;
} else {
return Status::Offline;
}
}
void NetworkStatus::Set(Status status) {
if (status == Status::Online) {
online = true;
Reachable();
} else {
online = false;
}
}
void NetworkStatus::Subscribe(util::AsyncTask *async) {
std::lock_guard<std::mutex> lock(NetworkStatus::mtx);
observers.insert(async);
@@ -23,6 +41,10 @@ void NetworkStatus::Unsubscribe(util::AsyncTask *async) {
}
void NetworkStatus::Reachable() {
if (!online) {
return;
}
std::lock_guard<std::mutex> lock(NetworkStatus::mtx);
for (auto async : observers) {
async->send();