1/* 2 * Copyright (C) 2024 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.ets'; 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_STORE_ID = 'clientStoreId'; 26const SERVET_STORE_ID = 'clientStoreId'; 27let TEST_BUNDLE_NAME = 'com.acts.distributekvdisets'; 28 29let logTag = "[[RpcServer_TestApi: ]]"; 30let kvManager = null; 31let kvStore = null; 32let rdbStore = undefined; 33let g_object = undefined; 34 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 : undefined, 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 == "S1"){ 112 optionsInfo.securityLevel=disData.SecurityLevel.S1; 113 }else if(SecurityLevel == "S2"){ 114 optionsInfo.securityLevel=disData.SecurityLevel.S2; 115 }else if(SecurityLevel == "S3"){ 116 optionsInfo.securityLevel=disData.SecurityLevel.S3; 117 }else if(SecurityLevel == "S4"){ 118 optionsInfo.securityLevel=disData.SecurityLevel.S4; 119 }else { 120 optionsInfo.securityLevel=disData.SecurityLevel.S1; 121 } 122 123 let name = new disData.FieldNode('name'); 124 name.type = disData.ValueType.INTEGER; 125 name.nullable = false; 126 name.default = '0'; 127 128 let schema = new disData.Schema(); 129 schema.root.appendChild(name); 130 schema.indexes = ['$.name']; 131 schema.mode = 1; 132 133 let TEST_SCHEMA_STORE_ID_PREF = "SchemaStoreId_"; 134 let schemaIdPref = storeId.substring(0, 14); 135 console.info(logTag + "schemaIdPref=" + schemaIdPref); 136 if (schemaIdPref == TEST_SCHEMA_STORE_ID_PREF) { 137 optionsInfo.schema = schema; 138 } 139 console.info(logTag + "optionsInfo.schema=" + optionsInfo.schema); 140 141 await kvManager.getKVStore(storeId,optionsInfo).then((store) =>{ 142 kvStore = store; 143 console.info(logTag + " getKVStore success, securityLevel is: " + optionsInfo.securityLevel); 144 return String(true); 145 }).catch((error) => { 146 console.error(logTag + "getKVStore fail, error.code=" + error.code + "error.message=" + error.message); 147 return String(error); 148 }); 149 } 150 async closeKvStore(storeId){ 151 try{ 152 await kvManager.closeKVStore(TEST_BUNDLE_NAME, storeId).then(async () => { 153 await kvManager.deleteKVStore(TEST_BUNDLE_NAME, storeId).then(() => { 154 console.info(logTag + " Server deleteKVStore success, storeId=" + storeId); 155 return String(true); 156 }) 157 }).catch((error) => { 158 console.error(logTag + "Server deleteKVStore fail, error.code=" + error.code + "error.message=" + error.message); 159 return String(error); 160 }); 161 } catch (err) { 162 console.error('catch closeKvStore err:' + `, error code is ${err.code}, message is ${err.message}`); 163 return String(err); 164 } 165 } 166 167 async kvPut(key,value,valueType){ 168 let putValue = undefined; 169 console.info(logTag + " putValue : " + putValue + " value is: " + value + " valueType is: " + valueType); 170 if(valueType == "String"){ 171 putValue = value; 172 }else if(valueType == "String_MAX_VALUE_LENGTH"){ 173 let maxValueLength:number = disData.Constants.MAX_VALUE_LENGTH; 174 console.info(logTag + 'maxValueLength = ' + maxValueLength); 175 let maxValueLengthString:number = "v".repeat(maxValueLength); 176 console.info(logTag + 'maxValueLengthString.length = ' + maxValueLengthString.length); 177 putValue = maxValueLengthString; 178 }else if(valueType == "Number"){ 179 putValue = Number(value); 180 }else if(valueType == "Number_Min"){ 181 putValue = Number.MIN_VALUE; 182 }else if(valueType == "Uint8Array"){ 183 putValue = value.split(','); 184 }else if(valueType == "Boolean"){ 185 if(value == "false"){ 186 putValue = false; 187 }else{ 188 putValue = Boolean(value); 189 } 190 } 191 console.info(logTag + " putValue : " + putValue + " value is: " + value + " valueType is: " + valueType); 192 await kvStore.put(key,putValue).then(() => { 193 console.info(logTag + " Server put data success ,key is : " + key + " value is: " + putValue); 194 return String(true); 195 }).catch((error) => { 196 console.error(logTag + " Server put fail, error.code=" + error.code + "error.message=" + error.message); 197 return String(error); 198 }); 199 } 200 async kvGet(key,callback){ 201 console.info(logTag + " kvGet start"); 202 let errInfo = undefined; 203 let result = undefined; 204 kvStore.get(key, function (err, data){ 205 errInfo = err; 206 result = data; 207 }) 208 if(errInfo != null){ 209 console.info(logTag + " kvGet get data error: " + errInfo); 210 callback(errInfo); 211 }else{ 212 console.info(logTag + " kvGet get data success"); 213 callback(result); 214 } 215 } 216 async kvDelete(key){ 217 await kvStore.delete(key).then(() => { 218 console.info(logTag + "Delete data success"); 219 return String(true); 220 }).catch((err) => { 221 console.info(logTag + "Delete data error,errorInfo: " + err); 222 return String(err); 223 224 }); 225 } 226 227 kvSync(deviceid,mode){ 228 let syncMode = undefined; 229 if(mode == "PUSH"){ 230 syncMode = disData.SyncMode.PUSH_ONLY; 231 }else if(mode == "PUSH_PULL"){ 232 syncMode = disData.SyncMode.PUSH_PULL; 233 } 234 kvStore.Sync([deviceid],syncMode); 235 return JSON.stringify(syncMode); 236 } 237 238 async createObject(objectname, age, isVis){ 239 try{ 240 console.info(logTag + "************* createObject begin ************* "); 241 242 let g_context = globalThis.extensionContext; 243 console.info(logTag + "context 2= " + g_context); 244 if (g_context == undefined || g_context == null) { 245 console.info(logTag + "error: g_context = undefined"); 246 return false; 247 } 248 249 g_object = undefined; 250 let rename = objectname; 251 let reage = Number(age); 252 let reisVis = Boolean(isVis); 253 254 console.info(logTag + "objectname=" + objectname + " age=" + age + " isVis=" + isVis); 255 console.info(logTag + "rename=" + rename + " reage=" + reage + " reisVis=" + reisVis); 256 257 g_object = distributedObject.create(g_context, {name: rename, age: reage, isVis: reisVis}); 258 if (g_object == undefined || g_object == null) { 259 console.info(logTag + "error: g_object = undefined"); 260 return false; 261 } 262 console.info(logTag + "createObject success"); 263 console.info(logTag + g_object.name + " " + g_object.age + " " + g_object.isVis); 264 265 }catch (err) { 266 console.info(logTag + "createObject error, err: "+ err.code + err.message); 267 } 268 } 269 270 async setSessionId(sessionId){ 271 try{ 272 console.info(logTag + "************* setSessionId begin ************* "); 273 console.info(logTag +"g_object=" + g_object); 274 if (g_object == undefined || g_object == null) { 275 console.info(logTag + "error: g_object = undefined"); 276 return false; 277 } 278 g_object.setSessionId(sessionId).then(() => { 279 console.info(logTag + "remote join session success. sessionId=" + sessionId); 280 }).catch((error) => { 281 console.info(logTag + "remote join session error: " + error.code + error.message); 282 return false; 283 }); 284 }catch (err) { 285 console.info(logTag + "setSessionId error, err: "+ err.code + err.message); 286 } 287 } 288 289 async objectPut(key,value){ 290 console.info(logTag + "objectPut key=" + key + " value=" + value ); 291 if(key == "name"){ 292 g_object.name = value; 293 console.info(logTag + "objectPut success. name=" + g_object.name); 294 }else if(key == "age"){ 295 g_object.age = Number(value); 296 console.info(logTag + "objectPut success. age=" + g_object.age); 297 }else if(key == "isVis"){ 298 if(value == "false"){ 299 g_object.isVis = false; 300 }else{ 301 g_object.isVis = Boolean(value); 302 } 303 console.info(logTag + "objectPut success. isVis=" + g_object.isVis); 304 } 305 } 306 307} 308