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 disData from '@ohos.data.distributedKVStore'; 16import backgroundTaskManager from '@ohos.backgroundTaskManager'; 17import dataRdb from '@ohos.data.rdb'; 18import ApiResult from '../common/apiResult'; 19import distributedObject from '@ohos.data.distributedDataObject'; 20import deviceinfo from '@ohos.deviceInfo' 21import UIAbility from '@ohos.app.ability.UIAbility'; 22 23import common from "@ohos.app.ability.common" 24 25const TEST_BUNDLE_NAME = 'com.acts.distributekvdisjs'; 26let logTag = "[[RpcServer_TestApi: ]]"; 27let kvManager = null; 28let kvStore = null; 29 30let rdbStore = undefined; 31 32let g_object = undefined; 33 34let context; 35 36export default class TestApi{ 37 constructor(){} 38 add(a,b) { 39 console.log(logTag+"_methodName is add"); 40 return Number(a)+Number(b); 41 } 42 sub(a,b) { 43 console.log(logTag+"_methodName is sub"); 44 return Number(a)-Number(b); 45 } 46 47 async createKvManager(){ 48 console.info(logTag + "_methodName is createKvManager"); 49 try { 50 let context = globalThis.extensionContext; 51 console.info(logTag + "context=" + context); 52 const config = { 53 context: context, 54 bundleName: TEST_BUNDLE_NAME, 55 } 56 kvManager = disData.createKVManager(config); 57 console.log(logTag + "createKvManager22 success, kvManager=" + kvManager); 58 } catch (error) { 59 console.error(logTag + "createKvManager22 error.code=" + error.code + "error.message=" + error.message); 60 } 61 console.info(logTag + "createKvManager22 end"); 62 } 63 64 async getKvStore(storeId,SecurityLevel,encrypt){ 65 console.info(logTag + "_methodName is getKvStore, storeId=" + storeId + " SecurityLevel=" + SecurityLevel + " encrypt="+ encrypt); 66 console.info(logTag + "kvManager=" + kvManager); 67 if(!kvManager) { 68 console.info(logTag + "createKvManager22 begin"); 69 console.info(logTag + "_methodName is createKvManager22"); 70 try { 71 let context = globalThis.extensionContext; 72 console.info(logTag + "context=" + context); 73 const config = { 74 context: context, 75 bundleName: TEST_BUNDLE_NAME, 76 } 77 kvManager = disData.createKVManager(config); 78 console.log(logTag + "createKvManager22 success, kvManager=" + kvManager); 79 } catch (error) { 80 console.error(logTag + "createKvManager22 error.code=" + error.code + "error.message=" + error.message); 81 } 82 console.info(logTag + "createKvManager22 end"); 83 } 84 85 let flag_41 = 1; 86 let localOSVersion = ""; 87 let OSVersion41 = "OpenHarmony-4.1"; 88 let osReleaseTypeInfo = deviceinfo.osReleaseType; 89 console.info(logTag + 'the value of the deviceinfo osReleaseType is :' + osReleaseTypeInfo); 90 let osFullNameInfo = deviceinfo.osFullName; 91 console.info(logTag + 'the value of the deviceinfo osFullName is :' + osFullNameInfo); 92 93 localOSVersion = osFullNameInfo.substring(0, 15); 94 console.info(logTag + "localOSVersion is: " + localOSVersion); 95 96 var optionsInfo = { 97 createIfMissing : true, 98 encrypt : false, 99 backup : false, 100 autoSync: false, 101 kvStoreType : disData.KVStoreType.SINGLE_VERSION, 102 schema : '', 103 securityLevel : disData.SecurityLevel.S1, 104 } 105 if(encrypt == "true"){ 106 optionsInfo.encrypt = true; 107 }else{ 108 optionsInfo.encrypt = false; 109 } 110 111 if(SecurityLevel == "NO_LEVEL"){ 112 optionsInfo.securityLevel=disData.SecurityLevel.NO_LEVEL; 113 }else if(SecurityLevel == "S0"){ 114 optionsInfo.securityLevel=disData.SecurityLevel.S0; 115 }else if(SecurityLevel == "S1"){ 116 optionsInfo.securityLevel=disData.SecurityLevel.S1; 117 }else if(SecurityLevel == "S2"){ 118 optionsInfo.securityLevel=disData.SecurityLevel.S2; 119 }else if(SecurityLevel == "S3"){ 120 optionsInfo.securityLevel=disData.SecurityLevel.S3; 121 }else if(SecurityLevel == "S4"){ 122 optionsInfo.securityLevel=disData.SecurityLevel.S4; 123 }else { 124 optionsInfo.securityLevel=disData.SecurityLevel.S1; 125 } 126 127 let name = new disData.FieldNode('name'); 128 name.type = disData.ValueType.INTEGER; 129 name.nullable = false; 130 name.default = '0'; 131 132 let schema = new disData.Schema(); 133 schema.root.appendChild(name); 134 schema.indexes = ['$.name']; 135 schema.mode = 1; 136 137 138 let TEST_SCHEMA_STORE_ID_PREF = "SchemaStoreId_"; 139 let schemaIdPref = storeId.substring(0, 14); 140 console.info(logTag + "schemaIdPref=" + schemaIdPref); 141 if (schemaIdPref == TEST_SCHEMA_STORE_ID_PREF) { 142 optionsInfo.schema = schema; 143 } 144 console.info(logTag + "optionsInfo.schema=" + optionsInfo.schema); 145 146 await kvManager.getKVStore(storeId,optionsInfo).then((store) =>{ 147 kvStore = store; 148 console.info(logTag + " getKVStore success, securityLevel is: " + optionsInfo.securityLevel); 149 return String(true); 150 }).catch((error) => { 151 console.error(logTag + "getKVStore fail, error.code=" + error.code + "error.message=" + error.message); 152 return String(error); 153 }); 154 } 155 async closeKvStore(storeId){ 156 try{ 157 await kvManager.closeKVStore(TEST_BUNDLE_NAME, storeId).then(async () => { 158 await kvManager.deleteKVStore(TEST_BUNDLE_NAME, storeId).then(() => { 159 console.info(logTag + " Server deleteKVStore success, storeId=" + storeId); 160 return String(true); 161 }) 162 }).catch((error) => { 163 console.error(logTag + "Server deleteKVStore fail, error.code=" + error.code + "error.message=" + error.message); 164 return String(error); 165 }); 166 } catch (err) { 167 console.error('catch closeKvStore err:' + `, error code is ${err.code}, message is ${err.message}`); 168 return String(err); 169 } 170 } 171 172 async kvPut(key,value,valueType){ 173 let putValue = undefined; 174 console.info(logTag + " putValue : " + putValue + " value is: " + value + " valueType is: " + valueType); 175 if(valueType == "String"){ 176 putValue = value; 177 }else if(valueType == "Number"){ 178 putValue = Number(value); 179 }else if(valueType == "Number_Min"){ 180 putValue = Number.MIN_VALUE; 181 }else if(valueType == "Uint8Array"){ 182 putValue = value.split(','); 183 }else if(valueType == "Boolean"){ 184 if(value == "false"){ 185 putValue = false; 186 }else{ 187 putValue = Boolean(value); 188 } 189 } 190 console.info(logTag + " putValue : " + putValue + " value is: " + value); 191 await kvStore.put(key,putValue).then(() => { 192 console.info(logTag + " Server put data success ,key is : " + key + " value is: " + putValue); 193 return String(true); 194 }).catch((error) => { 195 console.error(logTag + " Server put fail, error.code=" + error.code + "error.message=" + error.message); 196 return String(error); 197 }); 198 } 199 async kvGet(key,callback){ 200 console.info(logTag + " kvGet start"); 201 let errInfo = undefined; 202 let result = undefined; 203 kvStore.get(key, function (err, data){ 204 errInfo = err; 205 result = data; 206 }) 207 if(err != null){ 208 console.info(logTag + " kvGet get data error: " + err); 209 callback(err); 210 }else{ 211 console.info(logTag + " kvGet get data success"); 212 callback(data); 213 } 214 } 215 async kvDelete(key){ 216 await kvStore.delete(key).then(() => { 217 console.info(logTag + "Delete data success"); 218 return String(true); 219 }).catch((err) => { 220 console.info(logTag + "Delete data error,errorInfo: " + err); 221 return String(err); 222 223 }); 224 } 225 226 kvSync(deviceid,mode){ 227 let syncMode = undefined; 228 if(mode == "PUSH"){ 229 syncMode = disData.SyncMode.PUSH_ONLY; 230 }else if(mode == "PUSH_PULL"){ 231 syncMode = disData.SyncMode.PUSH_PULL; 232 } 233 kvStore.Sync([deviceid],syncMode); 234 return JSON.stringify(syncMode); 235 } 236 237 async getRdbStore(rdbStoreName){ 238 var storeConfig = { 239 name: rdbStoreName, 240 } 241 await dataRdb.getRdbStore(storeConfig,1).then((store) => { 242 console.info(logTag + " get rdbStore success"); 243 rdbStore = store; 244 return String(true); 245 }).catch((err) => { 246 console.info(logTag + " get rdbStore error, err: " + err.code + err.message); 247 return String(err); 248 }); 249 } 250 251 async createObject(objectname, age, isVis){ 252 try{ 253 console.info(logTag + "************* createObject begin ************* "); 254 255 let g_context = globalThis.extensionContext; 256 console.info(logTag + "context 2= " + g_context); 257 if (g_context == undefined || g_context == null) { 258 console.info(logTag + "error: g_context = undefined"); 259 return false; 260 } 261 262 g_object = undefined; 263 let rename = objectname; 264 let reage = Number(age); 265 let reisVis = Boolean(isVis); 266 267 console.info(logTag + "objectname=" + objectname + " age=" + age + " isVis=" + isVis); 268 console.info(logTag + "rename=" + rename + " reage=" + reage + " reisVis=" + reisVis); 269 270 g_object = distributedObject.create(g_context, {name: rename, age: reage, isVis: reisVis}); 271 if (g_object == undefined || g_object == null) { 272 console.info(logTag + "error: g_object = undefined"); 273 return false; 274 } 275 console.info(logTag + "createObject success"); 276 console.info(logTag + g_object.name + " " + g_object.age + " " + g_object.isVis); 277 278 }catch (err) { 279 console.info(logTag + "createObject error, err: "+ err.code + err.message); 280 } 281 } 282 283 async setSessionId(sessionId){ 284 try{ 285 console.info(logTag + "************* setSessionId begin ************* "); 286 console.info(logTag +"g_object=" + g_object); 287 if (g_object == undefined || g_object == null) { 288 console.info(logTag + "error: g_object = undefined"); 289 return false; 290 } 291 g_object.setSessionId(sessionId).then(() => { 292 console.info(logTag + "remote join session success. sessionId=" + sessionId); 293 }).catch((error) => { 294 console.info(logTag + "remote join session error: " + error.code + error.message); 295 return false; 296 }); 297 }catch (err) { 298 console.info(logTag + "setSessionId error, err: "+ err.code + err.message); 299 } 300 } 301 302 async objectPut(key,value){ 303 console.info(logTag + "objectPut key=" + key + " value=" + value ); 304 if(key == "name"){ 305 g_object.name = value; 306 console.info(logTag + "objectPut success. name=" + g_object.name); 307 }else if(key == "age"){ 308 g_object.age = Number(value); 309 console.info(logTag + "objectPut success. age=" + g_object.age); 310 }else if(key == "isVis"){ 311 if(value == "false"){ 312 g_object.isVis = false; 313 }else{ 314 g_object.isVis = Boolean(value); 315 } 316 console.info(logTag + "objectPut success. isVis=" + g_object.isVis); 317 } 318 } 319 320} 321