44a1524a创建于 2024年6月20日历史提交
/*
 * Copyright (C) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import disData from '@ohos.data.distributedKVStore';
import backgroundTaskManager from '@ohos.backgroundTaskManager';
import dataRdb from '@ohos.data.rdb';
import ApiResult from '../common/apiResult';
import distributedObject from '@ohos.data.distributedDataObject';
import deviceinfo from '@ohos.deviceInfo'
import UIAbility from '@ohos.app.ability.UIAbility';

import common from "@ohos.app.ability.common"

const TEST_BUNDLE_NAME = 'com.acts.distributekvdisjs';
let logTag = "[[RpcServer_TestApi:  ]]";
let kvManager = null;
let kvStore = null;

let rdbStore = undefined;

let g_object = undefined;

let context;

export default class TestApi{
    constructor(){}
    add(a,b) {
        console.log(logTag+"_methodName is add");
        return Number(a)+Number(b);
    }
    sub(a,b) {
        console.log(logTag+"_methodName is sub");
         return Number(a)-Number(b);
    }

    async createKvManager(){
        console.info(logTag + "_methodName is createKvManager");
        try {
             let context = globalThis.extensionContext;
             console.info(logTag + "context=" + context);
             const config = {
                 context: context,
                 bundleName: TEST_BUNDLE_NAME,
             }
             kvManager = disData.createKVManager(config);
             console.log(logTag + "createKvManager22 success, kvManager=" + kvManager);
          } catch (error) {
            console.error(logTag + "createKvManager22 error.code=" + error.code + "error.message=" + error.message);
          }
         console.info(logTag + "createKvManager22 end");
    }

    async getKvStore(storeId,SecurityLevel,encrypt){
        console.info(logTag + "_methodName is getKvStore, storeId=" + storeId + " SecurityLevel=" + SecurityLevel + " encrypt="+ encrypt);
        console.info(logTag + "kvManager=" + kvManager);
        if(!kvManager) {
            console.info(logTag + "createKvManager22 begin");
           console.info(logTag + "_methodName is createKvManager22");
           try {
                let context = globalThis.extensionContext;
                console.info(logTag + "context=" + context);
                const config = {
                    context: context,
                    bundleName: TEST_BUNDLE_NAME,
                }
                kvManager = disData.createKVManager(config);
                console.log(logTag + "createKvManager22 success, kvManager=" + kvManager);
             } catch (error) {
               console.error(logTag + "createKvManager22 error.code=" + error.code + "error.message=" + error.message);
             }
            console.info(logTag + "createKvManager22 end");
        } 

        let flag_41 = 1;
        let localOSVersion = "";
        let OSVersion41 = "OpenHarmony-4.1";
        let osReleaseTypeInfo = deviceinfo.osReleaseType;
        console.info(logTag + 'the value of the deviceinfo osReleaseType is :' + osReleaseTypeInfo);
        let osFullNameInfo = deviceinfo.osFullName;
        console.info(logTag + 'the value of the deviceinfo osFullName is :' + osFullNameInfo);
    
        localOSVersion = osFullNameInfo.substring(0, 15);
        console.info(logTag + "localOSVersion is: " + localOSVersion);

        var optionsInfo = {
            createIfMissing : true,
            encrypt : false,
            backup : false,
            autoSync: false,
            kvStoreType : disData.KVStoreType.SINGLE_VERSION,
            schema : '',
            securityLevel : disData.SecurityLevel.S1,
        }
        if(encrypt == "true"){
            optionsInfo.encrypt = true;
        }else{
            optionsInfo.encrypt = false;
        }

        if(SecurityLevel == "NO_LEVEL"){
            optionsInfo.securityLevel=disData.SecurityLevel.NO_LEVEL;
        }else if(SecurityLevel == "S0"){
            optionsInfo.securityLevel=disData.SecurityLevel.S0;
        }else if(SecurityLevel == "S1"){
            optionsInfo.securityLevel=disData.SecurityLevel.S1;
        }else if(SecurityLevel == "S2"){
            optionsInfo.securityLevel=disData.SecurityLevel.S2;
        }else if(SecurityLevel == "S3"){
            optionsInfo.securityLevel=disData.SecurityLevel.S3;
        }else if(SecurityLevel == "S4"){
            optionsInfo.securityLevel=disData.SecurityLevel.S4;
        }else {
            optionsInfo.securityLevel=disData.SecurityLevel.S1;
        }

        let name = new disData.FieldNode('name');
        name.type = disData.ValueType.INTEGER;
        name.nullable = false;
        name.default = '0';

        let schema = new disData.Schema();
        schema.root.appendChild(name);
        schema.indexes = ['$.name'];
        schema.mode = 1; 
        

        let TEST_SCHEMA_STORE_ID_PREF = "SchemaStoreId_";
        let schemaIdPref = storeId.substring(0, 14);
        console.info(logTag + "schemaIdPref=" + schemaIdPref);
        if (schemaIdPref == TEST_SCHEMA_STORE_ID_PREF) {
            optionsInfo.schema = schema;
        } 
        console.info(logTag + "optionsInfo.schema=" + optionsInfo.schema);

        await kvManager.getKVStore(storeId,optionsInfo).then((store) =>{
            kvStore = store;
            console.info(logTag + " getKVStore success, securityLevel is: " + optionsInfo.securityLevel);
            return String(true);
        }).catch((error) => {
            console.error(logTag + "getKVStore fail, error.code=" + error.code + "error.message=" + error.message);
            return String(error);
        });
    }
    async closeKvStore(storeId){
        try{
        await kvManager.closeKVStore(TEST_BUNDLE_NAME, storeId).then(async () => {
            await kvManager.deleteKVStore(TEST_BUNDLE_NAME, storeId).then(() => {
                console.info(logTag + " Server deleteKVStore success, storeId=" + storeId);
                return String(true);
            })
        }).catch((error) => {
            console.error(logTag + "Server deleteKVStore fail, error.code=" + error.code + "error.message=" + error.message);
            return String(error);
        });
        } catch (err) {
            console.error('catch closeKvStore err:' + `, error code is ${err.code}, message is ${err.message}`);
            return String(err);
        }
    }

    async kvPut(key,value,valueType){
        let putValue = undefined;
        console.info(logTag + " putValue : " + putValue + "  value is: " + value + "  valueType is: " + valueType);
        if(valueType == "String"){
            putValue = value;
        }else if(valueType == "Number"){
            putValue = Number(value);
        }else if(valueType == "Number_Min"){
            putValue = Number.MIN_VALUE;
        }else if(valueType == "Uint8Array"){
            putValue = value.split(',');
        }else if(valueType == "Boolean"){
            if(value == "false"){
                putValue = false;
            }else{
                putValue = Boolean(value);
            }
        }
        console.info(logTag + " putValue : " + putValue + "  value is: " + value);
        await kvStore.put(key,putValue).then(() =>  {
            console.info(logTag + " Server  put data success ,key is : " + key + " value is: " + putValue);
            return String(true);
        }).catch((error) => {
            console.error(logTag + " Server  put fail, error.code=" + error.code + "error.message=" + error.message);
            return String(error);
        });
    }
     async kvGet(key,callback){
        console.info(logTag + " kvGet start");
        let errInfo = undefined;
        let result = undefined;
        kvStore.get(key, function (err, data){
            errInfo = err;
            result = data;
        })
        if(err != null){
            console.info(logTag + " kvGet get data error: " + err);
            callback(err);
        }else{
            console.info(logTag + " kvGet get data success");
            callback(data);
        }
    }
    async kvDelete(key){
        await kvStore.delete(key).then(() => {
            console.info(logTag + "Delete data success");
            return String(true);
        }).catch((err) => {
            console.info(logTag + "Delete data error,errorInfo: " + err);
            return String(err);

        });
    }

    kvSync(deviceid,mode){
        let syncMode = undefined;
        if(mode == "PUSH"){
            syncMode = disData.SyncMode.PUSH_ONLY;
        }else if(mode == "PUSH_PULL"){
            syncMode = disData.SyncMode.PUSH_PULL;
        }
        kvStore.Sync([deviceid],syncMode);
        return JSON.stringify(syncMode);
    }

    async getRdbStore(rdbStoreName){
        var storeConfig = {
            name: rdbStoreName,
        }
        await dataRdb.getRdbStore(storeConfig,1).then((store) => {
            console.info(logTag + " get rdbStore success");
            rdbStore = store;
            return String(true);
        }).catch((err) => {
            console.info(logTag + " get rdbStore error, err: " + err.code + err.message);
            return String(err);
        });
    }

    async createObject(objectname, age, isVis){
        try{
            console.info(logTag + "************* createObject begin ************* ");

            let g_context = globalThis.extensionContext;
            console.info(logTag + "context 2= " + g_context);
            if (g_context == undefined || g_context == null) {
                console.info(logTag + "error: g_context = undefined");
                return false;
            }

            g_object = undefined;
            let rename = objectname;
            let reage = Number(age);
            let reisVis = Boolean(isVis);

            console.info(logTag + "objectname=" + objectname + "  age=" + age + "  isVis=" + isVis);
            console.info(logTag + "rename=" + rename + "  reage=" + reage + "  reisVis=" + reisVis);

            g_object = distributedObject.create(g_context, {name: rename, age: reage, isVis: reisVis});
            if (g_object == undefined || g_object == null) {
                console.info(logTag + "error:  g_object = undefined");
                return false;
            }
            console.info(logTag + "createObject success");
            console.info(logTag + g_object.name + "  " + g_object.age + "  " + g_object.isVis);

        }catch (err) {
            console.info(logTag + "createObject error, err: "+ err.code + err.message);
        }
    }

    async setSessionId(sessionId){
        try{
            console.info(logTag + "************* setSessionId begin ************* ");
            console.info(logTag +"g_object=" + g_object);
            if (g_object == undefined || g_object == null) {
                console.info(logTag + "error:  g_object = undefined");
                return false;
            }
            g_object.setSessionId(sessionId).then(() => {
                console.info(logTag + "remote join session success. sessionId=" + sessionId);
            }).catch((error) => {
                console.info(logTag + "remote join session error: " + error.code + error.message);
                return false;
            });
        }catch (err) {
            console.info(logTag + "setSessionId error, err: "+ err.code + err.message);
        }
    }
    
    async objectPut(key,value){
        console.info(logTag + "objectPut key=" + key + "  value=" + value );
        if(key == "name"){
            g_object.name = value;
            console.info(logTag + "objectPut success. name=" + g_object.name);
        }else if(key == "age"){
            g_object.age = Number(value);
            console.info(logTag + "objectPut success. age=" + g_object.age);
        }else if(key == "isVis"){
            if(value == "false"){
                g_object.isVis = false;
            }else{
                g_object.isVis = Boolean(value);
            }
            console.info(logTag + "objectPut success. isVis=" + g_object.isVis);
        }
    }

}