57 lines
1.6 KiB
C++
57 lines
1.6 KiB
C++
// Copyright 2015 The Weave Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef LIBWEAVE_EXAMPLES_UBUNTU_EVENT_NETWORK_H_
|
|
#define LIBWEAVE_EXAMPLES_UBUNTU_EVENT_NETWORK_H_
|
|
|
|
#include <weave/provider/network.h>
|
|
|
|
#include <base/memory/weak_ptr.h>
|
|
|
|
struct evdns_base;
|
|
struct bufferevent;
|
|
|
|
namespace weave {
|
|
namespace examples {
|
|
|
|
class EventTaskRunner;
|
|
|
|
class EventNetworkImpl : public weave::provider::Network {
|
|
class Deleter {
|
|
public:
|
|
void operator()(evdns_base* dns_base);
|
|
void operator()(bufferevent* bev);
|
|
};
|
|
|
|
public:
|
|
explicit EventNetworkImpl(EventTaskRunner* task_runner_);
|
|
void AddConnectionChangedCallback(
|
|
const ConnectionChangedCallback& callback) override;
|
|
State GetConnectionState() const override;
|
|
void OpenSslSocket(const std::string& host,
|
|
uint16_t port,
|
|
const OpenSslSocketCallback& callback) override;
|
|
|
|
void SetSimulateOffline(bool value) {
|
|
simulate_offline_ = value;
|
|
UpdateNetworkState();
|
|
}
|
|
|
|
private:
|
|
void UpdateNetworkState();
|
|
void UpdateNetworkStateCallback(provider::Network::State state);
|
|
bool simulate_offline_{false};
|
|
EventTaskRunner* task_runner_{nullptr};
|
|
std::unique_ptr<evdns_base, Deleter> dns_base_;
|
|
std::vector<ConnectionChangedCallback> callbacks_;
|
|
provider::Network::State network_state_{provider::Network::State::kOffline};
|
|
std::unique_ptr<bufferevent, Deleter> connectivity_probe_;
|
|
|
|
base::WeakPtrFactory<EventNetworkImpl> weak_ptr_factory_{this};
|
|
};
|
|
|
|
} // namespace examples
|
|
} // namespace weave
|
|
|
|
#endif // LIBWEAVE_EXAMPLES_UBUNTU_EVENT_NETWORK_H_
|