1 /* 2 * Copyright (c) 2022 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 FLAT_OBJECT_STORE_H 17 #define FLAT_OBJECT_STORE_H 18 19 #include "bytes.h" 20 #include "flat_object_storage_engine.h" 21 #include "distributed_object.h" 22 23 namespace OHOS::ObjectStore { 24 class FlatObjectWatcher : public TableWatcher { 25 public: FlatObjectWatcher(const std::string & sessionId)26 FlatObjectWatcher(const std::string &sessionId) : TableWatcher(sessionId) 27 { 28 } 29 virtual void OnChanged( 30 const std::string &sessionId, const std::vector<std::string> &changedData, bool enableTransfer) = 0; 31 }; 32 33 class CacheManager { 34 public: 35 CacheManager(); 36 uint32_t Save(const std::string &bundleName, const std::string &sessionId, const std::string &deviceId, 37 const std::map<std::string, std::vector<uint8_t>> &objectData); 38 uint32_t RevokeSave(const std::string &bundleName, const std::string &sessionId); 39 int32_t ResumeObject(const std::string &bundleName, const std::string &sessionId, 40 std::function<void(const std::map<std::string, std::vector<uint8_t>> &data, bool allReady)> &callback); 41 int32_t SubscribeDataChange(const std::string &bundleName, const std::string &sessionId, 42 std::function<void(const std::map<std::string, std::vector<uint8_t>> &data, bool allReady)> &callback); 43 int32_t UnregisterDataChange(const std::string &bundleName, const std::string &sessionId); 44 int32_t SubscribeProgressChange( 45 const std::string &bundleName, const std::string &sessionId, std::function<void(int32_t progress)> &callback); 46 int32_t UnregisterProgressChange(const std::string &bundleName, const std::string &sessionId); 47 int32_t DeleteSnapshot(const std::string &bundleName, const std::string &sessionId); 48 bool IsContinue(); 49 private: 50 int32_t SaveObject(const std::string &bundleName, const std::string &sessionId, 51 const std::string &deviceId, const std::map<std::string, std::vector<uint8_t>> &objectData, 52 const std::function<void(const std::map<std::string, int32_t> &)> &callback); 53 int32_t RevokeSaveObject( 54 const std::string &bundleName, const std::string &sessionId, const std::function<void(int32_t)> &callback); 55 std::mutex mutex_; 56 static constexpr uint32_t WAIT_TIME = 5; 57 }; 58 59 class FlatObjectStore { 60 public: 61 explicit FlatObjectStore(const std::string &bundleName); 62 ~FlatObjectStore(); 63 std::string GetBundleName(); 64 uint32_t CreateObject(const std::string &sessionId); 65 void ResumeObject(const std::string &sessionId); 66 void SubscribeDataChange(const std::string &sessionId); 67 void SubscribeProgressChange(const std::string &sessionId); 68 uint32_t Delete(const std::string &objectId); 69 uint32_t Watch(const std::string &objectId, std::shared_ptr<FlatObjectWatcher> watcher); 70 uint32_t UnWatch(const std::string &objectId); 71 uint32_t SetStatusNotifier(std::shared_ptr<StatusWatcher> sharedPtr); 72 uint32_t SetProgressNotifier(std::shared_ptr<ProgressWatcher> sharedPtr); 73 uint32_t Save(const std::string &sessionId, const std::string &deviceId); 74 uint32_t RevokeSave(const std::string &sessionId); 75 void CheckRetrieveCache(const std::string &sessionId); 76 void CheckProgressCache(const std::string &sessionId); 77 void FilterData(const std::string &sessionId, std::map<std::string, std::vector<uint8_t>> &data); 78 uint32_t PutDouble(const std::string &sessionId, const std::string &key, double value); 79 uint32_t PutBoolean(const std::string &sessionId, const std::string &key, bool value); 80 uint32_t PutString(const std::string &sessionId, const std::string &key, const std::string &value); 81 uint32_t PutComplex(const std::string &sessionId, const std::string &key, const std::vector<uint8_t> &value); 82 uint32_t GetDouble(const std::string &sessionId, const std::string &key, double &value); 83 uint32_t GetBoolean(const std::string &sessionId, const std::string &key, bool &value); 84 uint32_t GetString(const std::string &sessionId, const std::string &key, std::string &value); 85 uint32_t GetComplex(const std::string &sessionId, const std::string &key, std::vector<uint8_t> &value); 86 uint32_t GetType(const std::string &sessionId, const std::string &key, Type &type); 87 uint32_t BindAssetStore(const std::string &sessionId, AssetBindInfo &bindInfo, Asset &assetValue); 88 private: 89 uint32_t Put(const std::string &sessionId, const std::string &key, std::vector<uint8_t> value); 90 uint32_t Get(const std::string &sessionId, const std::string &key, Bytes &value); 91 92 static constexpr const char* DISTRIBUTED_DATASYNC = "ohos.permission.DISTRIBUTED_DATASYNC"; 93 std::shared_ptr<FlatObjectStorageEngine> storageEngine_; 94 CacheManager *cacheManager_ = nullptr; 95 std::mutex mutex_; 96 std::mutex progressInfoMutex_; 97 std::vector<std::string> retrievedCache_ {}; 98 std::map<std::string, int32_t> progressInfoCache_; 99 std::string bundleName_; 100 }; 101 } // namespace OHOS::ObjectStore 102 103 #endif // FLAT_OBJECT_STORE_H 104