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