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