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}