1 // 2 // Copyright (C) 2015 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #ifndef UPDATE_ENGINE_WEAVE_SERVICE_H_ 18 #define UPDATE_ENGINE_WEAVE_SERVICE_H_ 19 20 #include <memory> 21 #include <string> 22 23 #include <base/memory/weak_ptr.h> 24 #include <libweaved/command.h> 25 #include <libweaved/service.h> 26 27 #include "update_engine/weave_service_interface.h" 28 29 namespace chromeos_update_engine { 30 31 class WeaveService : public WeaveServiceInterface { 32 public: 33 WeaveService() = default; 34 ~WeaveService() override = default; 35 36 bool Init(DelegateInterface* delegate); 37 38 // ServiceObserverInterface overrides. 39 void SendStatusUpdate(int64_t last_checked_time, 40 double progress, 41 update_engine::UpdateStatus status, 42 const std::string& new_version, 43 int64_t new_size) override; 44 void SendChannelChangeUpdate(const std::string& tracking_channel) override; SendPayloadApplicationComplete(ErrorCode error_code)45 void SendPayloadApplicationComplete(ErrorCode error_code) override {} 46 47 private: 48 // Force a weave update. 49 void UpdateWeaveState(); 50 51 void OnWeaveServiceConnected(const std::weak_ptr<weaved::Service>& service); 52 53 // Weave command handlers. These are called from the message loop whenever a 54 // command is received and dispatch the synchronous call to the |delegate_|. 55 void OnCheckForUpdates(std::unique_ptr<weaved::Command> cmd); 56 void OnTrackChannel(std::unique_ptr<weaved::Command> cmd); 57 58 WeaveServiceInterface::DelegateInterface* delegate_{nullptr}; 59 60 std::unique_ptr<weaved::Service::Subscription> weave_service_subscription_; 61 std::weak_ptr<weaved::Service> weave_service_; 62 }; 63 64 } // namespace chromeos_update_engine 65 66 #endif // UPDATE_ENGINE_WEAVE_SERVICE_H_ 67