1e0e9324cSopenharmony_ci/* 2e0e9324cSopenharmony_ci * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3e0e9324cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0e9324cSopenharmony_ci * you may not use this file except in compliance with the License. 5e0e9324cSopenharmony_ci * You may obtain a copy of the License at 6e0e9324cSopenharmony_ci * 7e0e9324cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0e9324cSopenharmony_ci * 9e0e9324cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0e9324cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0e9324cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0e9324cSopenharmony_ci * See the License for the specific language governing permissions and 13e0e9324cSopenharmony_ci * limitations under the License. 14e0e9324cSopenharmony_ci */ 15e0e9324cSopenharmony_ci 16e0e9324cSopenharmony_ci#ifndef OHOS_SHARING_CONFIG_H 17e0e9324cSopenharmony_ci#define OHOS_SHARING_CONFIG_H 18e0e9324cSopenharmony_ci 19e0e9324cSopenharmony_ci#include <shared_mutex> 20e0e9324cSopenharmony_ci#include <singleton.h> 21e0e9324cSopenharmony_ci#include <string> 22e0e9324cSopenharmony_ci#include "event/event_base.h" 23e0e9324cSopenharmony_ci#include "sharing_data.h" 24e0e9324cSopenharmony_ci 25e0e9324cSopenharmony_cinamespace OHOS { 26e0e9324cSopenharmony_cinamespace Sharing { 27e0e9324cSopenharmony_ci 28e0e9324cSopenharmony_cienum class ConfigStatus { 29e0e9324cSopenharmony_ci CONFIG_STATUS_INVALID, 30e0e9324cSopenharmony_ci CONFIG_STATUS_INITED, 31e0e9324cSopenharmony_ci CONFIG_STATUS_READING, 32e0e9324cSopenharmony_ci CONFIG_STATUS_WRITING, 33e0e9324cSopenharmony_ci CONFIG_STATUS_READY 34e0e9324cSopenharmony_ci}; 35e0e9324cSopenharmony_ci 36e0e9324cSopenharmony_cistruct ConfigEventMsg : EventMsg { 37e0e9324cSopenharmony_ci ConfigEventMsg(const ConfigStatus status, const ModuleType toMudule) 38e0e9324cSopenharmony_ci { 39e0e9324cSopenharmony_ci this->status = status; 40e0e9324cSopenharmony_ci this->toMgr = toMudule; 41e0e9324cSopenharmony_ci this->fromMgr = ModuleType::MODULE_CONFIGURE; 42e0e9324cSopenharmony_ci this->data = nullptr; 43e0e9324cSopenharmony_ci } 44e0e9324cSopenharmony_ci 45e0e9324cSopenharmony_ci ConfigEventMsg(const SharingDataGroupByModule::Ptr &data, const ModuleType toMudule) 46e0e9324cSopenharmony_ci { 47e0e9324cSopenharmony_ci this->status = ConfigStatus::CONFIG_STATUS_READY; 48e0e9324cSopenharmony_ci this->data = data; 49e0e9324cSopenharmony_ci this->fromMgr = ModuleType::MODULE_CONFIGURE; 50e0e9324cSopenharmony_ci this->toMgr = toMudule; 51e0e9324cSopenharmony_ci } 52e0e9324cSopenharmony_ci 53e0e9324cSopenharmony_ci ConfigStatus status; 54e0e9324cSopenharmony_ci SharingDataGroupByModule::Ptr data; 55e0e9324cSopenharmony_ci}; 56e0e9324cSopenharmony_ci 57e0e9324cSopenharmony_ciclass Config : public Singleton<Config> { 58e0e9324cSopenharmony_cipublic: 59e0e9324cSopenharmony_ci Config() = default; 60e0e9324cSopenharmony_ci ~Config() = default; 61e0e9324cSopenharmony_ci 62e0e9324cSopenharmony_ci void Init(void); 63e0e9324cSopenharmony_ci int32_t GetConfig(SharingData::Ptr &datas); 64e0e9324cSopenharmony_ci int32_t GetConfig(const std::string &module, SharingDataGroupByModule::Ptr &values); 65e0e9324cSopenharmony_ci int32_t GetConfig(const std::string &module, const std::string &tag, SharingDataGroupByTag::Ptr &values); 66e0e9324cSopenharmony_ci int32_t GetConfig(const std::string &module, const std::string &tag, const std::string &key, 67e0e9324cSopenharmony_ci SharingValue::Ptr &value); 68e0e9324cSopenharmony_ci 69e0e9324cSopenharmony_ci int32_t SetConfig(const SharingData::Ptr &datas); 70e0e9324cSopenharmony_ci int32_t SetConfig(const std::string &module, const SharingDataGroupByModule::Ptr &values); 71e0e9324cSopenharmony_ci int32_t SetConfig(const std::string &module, const std::string &tag, const SharingDataGroupByTag::Ptr &values); 72e0e9324cSopenharmony_ci int32_t SetConfig(const std::string &module, const std::string &tag, const std::string &key, 73e0e9324cSopenharmony_ci const SharingValue::Ptr &value); 74e0e9324cSopenharmony_ci 75e0e9324cSopenharmony_ciprivate: 76e0e9324cSopenharmony_ci bool ReadConfig(void); 77e0e9324cSopenharmony_ci bool SaveConfig(void); 78e0e9324cSopenharmony_ci void EmitEvent(const EventType type, const ModuleType toModule, const SharingDataGroupByModule::Ptr &data); 79e0e9324cSopenharmony_ci void EmitEvent(const ConfigStatus type = ConfigStatus::CONFIG_STATUS_READY, 80e0e9324cSopenharmony_ci const ModuleType toModule = ModuleType::MODULE_DATACENTER); 81e0e9324cSopenharmony_ci 82e0e9324cSopenharmony_ciprivate: 83e0e9324cSopenharmony_ci std::shared_mutex mutex_; 84e0e9324cSopenharmony_ci std::string fileName_ = "/etc/sharing_config.json"; 85e0e9324cSopenharmony_ci 86e0e9324cSopenharmony_ci EventEmitter emiter_; 87e0e9324cSopenharmony_ci SharingData::Ptr datas_ = std::make_shared<SharingData>(); 88e0e9324cSopenharmony_ci ConfigStatus status_ = ConfigStatus::CONFIG_STATUS_INVALID; 89e0e9324cSopenharmony_ci}; 90e0e9324cSopenharmony_ci 91e0e9324cSopenharmony_ci} // namespace Sharing 92e0e9324cSopenharmony_ci} // namespace OHOS 93e0e9324cSopenharmony_ci#endif