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 */
15
16import rpc from '@ohos.rpc';
17import ApiMessage from '../common/apiMessage.ets';
18import ApiResult from '../common/apiResult.ets';
19import ReflectCallApi from './ReflectCallApi.ets';
20import deviceinfo from '@ohos.deviceInfo'
21
22let CODE_INVOKE = 1;
23let CODE_INVOKE_TESTCASE = 99;
24let CODE_INVOKE_OSVERSION = 88;
25let logTag = "[RpcServer:  ]";
26
27export default class Stub extends rpc.RemoteObject {
28    constructor(descriptor) {
29        console.log(logTag +" Stub Create");
30        super(descriptor);
31    }
32
33    onRemoteMessageRequest(code, data, reply, option) {
34        try {
35            console.log(logTag +' ===================  onRemoteMessageRequest: code is " + code + "  ===================');
36            switch (code) {
37              case CODE_INVOKE:
38              {
39                console.info(logTag +' case CODE_INVOKE start');
40                let testBundle = new ApiMessage(null, null, null, null, null, null, null);
41                data.readParcelable(testBundle);
42
43                let resultCall = new ApiResult(0,null);
44                var resCallApi = -1;
45                const reflectCallApi = new ReflectCallApi();
46                resCallApi = reflectCallApi.call(testBundle);
47                console.log(logTag + '_methodName  call success,result is ' + resCallApi);
48                if (resCallApi === 1)  {
49                    resultCall._resultCode = 1;
50                    resultCall._result = 1;
51                } else {
52                    resultCall._resultCode = -1;
53                    resultCall._result = -1;
54                } 
55                console.log(logTag + "The server's writeSequenceable result is ' + JSON.stringify(resultCall)");
56
57                testBundle._apiResult=JSON.stringify(resultCall);
58                console.log(logTag + ' The testBundle is ' + JSON.stringify(testBundle));
59                reply.writeParcelable(testBundle);
60
61                return true;
62              }
63              case CODE_INVOKE_TESTCASE:
64              {
65                console.info(logTag +' ===================  case CODE_INVOKE_TESTCASE start ===================  ');
66                let testBundle = new ApiMessage(null, null, null, null, null, null, null);
67                data.readSequenceable(testBundle);
68
69                let resultCall = new ApiResult(0,null);
70                resultCall._resultCode = 1;
71                resultCall._result = 1;
72                testBundle._apiResult=JSON.stringify(resultCall);
73                reply.writeParcelable(testBundle);
74                return true;
75              }
76              case CODE_INVOKE_OSVERSION:
77              {
78                console.info(logTag +' ===================  case CODE_INVOKE_OSVERSION start ===================  ');
79                data.readString();
80                let osFullNameInfo = deviceinfo.osFullName;
81                console.info('the value of the deviceinfo osFullName is :' + osFullNameInfo);
82                reply.writeString(osFullNameInfo);
83                return true;
84              }
85              default:
86                console.error(logTag +' default case ' + code);
87                return super.onRemoteMessageRequest(code, data, reply, option);
88            }
89        } catch (error) {
90            console.log(logTag +'ERROR: onRemoteMessageRequest: ' + error.code + error.message);
91        }
92        return false;
93    }
94}
95