• 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 */
15import distributedData from '@ohos.data.distributedData';
16import { logger } from './Logger';
17import deviceManager from '@ohos.distributedHardware.deviceManager';
18
19const STORE_ID = 'distributedcalc';
20const TAG = 'KvStoreModel';
21let bundleName = 'ohos.samples.distributedcalc';
22const mode = distributedData.SyncMode.PUSH_PULL;
23let devManager;
24
25export class KvStoreModel {
26  kvManager
27  kvStore
28
29  createKvStore(callback) {
30    if ((typeof (this.kvStore) !== undefined)) {
31      callback()
32    }
33    var config = {
34      bundleName,
35      userInfo: {
36        userId: '0',
37        userType: 0
38      }
39    }
40    logger.info(TAG, `createKVManager begin`)
41    distributedData.createKVManager(config).then((manager) => {
42      logger.debug(`createKVManager success, kvManager=${JSON.stringify(manager)}`)
43      this.kvManager = manager
44      let options = {
45        createIfMissing: true,
46        encrypt: false,
47        backup: false,
48        autoSync: false,
49        kvStoreType: 1,
50        securityLevel: 1,
51      }
52      logger.info(TAG, `kvManager.getKVStore begin`)
53      this.kvManager.getKVStore(STORE_ID, options).then((store) => {
54        logger.debug(TAG, `getKVStore success, kvStore=${store}`)
55        this.kvStore = store
56        callback()
57      })
58      logger.info(TAG, `kvManager.getKVStore end`)
59    })
60    logger.info(TAG, `createKVManager end`)
61  }
62
63  put(key, value) {
64    logger.debug(TAG, `kvStore.put ${key}=${value}`)
65    try {
66      this.kvStore.put(key, value + 'end').then((data) => {
67        logger.debug(TAG, `kvStore.put ${key}  finished, data=${JSON.stringify(data)}`)
68        // create deviceManager
69        deviceManager.createDeviceManager(bundleName, (err, value) => {
70          let deviceIds = [];
71          if (!err) {
72            devManager = value;
73            if (devManager != null) {
74              var devices = devManager.getTrustedDeviceListSync();
75              for (var i = 0; i < devices.length; i++) {
76                deviceIds[i] = devices[i].networkId;
77              }
78            }
79          }
80          if (this.kvStore != null) {
81            this.kvStore.sync(deviceIds, mode, 1000);
82          }
83        });
84      }).catch((err) => {
85        logger.error(TAG, `kvStore.put ${key} failed, ${JSON.stringify(err)}`)
86      })
87    } catch(error) {
88      logger.error(TAG, `kvStore.put code ${JSON.stringify(error.code)}`)
89    }
90  }
91
92  off() {
93    if (this.kvStore !== null) {
94      try {
95        this.kvStore.off('dataChange')
96      } catch(error) {
97        logger.error(TAG, `kvStore.off code ${JSON.stringify(error.code)}`)
98      }
99    }
100  }
101
102  setOnMessageReceivedListener(msg, refreshdata) {
103    logger.debug(TAG, `setOnMessageReceivedListener ${msg}`)
104    this.createKvStore(() => {
105      logger.info(TAG, `kvStore.on(dataChange) begin`)
106      try {
107        this.kvStore?.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_REMOTE, (data) => {
108          logger.debug(TAG, `dataChange, ${JSON.stringify(data)}`)
109          logger.debug(TAG, `dataChange, insert ${data.insertEntries.length} update ${data.updateEntries.length}`)
110          let entries = data.insertEntries.length > 0 ? data.insertEntries : data.updateEntries
111          this.simplify(entries, msg, refreshdata)
112        })
113      } catch(error) {
114        logger.error(TAG, `kvStore.on(dataChange) code is ${JSON.stringify(error.code)}, message is ${JSON.stringify(error.message)}`)
115      }
116      logger.info(TAG, `kvStore.on(dataChange) end`)
117    })
118  }
119
120  simplify(entries, msg, refreshdata) {
121    for (let i = 0; i < entries.length; i++) {
122      if (entries[i].key === msg) {
123        let value = entries[i].value.value
124        logger.debug(TAG, `Entries receive ${msg}=${value}`)
125        let valueResult = value.substring(0, value.lastIndexOf('end'))
126        logger.debug(TAG, `Entries receive valueResult = ${valueResult}`)
127        refreshdata(valueResult)
128        return
129      }
130    }
131  }
132}