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