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