• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &param, 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 &notifier) = 0;
124 
125     virtual void SetStoreStatusNotifier(const StoreStatusNotifierV2 &notifier) = 0;
126 
127     virtual void NotifyDatabaseStatusChange(const StoreStatusNotifierParam &param, 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