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}