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 DISTRIBUTED_RDB_RDB_SERVICE_PROXY_H 17 #define DISTRIBUTED_RDB_RDB_SERVICE_PROXY_H 18 19 #include <iremote_proxy.h> 20 21 #include <atomic> 22 #include <list> 23 24 #include "concurrent_map.h" 25 #include "irdb_service.h" 26 #include "rdb_notifier_stub.h" 27 28 namespace OHOS::DistributedRdb { 29 class RdbServiceProxy : public IRemoteProxy<IRdbService> { 30 public: 31 struct ObserverParam { 32 RdbStoreObserver *observer = nullptr; 33 std::string bundleName; 34 SubscribeOption subscribeOption{ SubscribeMode::REMOTE }; 35 }; 36 using Observers = ConcurrentMap<std::string, std::list<ObserverParam>>; 37 struct SyncObserverParam { 38 std::shared_ptr<DetailProgressObserver> syncObserver = nullptr; 39 std::string bundleName; 40 }; 41 using SyncObservers = ConcurrentMap<std::string, std::list<SyncObserverParam>>; 42 explicit RdbServiceProxy(const sptr<IRemoteObject> &object); 43 44 std::string ObtainDistributedTableName(const std::string &device, const std::string &table) override; 45 46 int32_t InitNotifier(const RdbSyncerParam ¶m); 47 48 int32_t InitNotifier(const RdbSyncerParam ¶m, sptr<IRemoteObject> notifier) override; 49 50 int32_t SetDistributedTables(const RdbSyncerParam ¶m, const std::vector<std::string> &tables, 51 const std::vector<Reference> &references, bool isRebuild, int32_t type = DISTRIBUTED_DEVICE) override; 52 53 int32_t Sync(const RdbSyncerParam ¶m, const Option &option, const PredicatesMemo &predicates, 54 const AsyncDetail &async) override; 55 56 int32_t Subscribe(const RdbSyncerParam ¶m, const SubscribeOption &option, RdbStoreObserver *observer) override; 57 58 int32_t UnSubscribe( 59 const RdbSyncerParam ¶m, const SubscribeOption &option, RdbStoreObserver *observer) override; 60 61 int32_t RegisterAutoSyncCallback( 62 const RdbSyncerParam ¶m, std::shared_ptr<DetailProgressObserver> observer) override; 63 64 int32_t UnregisterAutoSyncCallback( 65 const RdbSyncerParam ¶m, std::shared_ptr<DetailProgressObserver> observer) override; 66 67 std::pair<int32_t, std::shared_ptr<ResultSet>> RemoteQuery(const RdbSyncerParam ¶m, const std::string &device, 68 const std::string &sql, const std::vector<std::string> &selectionArgs) override; 69 70 Observers ExportObservers(); 71 72 void ImportObservers(Observers &observers); 73 74 int32_t BeforeOpen(RdbSyncerParam ¶m) override; 75 76 int32_t AfterOpen(const RdbSyncerParam ¶m) override; 77 78 int32_t ReportStatistic(const RdbSyncerParam ¶m, const RdbStatEvent &statEvent) override; 79 80 int32_t Delete(const RdbSyncerParam ¶m) override; 81 82 int32_t NotifyDataChange(const RdbSyncerParam ¶m, const RdbChangedData &clientChangedData, 83 const RdbNotifyConfig &rdbNotifyConfig) override; 84 85 int32_t SetSearchable(const RdbSyncerParam ¶m, bool isSearchable) override; 86 87 std::pair<int32_t, std::shared_ptr<ResultSet>> QuerySharingResource(const RdbSyncerParam ¶m, 88 const PredicatesMemo &predicates, const std::vector<std::string> &columns) override; 89 int32_t Disable(const RdbSyncerParam ¶m) override; 90 int32_t Enable(const RdbSyncerParam ¶m) override; 91 int32_t GetPassword(const RdbSyncerParam ¶m, std::vector<std::vector<uint8_t>> &key) override; 92 93 std::pair<int32_t, uint32_t> LockCloudContainer(const RdbSyncerParam ¶m) override; 94 95 int32_t UnlockCloudContainer(const RdbSyncerParam ¶m) override; 96 97 int32_t GetDebugInfo(const RdbSyncerParam ¶m, std::map<std::string, RdbDebugInfo> &debugInfo) override; 98 99 int32_t GetDfxInfo(const RdbSyncerParam ¶m, DistributedRdb::RdbDfxInfo &dfxInfo) override; 100 101 int32_t VerifyPromiseInfo(const RdbSyncerParam ¶m) override; 102 SyncObservers ExportSyncObservers(); 103 void ImportSyncObservers(SyncObservers &SyncObservers); 104 105 private: 106 using ChangeInfo = RdbStoreObserver::ChangeInfo; 107 using PrimaryFields = RdbStoreObserver::PrimaryFields; 108 using SyncCallbacks = ConcurrentMap<uint32_t, AsyncDetail>; 109 std::pair<int32_t, Details> DoSync( 110 const RdbSyncerParam ¶m, const Option &option, const PredicatesMemo &predicates); 111 112 int32_t DoAsync(const RdbSyncerParam ¶m, const Option &option, const PredicatesMemo &predicates); 113 114 int32_t DoSync( 115 const RdbSyncerParam ¶m, const Option &option, const PredicatesMemo &predicates, const AsyncDetail &async); 116 117 int32_t DoAsync( 118 const RdbSyncerParam ¶m, const Option &option, const PredicatesMemo &predicates, const AsyncDetail &async); 119 120 int32_t DoSubscribe(const RdbSyncerParam ¶m, const SubscribeOption &option); 121 122 int32_t DoUnSubscribe(const RdbSyncerParam ¶m, const SubscribeOption &option); 123 124 int32_t DoRegister(const RdbSyncerParam ¶m); 125 126 int32_t DoUnRegister(const RdbSyncerParam ¶m); 127 128 uint32_t GetSeqNum(); 129 130 void OnSyncComplete(uint32_t seqNum, Details &&result); 131 132 void OnSyncComplete(const std::string &storeName, Details &&result); 133 134 void OnDataChange(const Origin &origin, const PrimaryFields &primaries, ChangeInfo &&changeInfo); 135 136 static std::string RemoveSuffix(const std::string &name); 137 138 std::atomic<uint32_t> seqNum_{}; 139 Observers observers_; 140 SyncCallbacks syncCallbacks_; 141 SyncObservers syncObservers_; 142 sptr<RdbNotifierStub> notifier_; 143 144 sptr<IRemoteObject> remote_; 145 static inline BrokerDelegator<RdbServiceProxy> delegator_; 146 }; 147 } // namespace OHOS::DistributedRdb 148 #endif