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