119e95205Sopenharmony_ci/* 219e95205Sopenharmony_ci * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 319e95205Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 419e95205Sopenharmony_ci * you may not use this file except in compliance with the License. 519e95205Sopenharmony_ci * You may obtain a copy of the License at 619e95205Sopenharmony_ci * 719e95205Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 819e95205Sopenharmony_ci * 919e95205Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1019e95205Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1119e95205Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1219e95205Sopenharmony_ci * See the License for the specific language governing permissions and 1319e95205Sopenharmony_ci * limitations under the License. 1419e95205Sopenharmony_ci */ 1519e95205Sopenharmony_ci 1619e95205Sopenharmony_ci#ifndef CONTEXT_H 1719e95205Sopenharmony_ci#define CONTEXT_H 1819e95205Sopenharmony_ci 1919e95205Sopenharmony_ci#include "base_def.h" 2019e95205Sopenharmony_ci#include "dispatcher.h" 2119e95205Sopenharmony_ci#include "message.h" 2219e95205Sopenharmony_ci 2319e95205Sopenharmony_cinamespace utility { 2419e95205Sopenharmony_ciclass IContextCallback { 2519e95205Sopenharmony_cipublic: 2619e95205Sopenharmony_ci /** 2719e95205Sopenharmony_ci * @brief A destructor used to delete the <b>IContextObserver</b> instance. 2819e95205Sopenharmony_ci * 2919e95205Sopenharmony_ci * @since 6 3019e95205Sopenharmony_ci */ 3119e95205Sopenharmony_ci virtual ~IContextCallback() = default; 3219e95205Sopenharmony_ci 3319e95205Sopenharmony_ci /** 3419e95205Sopenharmony_ci * @brief Enable complete notify 3519e95205Sopenharmony_ci * 3619e95205Sopenharmony_ci * @param name adapter name or profile name. 3719e95205Sopenharmony_ci * @param ret enable complete successful or failed. 3819e95205Sopenharmony_ci * @since 6 3919e95205Sopenharmony_ci */ 4019e95205Sopenharmony_ci virtual void OnEnable(const std::string &name, bool ret) = 0; 4119e95205Sopenharmony_ci 4219e95205Sopenharmony_ci /** 4319e95205Sopenharmony_ci * @brief Disable complete notify 4419e95205Sopenharmony_ci * 4519e95205Sopenharmony_ci * @param name adapter name or profile name. 4619e95205Sopenharmony_ci * @param ret disable complete successful or failed. 4719e95205Sopenharmony_ci * @since 6 4819e95205Sopenharmony_ci */ 4919e95205Sopenharmony_ci virtual void OnDisable(const std::string &name, bool ret) = 0; 5019e95205Sopenharmony_ci}; 5119e95205Sopenharmony_ci 5219e95205Sopenharmony_ciclass Context { 5319e95205Sopenharmony_cipublic: 5419e95205Sopenharmony_ci /** 5519e95205Sopenharmony_ci * @brief Construct a new Context object, Usually inherited by profile services, 5619e95205Sopenharmony_ci * to Construct it's own thread Context environment. 5719e95205Sopenharmony_ci * 5819e95205Sopenharmony_ci * @param name Context name. 5919e95205Sopenharmony_ci * @param version Context version. 6019e95205Sopenharmony_ci * @since 6 6119e95205Sopenharmony_ci */ 6219e95205Sopenharmony_ci Context(const std::string &name, const std::string &version) 6319e95205Sopenharmony_ci : name_(name), version_(version), dispatcher_(std::make_unique<Dispatcher>(name)) 6419e95205Sopenharmony_ci {} 6519e95205Sopenharmony_ci virtual ~Context() 6619e95205Sopenharmony_ci {} 6719e95205Sopenharmony_ci 6819e95205Sopenharmony_ci /** 6919e95205Sopenharmony_ci * @brief Enable. 7019e95205Sopenharmony_ci * @since 6 7119e95205Sopenharmony_ci */ 7219e95205Sopenharmony_ci virtual void Enable() = 0; 7319e95205Sopenharmony_ci 7419e95205Sopenharmony_ci /** 7519e95205Sopenharmony_ci * @brief Disable. 7619e95205Sopenharmony_ci * @since 6 7719e95205Sopenharmony_ci */ 7819e95205Sopenharmony_ci virtual void Disable() = 0; 7919e95205Sopenharmony_ci 8019e95205Sopenharmony_ci /** 8119e95205Sopenharmony_ci * @brief Post enable. 8219e95205Sopenharmony_ci * @since 6 8319e95205Sopenharmony_ci */ 8419e95205Sopenharmony_ci virtual void PostEnable() 8519e95205Sopenharmony_ci {} 8619e95205Sopenharmony_ci 8719e95205Sopenharmony_ci /** 8819e95205Sopenharmony_ci * @brief Enable complete callback notify. 8919e95205Sopenharmony_ci * @since 6 9019e95205Sopenharmony_ci */ 9119e95205Sopenharmony_ci virtual void OnEnable(const std::string &name, bool ret) 9219e95205Sopenharmony_ci { 9319e95205Sopenharmony_ci if (callback_) 9419e95205Sopenharmony_ci callback_->OnEnable(name, ret); 9519e95205Sopenharmony_ci } 9619e95205Sopenharmony_ci 9719e95205Sopenharmony_ci /** 9819e95205Sopenharmony_ci * @brief Disable complete callback notify. 9919e95205Sopenharmony_ci * @since 6 10019e95205Sopenharmony_ci */ 10119e95205Sopenharmony_ci virtual void OnDisable(const std::string &name, bool ret) 10219e95205Sopenharmony_ci { 10319e95205Sopenharmony_ci if (callback_) 10419e95205Sopenharmony_ci callback_->OnDisable(name, ret); 10519e95205Sopenharmony_ci } 10619e95205Sopenharmony_ci 10719e95205Sopenharmony_ci /** 10819e95205Sopenharmony_ci * @brief register callback function. 10919e95205Sopenharmony_ci * @param callback callback function. 11019e95205Sopenharmony_ci * @since 6 11119e95205Sopenharmony_ci */ 11219e95205Sopenharmony_ci void RegisterCallback(IContextCallback &callback) 11319e95205Sopenharmony_ci { 11419e95205Sopenharmony_ci callback_ = &callback; 11519e95205Sopenharmony_ci } 11619e95205Sopenharmony_ci 11719e95205Sopenharmony_ci /** 11819e95205Sopenharmony_ci * @brief Initialize the context 11919e95205Sopenharmony_ci * @since 6 12019e95205Sopenharmony_ci */ 12119e95205Sopenharmony_ci void Initialize() 12219e95205Sopenharmony_ci { 12319e95205Sopenharmony_ci dispatcher_->Initialize(); 12419e95205Sopenharmony_ci InitializeInternal(); 12519e95205Sopenharmony_ci } 12619e95205Sopenharmony_ci 12719e95205Sopenharmony_ci /** 12819e95205Sopenharmony_ci * @brief Uninitialize the context 12919e95205Sopenharmony_ci * @since 6 13019e95205Sopenharmony_ci */ 13119e95205Sopenharmony_ci void Uninitialize() 13219e95205Sopenharmony_ci { 13319e95205Sopenharmony_ci dispatcher_->Uninitialize(); 13419e95205Sopenharmony_ci UninitializeInternal(); 13519e95205Sopenharmony_ci } 13619e95205Sopenharmony_ci 13719e95205Sopenharmony_ci /** 13819e95205Sopenharmony_ci * @brief Get the Context's Dispatcher object 13919e95205Sopenharmony_ci * @return Dispatcher pointer. 14019e95205Sopenharmony_ci * @since 6 14119e95205Sopenharmony_ci */ 14219e95205Sopenharmony_ci Dispatcher *GetDispatcher() 14319e95205Sopenharmony_ci { 14419e95205Sopenharmony_ci return dispatcher_.get(); 14519e95205Sopenharmony_ci } 14619e95205Sopenharmony_ci 14719e95205Sopenharmony_ci /** 14819e95205Sopenharmony_ci * @brief Get Context's name. 14919e95205Sopenharmony_ci * @return Context's name. 15019e95205Sopenharmony_ci * @since 6 15119e95205Sopenharmony_ci */ 15219e95205Sopenharmony_ci const std::string &Name() const 15319e95205Sopenharmony_ci { 15419e95205Sopenharmony_ci return name_; 15519e95205Sopenharmony_ci } 15619e95205Sopenharmony_ci 15719e95205Sopenharmony_ci /** 15819e95205Sopenharmony_ci * @brief Get Context's version. 15919e95205Sopenharmony_ci * @return Context's version. 16019e95205Sopenharmony_ci * @since 6 16119e95205Sopenharmony_ci */ 16219e95205Sopenharmony_ci const std::string &Version() const 16319e95205Sopenharmony_ci { 16419e95205Sopenharmony_ci return version_; 16519e95205Sopenharmony_ci } 16619e95205Sopenharmony_ci 16719e95205Sopenharmony_ciprivate: 16819e95205Sopenharmony_ci /** 16919e95205Sopenharmony_ci * @brief Internal initialize function, called by Initialize 17019e95205Sopenharmony_ci * @since 6 17119e95205Sopenharmony_ci */ 17219e95205Sopenharmony_ci virtual void InitializeInternal() 17319e95205Sopenharmony_ci {} 17419e95205Sopenharmony_ci 17519e95205Sopenharmony_ci /** 17619e95205Sopenharmony_ci * @brief Internal uninitialize function, called by Uninitialize 17719e95205Sopenharmony_ci * @since 6 17819e95205Sopenharmony_ci */ 17919e95205Sopenharmony_ci virtual void UninitializeInternal() 18019e95205Sopenharmony_ci {} 18119e95205Sopenharmony_ci 18219e95205Sopenharmony_ci std::string name_ {""}; 18319e95205Sopenharmony_ci std::string version_ {}; 18419e95205Sopenharmony_ci std::unique_ptr<Dispatcher> dispatcher_ {}; 18519e95205Sopenharmony_ci IContextCallback *callback_ = nullptr; 18619e95205Sopenharmony_ci BT_DISALLOW_COPY_AND_ASSIGN(Context); 18719e95205Sopenharmony_ci}; 18819e95205Sopenharmony_ci} // namespace utility 18919e95205Sopenharmony_ci 19019e95205Sopenharmony_ci#endif // CONTEXT_H