1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef RUNTIME_CONTEXT_H 17 #define RUNTIME_CONTEXT_H 18 19 #include <cstdint> 20 #include <functional> 21 #include <string> 22 23 #include "auto_launch.h" 24 #include "auto_launch_export.h" 25 #include "cloud/assets_download_manager.h" 26 #include "cloud/icloud_data_translate.h" 27 #include "db_info_handle.h" 28 #include "icommunicator_aggregator.h" 29 #include "iprocess_system_api_adapter.h" 30 #include "ithread_pool.h" 31 #include "kv_store_observer.h" 32 #include "kvdb_properties.h" 33 #include "macro_utils.h" 34 #include "notification_chain.h" 35 #include "query_sync_object.h" 36 #include "types_export.h" 37 38 namespace DistributedDB { 39 using TimerId = uint64_t; 40 using TimerAction = std::function<int(TimerId timerId)>; 41 using TimerFinalizer = std::function<void(void)>; 42 using TaskAction = std::function<void(void)>; 43 using TimeChangedAction = std::function<void(void *)>; 44 using TimeFinalizeAction = std::function<void(void)>; 45 using LockStatusNotifier = std::function<void(void *isLocked)>; 46 using UserChangedAction = std::function<void(void *)>; 47 48 class RuntimeContext { 49 public: 50 DISABLE_COPY_ASSIGN_MOVE(RuntimeContext); 51 52 // Global setting interfaces. 53 virtual void SetProcessLabel(const std::string &label) = 0; 54 virtual std::string GetProcessLabel() const = 0; 55 56 // If the pre adapter is not nullptr, set new adapter will release the pre adapter, 57 // must be called after SetCommunicatorAggregator 58 virtual int SetCommunicatorAdapter(IAdapter *adapter) = 0; 59 virtual int GetCommunicatorAggregator(ICommunicatorAggregator *&outAggregator) = 0; 60 virtual void SetCommunicatorAggregator(ICommunicatorAggregator *inAggregator) = 0; 61 virtual int GetLocalIdentity(std::string &outTarget) = 0; 62 63 // Timer interfaces. 64 virtual int SetTimer(int milliSeconds, const TimerAction &action, 65 const TimerFinalizer &finalizer, TimerId &timerId) = 0; 66 virtual int ModifyTimer(TimerId timerId, int milliSeconds) = 0; 67 virtual void RemoveTimer(TimerId timerId, bool wait = false) = 0; 68 69 // Task interfaces. 70 virtual int ScheduleTask(const TaskAction &task) = 0; 71 virtual int ScheduleQueuedTask(const std::string &queueTag, 72 const TaskAction &task) = 0; 73 74 // Shrink as much memory as possible. 75 virtual void ShrinkMemory(const std::string &description) = 0; 76 77 // Register a time changed lister, it will be callback when local time changed. 78 virtual NotificationChain::Listener *RegisterTimeChangedLister(const TimeChangedAction &action, 79 const TimeFinalizeAction &finalize, int &errCode) = 0; 80 81 // Get the global context object(singleton), never return nullptr. 82 static RuntimeContext *GetInstance(); 83 84 virtual int SetPermissionCheckCallback(const PermissionCheckCallback &callback) = 0; 85 86 virtual int SetPermissionCheckCallback(const PermissionCheckCallbackV2 &callback) = 0; 87 88 virtual int SetPermissionCheckCallback(const PermissionCheckCallbackV3 &callback) = 0; 89 90 virtual int SetPermissionCheckCallback(const PermissionCheckCallbackV4 &callback) = 0; 91 92 virtual int RunPermissionCheck(const PermissionCheckParam ¶m, uint8_t flag) const = 0; 93 94 virtual int EnableKvStoreAutoLaunch(const KvDBProperties &properties, AutoLaunchNotifier notifier, 95 const AutoLaunchOption &option) = 0; 96 97 virtual int DisableKvStoreAutoLaunch(const std::string &normalIdentifier, const std::string &dualTupleIdentifier, 98 const std::string &userId) = 0; 99 100 virtual void GetAutoLaunchSyncDevices(const std::string &identifier, std::vector<std::string> &devices) const = 0; 101 102 virtual void SetAutoLaunchRequestCallback(const AutoLaunchRequestCallback &callback, DBTypeInner type) = 0; 103 104 virtual NotificationChain::Listener *RegisterLockStatusLister(const LockStatusNotifier &action, int &errCode) = 0; 105 106 virtual bool IsAccessControlled() const = 0; 107 108 virtual int SetSecurityOption(const std::string &filePath, const SecurityOption &option) const = 0; 109 110 virtual int GetSecurityOption(const std::string &filePath, SecurityOption &option) const = 0; 111 112 virtual bool CheckDeviceSecurityAbility(const std::string &devId, const SecurityOption &option) const = 0; 113 114 virtual int SetProcessSystemApiAdapter(const std::shared_ptr<IProcessSystemApiAdapter> &adapter) = 0; 115 116 virtual bool IsProcessSystemApiAdapterValid() const = 0; 117 118 virtual bool IsCommunicatorAggregatorValid() const = 0; 119 120 // Notify TIME_CHANGE_EVENT. 121 virtual void NotifyTimestampChanged(TimeOffset offset) const = 0; 122 123 virtual void SetStoreStatusNotifier(const StoreStatusNotifier ¬ifier) = 0; 124 125 virtual void SetStoreStatusNotifier(const StoreStatusNotifierV2 ¬ifier) = 0; 126 127 virtual void NotifyDatabaseStatusChange(const StoreStatusNotifierParam ¶m, bool onlineStatus) = 0; 128 129 virtual int SetSyncActivationCheckCallback(const SyncActivationCheckCallback &callback) = 0; 130 131 virtual int SetSyncActivationCheckCallback(const SyncActivationCheckCallbackV2 &callback) = 0; 132 133 virtual bool IsSyncerNeedActive(const DBProperties &properties) const = 0; 134 135 virtual NotificationChain::Listener *RegisterUserChangedListener(const UserChangedAction &action, 136 EventType event) = 0; 137 138 virtual int NotifyUserChanged() const = 0; 139 140 // Generate global sessionId in current process 141 virtual uint32_t GenerateSessionId() = 0; 142 143 virtual void DumpCommonInfo(int fd) = 0; 144 145 virtual void CloseAutoLaunchConnection(DBTypeInner type, const DBProperties &properties) = 0; 146 147 virtual int SetPermissionConditionCallback(const PermissionConditionCallback &callback) = 0; 148 149 virtual std::map<std::string, std::string> GetPermissionCheckParam(const DBProperties &properties) = 0; 150 151 virtual void StopTaskPool() = 0; 152 153 virtual void StopTimeTickMonitorIfNeed() = 0; 154 155 virtual void SetDBInfoHandle(const std::shared_ptr<DBInfoHandle> &handle) = 0; 156 157 virtual void NotifyDBInfos(const DeviceInfos &devInfos, const std::vector<DBInfo> &dbInfos) = 0; 158 159 virtual void RecordRemoteSubscribe(const DBInfo &dbInfo, const DeviceID &deviceId, 160 const QuerySyncObject &query) = 0; 161 162 virtual void RemoveRemoteSubscribe(const DeviceID &deviceId) = 0; 163 164 virtual void RemoveRemoteSubscribe(const DBInfo &dbInfo) = 0; 165 166 virtual void RemoveRemoteSubscribe(const DBInfo &dbInfo, const DeviceID &deviceId) = 0; 167 168 virtual void RemoveRemoteSubscribe(const DBInfo &dbInfo, const DeviceID &deviceId, 169 const QuerySyncObject &query) = 0; 170 171 virtual void GetSubscribeQuery(const DBInfo &dbInfo, 172 std::map<std::string, std::vector<QuerySyncObject>> &subscribeQuery) = 0; 173 174 virtual bool IsNeedAutoSync(const std::string &userId, const std::string &appId, const std::string &storeId, 175 const std::string &devInfo) = 0; 176 177 virtual void SetRemoteOptimizeCommunication(const std::string &dev, bool optimize) = 0; 178 179 virtual void SetTranslateToDeviceIdCallback(const TranslateToDeviceIdCallback &callback) = 0; 180 181 virtual int TranslateDeviceId(const std::string &deviceId, 182 const StoreInfo &info, std::string &newDeviceId) = 0; 183 184 virtual bool ExistTranslateDevIdCallback() const = 0; 185 186 virtual void SetThreadPool(const std::shared_ptr<IThreadPool> &threadPool) = 0; 187 188 virtual std::shared_ptr<IThreadPool> GetThreadPool() const = 0; 189 190 virtual void SetCloudTranslate(const std::shared_ptr<ICloudDataTranslate> &dataTranslate) = 0; 191 virtual int AssetToBlob(const Asset &asset, std::vector<uint8_t> &blob) = 0; 192 virtual int AssetsToBlob(const Assets &assets, std::vector<uint8_t> &blob) = 0; 193 virtual int BlobToAsset(const std::vector<uint8_t> &blob, Asset &asset) = 0; 194 virtual int BlobToAssets(const std::vector<uint8_t> &blob, Assets &assets) = 0; 195 196 virtual std::pair<int, DeviceTimeInfo> GetDeviceTimeInfo(const std::string &device) const = 0; 197 virtual void SetDeviceTimeInfo(const std::string &device, const DeviceTimeInfo &deviceTimeInfo) = 0; 198 virtual void ClearDeviceTimeInfo(const std::string &device) = 0; 199 virtual void ClearAllDeviceTimeInfo() = 0; 200 virtual void RecordAllTimeChange() = 0; 201 virtual void ResetDBTimeChangeStatus(const std::vector<uint8_t> &dbId) = 0; 202 virtual bool CheckDBTimeChange(const std::vector<uint8_t> &dbId) = 0; 203 virtual bool IsTimeTickMonitorValid() const = 0; 204 virtual bool IsTimeChanged() const = 0; 205 virtual void SetTimeChanged(bool timeChange) = 0; 206 207 virtual bool IsBatchDownloadAssets() const = 0; 208 virtual void SetBatchDownloadAssets(bool isBatchDownload) = 0; 209 210 virtual std::shared_ptr<AssetsDownloadManager> GetAssetsDownloadManager() = 0; 211 212 virtual void ClearOnlineLabel() = 0; 213 protected: 214 RuntimeContext() = default; ~RuntimeContext()215 virtual ~RuntimeContext() {} 216 }; 217 } // namespace DistributedDB 218 219 #endif // RUNTIME_CONTEXT_H 220