// 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_SRC_PRIVET_PRIVET_MANAGER_H_ #define LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_ #include <memory> #include <set> #include <string> #include <vector> #include <base/memory/weak_ptr.h> #include <base/scoped_observer.h> #include <weave/device.h> #include "src/privet/cloud_delegate.h" #include "src/privet/security_manager.h" #include "src/privet/wifi_bootstrap_manager.h" namespace libwebserv { class ProtocolHandler; class Request; class Response; class Server; } namespace weave { class ComponentManager; class DeviceRegistrationInfo; class DnsServiceDiscovery; class Network; namespace privet { class CloudDelegate; class DaemonState; class DeviceDelegate; class PrivetHandler; class Publisher; class SecurityManager; class Manager : public CloudDelegate::Observer { public: explicit Manager(provider::TaskRunner* task_runner); ~Manager() override; void Start(provider::Network* network, provider::DnsServiceDiscovery* dns_sd, provider::HttpServer* http_server, provider::Wifi* wifi, AuthManager* auth_manager, DeviceRegistrationInfo* device, ComponentManager* component_manager); std::string GetCurrentlyConnectedSsid() const; void AddOnPairingChangedCallbacks( const Device::PairingBeginCallback& begin_callback, const Device::PairingEndCallback& end_callback); private: // CloudDelegate::Observer void OnDeviceInfoChanged() override; void PrivetRequestHandler( std::unique_ptr<provider::HttpServer::Request> request); void PrivetRequestHandlerWithData( const std::shared_ptr<provider::HttpServer::Request>& request, const std::string& data); void PrivetResponseHandler( const std::shared_ptr<provider::HttpServer::Request>& request, int status, const base::DictionaryValue& output); void OnChanged(); void OnConnectivityChanged(); provider::TaskRunner* task_runner_{nullptr}; std::unique_ptr<CloudDelegate> cloud_; std::unique_ptr<DeviceDelegate> device_; std::unique_ptr<SecurityManager> security_; std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_; std::unique_ptr<Publisher> publisher_; std::unique_ptr<PrivetHandler> privet_handler_; ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this}; base::WeakPtrFactory<Manager> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(Manager); }; } // namespace privet } // namespace weave #endif // LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_