1/*
2 * Copyright (c) 2021-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 ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility';
17import rpc from '@ohos.rpc';
18
19class MySequenceable {
20    num = null;
21    str = null;
22    constructor(num, string) {
23        this.num = num;
24        this.str = string;
25    }
26
27    marshalling(messageParcel) {
28        messageParcel.writeInt(this.num);
29        messageParcel.writeString(this.str);
30        return true;
31    }
32
33    unmarshalling(messageParcel) {
34        this.num = messageParcel.readInt();
35        this.str = messageParcel.readString();
36        return true;
37    }
38}
39
40class Stub extends rpc.RemoteObject {
41    constructor(descriptor) {
42        super(descriptor);
43    }
44    onRemoteRequest(code, data, reply, option) {
45        try{
46            console.info("onRemoteRequest: " + code);
47            console.info("-----------------syhsyhsysh:" + code);
48            if (code === 37){
49                console.info("case 37 start");
50                let tmp1 = data.readString();
51                console.info("onRemoteRequest readstring is " + tmp1);
52                let result =  reply.writeString("onRemoteRequest invoking");
53                console.info("onRemoteRequest writestring is " + result);
54                return true;
55            } else if (code === 38){
56                console.info("case 38 start");
57                let tmp1 = data.readString();
58                console.info("onRemoteRequest readstring is " + tmp1);
59                let result =  reply.writeString(tmp1);
60                console.info("onRemoteRequest writestring is " + result);
61                return true;
62            }else {
63                console.error("default case " + code);
64                return super.onRemoteRequest(code, data, reply, option);
65            }
66        } catch (error) {
67            console.info("onRemoteRequest: " + error);
68        }
69        return false;
70    }
71    onRemoteMessageRequest(code, data, reply, option) {
72        try{
73            console.info("onRemoteMessageRequest: " + code);
74            console.info("-----------------syhsyhsysh:" + code);
75            switch(code) {
76                case 1:
77                    {
78                        console.info("case 1 start");
79                        let tmp1 = data.readByteArray();
80                        console.info("The server's readByteArray result is " + tmp1.length);
81                        let result =  reply.writeByteArray(tmp1);
82                        console.info("The server's writeByteArray result is " + result);
83                        return true;
84                    }
85                case 2:
86                    {
87                        console.info("case 2 start");
88                        let tmp1 = data.readIntArray();
89                        console.info("The server's readIntArray " + tmp1.length);
90                        let result =  reply.writeIntArray(tmp1);
91                        console.info("The server's writeIntArray result is " + result);
92                        return true;
93                    }
94                case 3:
95                    {
96                        console.info("case 3 start");
97                        let tmp1 = data.readFloatArray();
98                        console.info("The server's readFloatArray result is " + tmp1.length);
99                        let result =  reply.writeFloatArray(tmp1);
100                        console.info("The server's writeFloatArray result is " + result);
101                        return true;
102                    }
103                case 4:
104                    {
105                        console.info("case 4 start");
106                        let tmp1 = data.readShortArray();
107                        console.info("The server's readShortArray result is " + tmp1.length);
108                        let result =  reply.writeShortArray(tmp1);
109                        console.info("The server's writeShortArray result is " + result);
110                        return true;
111                    }
112                case 5:
113                    {
114                        console.info("case 5 start");
115                        let tmp1 = data.readLongArray();
116                        console.info("The server's readLongArray result is " + tmp1.length);
117                        let result =  reply.writeLongArray(tmp1);
118                        console.info("The server's writeLongArray result is " + result);
119                        return true;
120                    }
121                case 6:
122                    {
123                        console.info("case 6 start");
124                        let tmp1 = data.readDoubleArray();
125                        console.info("The server's readDoubleArray result is " + tmp1.length);
126                        let result =  reply.writeDoubleArray(tmp1);
127                        console.info("The server's writeDoubleArray result is " + result);
128                        return true;
129                    }
130                case 7:
131                    {
132                        console.info("case 7 start");
133                        let tmp1 = data.readBooleanArray();
134                        console.info("The server's readBooleanArray result is " + tmp1.length);
135                        let result =  reply.writeBooleanArray(tmp1);
136                        console.info("The server's writeBooleanArray result is " + result);
137                        return true;
138                    }
139                case 8:
140                    {
141                        console.info("case 8 start");
142                        let tmp1 = data.readCharArray();
143                        console.info("The server's readCharArray result is " + tmp1.length);
144                        let result =  reply.writeCharArray(tmp1);
145                        console.info("The server's writeCharArray result is " + result);
146                        return true;
147                    }
148                case 9:
149                    {
150                        console.info("case 9 start");
151                        let tmp1 = data.readStringArray();
152                        console.info("The server's readStringArray result is " + tmp1.length);
153                        let result =  reply.writeStringArray(tmp1);
154                        console.info("The server's writeStringArray result is " + result);
155                        return true;
156                    }
157                case 10:
158                    {
159                        console.info("case 10 start");
160                        let tmp1 = data.readShort();
161                        console.info("The server's readShort result is " + tmp1);
162                        let result =  reply.writeShort(tmp1);
163                        console.info("The server's writeShort result is " + result);
164                        return true;
165                    }
166                case 11:
167                    {
168                        console.info("case 11 start");
169                        let tmp1 = data.readLong();
170                        console.info("The server's readLong result is " + tmp1);
171                        let result =  reply.writeLong(tmp1);
172                        console.info("The server's writeLong result is " + result);
173                        return true;
174                    }
175                case 12:
176                    {
177                        console.info("case 12 start");
178                        let tmp1 = data.readDouble();
179                        console.info("The server's readDouble result is " + tmp1);
180                        let result =  reply.writeDouble(tmp1);
181                        console.info("The server's writeDouble result is " + result);
182                        return true;
183                    }
184                case 13:
185                    {
186                        console.info("case 13 start");
187                        let tmp1 = data.readBoolean();
188                        console.info("The server's readBoolean result is " + tmp1);
189                        let result =  reply.writeBoolean(tmp1);
190                        console.info("The server's writeBoolean result is " + result);
191                        return true;
192                    }
193                case 14:
194                    {
195                        console.info("case 14 start");
196                        let tmp1 = data.readChar();
197                        console.info("The server's readChar result is " + tmp1);
198                        let result =  reply.writeChar(tmp1);
199                        console.info("The server's writeChar result is " + result);
200                        return true;
201                    }
202                case 15:
203                    {
204                        console.info("case 15 start");
205                        let tmp1 = data.readString();
206                        console.info("The server's readString result is " + tmp1.length);
207                        let result =  reply.writeString(tmp1);
208                        console.info("The server's writeString result is " + result);
209                        return true;
210                    }
211                case 16:
212                    {
213                        console.info("case 16 start");
214                        let tmp1 = data.readByte();
215                        console.info("The server's readByte result is " + tmp1);
216                        let result =  reply.writeByte(tmp1);
217                        console.info("The server's writeByte result is " + result);
218                        return true;
219                    }
220                case 17:
221                    {
222                        console.info("case 17 start");
223                        let tmp1 = data.readInt();
224                        console.info("The server's readInt result is " + tmp1);
225                        let result =  reply.writeInt(tmp1);
226                        console.info("The server's writeInt result is " + result);
227                        return true;
228                    }
229                case 18:
230                    {
231                        console.info("case 18 start");
232                        let tmp1 = data.readFloat();
233                        console.info("The server's readFloat result is " + tmp1);
234                        let result =  reply.writeFloat(tmp1);
235                        console.info("The server's writeFloat result is " + result);
236                        return true;
237                    }
238                case 19:
239                    {
240                        console.info("case 19 start");
241                        var size = data.readInt();
242                        console.info("The server's readInt result is " + size);
243                        let tmp1 = data.readRawData(size);
244                        console.info("The server's readRawData result is " + tmp1.length);
245                        let size1 = reply.writeInt(size);
246                        console.info("The server's writeInt result is " + size1);
247                        let result = reply.writeRawData(tmp1, tmp1.length);
248                        console.info("The server's writeRawData result is " + result);
249                        return true;
250                    }
251                case 20:
252                    {
253                        console.info("case 20 start");
254                        let listener = data.readRemoteObject();
255                        let num = data.readInt();
256                        let str = data.readString();
257                        console.info("case 20 num is " + num);
258                        console.info("case 20 str is " + str);
259                        let data2 = rpc.MessageParcel.create();
260                        let reply2 = rpc.MessageParcel.create();
261                        let option2 = new rpc.MessageOption();
262                        data2.writeInt(num);
263                        data2.writeString(str);
264                        console.info("case 20 start sendRequest");
265                        listener.sendRequest(1, data2, reply2, option2)
266                            .then(function(result) {
267                                console.info("send request done, error code: " + result.errCode );
268                            })
269                            .catch(function(e) {
270                                console.error("send request got exception: " + e);
271                            })
272                            .finally(() => {
273                                data2.reclaim();
274                                reply2.reclaim();
275                                console.info("case 20 test done");
276                            })
277                        reply.writeNoException();
278                        console.info("case 20 end");
279                        return true;
280                    }
281                case 21:
282                    {
283                        console.info("case 21 start");
284                        let s = new MySequenceable(null, null);
285                        var tmp1 = data.readParcelable(s);
286                        console.info("server's readParcelable result is " + tmp1);
287                        let result =  reply.writeParcelable(s);
288                        console.info("server's writeParcelable result is " + result);
289                        return true;
290                    }
291                case 22:
292                    {
293                        console.info("case 22 start");
294                        data.readException();
295                        console.info("readExcepetion ");
296                        var tmp = data.readInt();
297                        console.info("readInt result is " +tmp);
298                        reply.writeNoException();
299                        console.info("writeNoException result is ");
300                        var result = reply.writeInt(tmp);
301                        return true;
302                    }
303                case 23:
304                    {
305                        console.info("case 23 start");
306                        var s = [new MySequenceable(null, null), new MySequenceable(null, null),
307                        new MySequenceable(null, null)];
308                        data.readParcelableArray(s);
309                        console.info("readParcelableArray result success");
310                        let result =  reply.writeParcelableArray(s);
311                        console.info("writeParcelableArray result is " + result);
312                        return true;
313                    }
314                case 24:
315                    {
316                        console.info("case 24 start");
317                        let listeners = data.readRemoteObjectArray();
318                        console.info("The server's readRemoteObjectArray result is " + listeners.length);
319                        for (let i = 0; i < listeners.length; i++) {
320                            let option2 = new rpc.MessageOption();
321                            let data2 = rpc.MessageParcel.create();
322                            let reply2 = rpc.MessageParcel.create();
323                            listeners[i].sendRequest(1, data2, reply2, option2)
324                                .then(function(result) {
325                                    console.info("send request done, error code: " + result.errCode + ", index: " + i);
326                                })
327                                .catch(function(e) {
328                                    console.error("send request got exception: " + e);
329                                })
330                                .finally(() => {
331                                    data2.reclaim();
332                                    reply2.reclaim();
333                                    console.info("case 24 test done");
334                                })
335                        }
336                        console.info("The server's writeRemoteObjectArray result is " + result);
337                        return true;
338                    }
339                case 25:
340                    {
341                        console.info("case 25 start");
342                        let tmp1 = data.readByte();
343                        let tmp2 = data.readShort();
344                        let tmp3 = data.readInt();
345                        let tmp4 = data.readLong();
346                        let tmp5 = data.readFloat();
347                        let tmp6 = data.readDouble();
348                        let tmp7 = data.readBoolean();
349                        let tmp8 = data.readChar();
350                        let tmp9 = data.readString();
351                        let s = new MySequenceable(null, null);
352                        let tmp10 = data.readParcelable(s);
353                        let result1 =  reply.writeByte(tmp1);
354                        let result2 =  reply.writeShort(tmp2);
355                        let result3 =  reply.writeInt(tmp3);
356                        let result4 =  reply.writeLong(tmp4);
357                        let result5 =  reply.writeFloat(tmp5);
358                        let result6 =  reply.writeDouble(tmp6);
359                        let result7 =  reply.writeBoolean(tmp7);
360                        let result8 =  reply.writeChar(tmp8);
361                        let result9 =  reply.writeString(tmp9);
362                        let result10 =  reply.writeParcelable(s);
363                        return true;
364                    }
365                case 26:
366                    {
367                        console.info("case 26 start");
368                        let tmp1 = data.readByteArray();
369                        let tmp2 = data.readShortArray();
370                        let tmp3 = data.readIntArray();
371                        let tmp4 = data.readLongArray();
372                        let tmp5 = data.readFloatArray();
373                        let tmp6 = data.readDoubleArray();
374                        let tmp7 = data.readBooleanArray();
375                        let tmp8 = data.readCharArray();
376                        let tmp9 = data.readStringArray();
377                        let s = [new MySequenceable(null, null), new MySequenceable(null, null),
378                        new MySequenceable(null, null)];
379                        let tmp10 = data.readParcelableArray(s);
380                        let result1 =  reply.writeByteArray(tmp1);
381                        let result2 =  reply.writeShortArray(tmp2);
382                        let result3 =  reply.writeIntArray(tmp3);
383                        let result4 =  reply.writeLongArray(tmp4);
384                        let result5 =  reply.writeFloatArray(tmp5);
385                        let result6 =  reply.writeDoubleArray(tmp6);
386                        let result7 =  reply.writeBooleanArray(tmp7);
387                        let result8 =  reply.writeCharArray(tmp8);
388                        let result9 =  reply.writeStringArray(tmp9);
389                        let result10 =  reply.writeParcelableArray(s);
390                        return true;
391                    }
392                case 27:
393                    {
394                        console.info("case 27 start");
395                        var ashmem = data.readAshmem();
396                        console.info("The server's readAshmem result is " + ashmem);
397                        var gongx = ashmem.mapReadOnlyAshmem();
398                        console.info("The server's gongxiang result is " + gongx);
399                        let huoqu = ashmem.getAshmemSize();
400                        console.info("The server's huoqu result is " + huoqu);
401                        let bytes = ashmem.readFromAshmem(huoqu, 0);
402                        console.info("The server's readFromAshmem result is " + bytes);
403                        let err = reply.writeNoException();
404                        console.info("The server's writeNoException result is " + err);
405                        var resultInt = reply.writeInt(bytes.length);
406                        console.info("The server's writeInt result is " + resultInt);
407                        let result =  reply.writeAshmem(ashmem);
408                        console.info("The server's writeAshmem result is " + result);
409                        ashmem.unmapAshmem();
410                        console.info("unmapAshmem success " );
411                        ashmem.closeAshmem();
412                        console.info("closeAshmem success ");
413                        return true;
414                    }
415                case 28:
416                    {
417                        console.info("case 28 start");
418                        let s = new MySequenceable(null, null);
419                        var tmp1 = data.readParcelable(s);
420                        console.info("The server's readParcelable result is " + s);
421                        var result =  reply.writeParcelable(s);
422                        console.info("The server's writeParcelable result is " + s);
423                        return true;
424                    }
425                case 29:
426                    {
427                        console.info("case 29 start");
428                        var tmp1 = data.readShort();
429                        var tmp2 = data.readShort();
430                        var tmp3 = data.readShort();
431                        var tmp4 = data.readShort();
432                        var tmp5 = data.readShort();
433                        console.info("The server's readShort result is " + tmp1 + tmp2 + tmp3 + tmp4 + tmp5);
434                        var result1 =  reply.writeShort(tmp1);
435                        var result2 =  reply.writeShort(tmp2);
436                        var result3 =  reply.writeShort(tmp3);
437                        var result4 =  reply.writeShort(tmp4);
438                        var result5 =  reply.writeShort(tmp5);
439                        console.info("The server's writeShort result is " + result1);
440                        return true;
441                    }
442                case 30:
443                    {
444                        console.info("case 30 start");
445                        var tmp1 = data.readByte();
446                        var tmp2 = data.readByte();
447                        var tmp3 = data.readByte();
448                        var tmp4 = data.readByte();
449                        var tmp5 = data.readByte();
450                        console.info("The server's readByte result is " + tmp1 + tmp2 + tmp3 + tmp4 + tmp5);
451                        var result1 =  reply.writeByte(tmp1);
452                        var result2 =  reply.writeByte(tmp2);
453                        var result3 =  reply.writeByte(tmp3);
454                        var result4 =  reply.writeByte(tmp4);
455                        var result5 =  reply.writeByte(tmp5);
456                        console.info("The server's writeByte result is " + result1);
457                        return true;
458                    }
459                case 31:
460                    {
461                        console.info("case 31 start");
462                        var tmp1 = data.readInt();
463                        var tmp2 = data.readInt();
464                        var tmp3 = data.readInt();
465                        var tmp4 = data.readInt();
466                        var tmp5 = data.readInt();
467                        console.info("The server's readInt result is " + tmp1 + tmp2 + tmp3 + tmp4 + tmp5);
468                        var result1 =  reply.writeInt(tmp1);
469                        var result2 =  reply.writeInt(tmp2);
470                        var result3 =  reply.writeInt(tmp3);
471                        var result4 =  reply.writeInt(tmp4);
472                        var result5 =  reply.writeInt(tmp5);
473                        console.info("The server's writeInt result is " + result1);
474                        return true;
475                    }
476                case 32:
477                    {
478                        console.info("case 32 start");
479                        let callingPid = rpc.IPCSkeleton.getCallingPid();
480                        let callingUid = rpc.IPCSkeleton.getCallingUid();
481                        let callingDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
482                        let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
483                        let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
484                        reply.writeNoException();
485                        reply.writeInt(callingPid);
486                        reply.writeInt(callingUid);
487                        reply.writeString(callingDeviceID);
488                        reply.writeString(localDeviceID);
489                        reply.writeBoolean(isLocalCalling);
490                        reply.writeInt(this.getCallingPid());
491                        reply.writeInt(this.getCallingUid());
492                        console.info("getCallingUid the server result success");
493                        let id = rpc.IPCSkeleton.resetCallingIdentity();
494                        rpc.IPCSkeleton.setCallingIdentity(id);
495                        reply.writeInt(rpc.IPCSkeleton.getCallingPid());
496                        reply.writeInt(rpc.IPCSkeleton.getCallingUid());
497                        reply.writeInt(rpc.IPCSkeleton.flushCommands(this));
498                        console.info("IPCSkeleton the server result success");
499                        return true;
500                    }
501                case 33:
502                    {
503                        console.info("case 33 starts");
504                        let callingPid = rpc.IPCSkeleton.getCallingPid();
505                        let callingUid = rpc.IPCSkeleton.getCallingUid();
506                        reply.writeNoException();
507                        reply.writeInt(callingPid);
508                        reply.writeInt(callingUid);
509                        reply.writeInt(this.getCallingPid());
510                        reply.writeInt(this.getCallingUid());
511                        console.info("getCallingUid the server result success");
512                        let id = rpc.IPCSkeleton.resetCallingIdentity();
513                        rpc.IPCSkeleton.setCallingIdentity(id);
514                        reply.writeInt(rpc.IPCSkeleton.getCallingPid());
515                        reply.writeInt(rpc.IPCSkeleton.getCallingUid());
516                        reply.writeInt(rpc.IPCSkeleton.flushCommands(this));
517                        console.info("IPCSkeleton the server result success");
518                        return true;
519                    }
520                case 34:
521                    {
522                        console.info("case 34 start");
523                        let listeners = data.readRemoteObjectArray();
524                        console.info("The server's readRemoteObjectArray result is " + listeners.length);
525                        let num = data.readInt();
526                        let str = data.readString();
527                        let len = listeners.length;
528                        console.info("num is:" + num + "str is:" + str + "len is:" + len);
529                        for (let i = 0; i < len; i++) {
530                            let option2 = new rpc.MessageOption();
531                            let data2 = rpc.MessageParcel.create();
532                            let reply2 = rpc.MessageParcel.create();
533                            data2.writeInt(num);
534                            data2.writeString(str);
535                            console.info("case 34 start sendRequest");
536                            listeners[i].sendRequest(1, data2, reply2, option2)
537                                .then(function(result) {
538                                    console.info("send request done, error code: " + result.errCode);
539                                    console.info("result:" + reply2.readBoolean());
540                                })
541                                .catch(function(e) {
542                                    console.error("send request got exception: " + e);
543                                })
544                                .finally(() => {
545                                    data2.reclaim();
546                                    reply2.reclaim();
547                                    console.info("case 34 test done");
548                                })
549                        }
550                        reply.writeNoException();
551                        return true;
552                    }
553                case 35:
554                    {
555                        console.info("case 35 start");
556                        let listeners = new Array(3);
557                        data.readRemoteObjectArray(listeners);
558                        let num = data.readInt();
559                        let str = data.readString();
560                        for (let i = 0; i < listeners.length; i++) {
561                            let option2 = new rpc.MessageOption();
562                            let data2 = rpc.MessageParcel.create();
563                            let reply2 = rpc.MessageParcel.create();
564                            data2.writeInt(num);
565                            data2.writeString(str);
566                            console.info("case 35 start sendRequest");
567                            listeners[i].sendRequest(1, data2, reply2, option2)
568                                .then(function(result) {
569                                    console.info("send request done, error code: " + result.errCode + ", index: " + i);
570                                })
571                                .catch(function(e) {
572                                    console.error("send request got exception: " + e);
573                                })
574                                .finally(() => {
575                                    data2.reclaim();
576                                    reply2.reclaim();
577                                    console.info("case 35 test done");
578                                })
579                        }
580                        reply.writeNoException();
581                        return true;
582                    }
583                case 36:
584                    {
585                        console.info("case 36 start");
586                        let tmp = data.readInterfaceToken();
587                        console.info("The server's getSize and readInterfaceToken result is " + tmp.length);
588                        let result =  reply.writeInterfaceToken(tmp);
589                        console.info("The server's setSize and writeInterfaceToken result is " + result);
590                        return true;
591                    }
592                case 37:
593                    {
594                        console.info("case 37 start");
595                        let tmp1 = data.readString();
596                        console.info("onRemoteRequest readstring is " + tmp1);
597                        let result =  reply.writeString("onRemoteMessageRequest invoking");
598                        console.info("onRemoteRequest writestring is " + result);
599                        return true;
600                    }
601                default:
602                    this.onRemoteRequest(code, data, reply, option);
603            }
604        } catch (error) {
605            console.info("onRemoteMessageRequest: " + error);
606        }
607        return false
608    }
609}
610
611export default class ServiceAbility extends ServiceExtension {
612    onCreate(want) {
613        // Called to return a FormBindingData object.
614        console.info("IpcStageServer ServiceAbility onCreate");
615    }
616
617    onConnect(want) {
618        // Called when the form provider is notified that a temporary form is successfully
619        console.info("IpcStageServer ServiceAbility onConnect");
620        return new Stub("rpcTestAbility");
621    }
622
623    onDisconnect(want) {
624        // Called to notify the form provider to update a specified form.
625        console.info("IpcStageServer ServiceAbility onDisconnect");
626    }
627
628    onRequest(want, startId){
629        console.info("IpcStageServer ServiceAbility onRequest");
630    }
631
632    onDestroy() {
633        // Called to notify the form provider that a specified form has been destroyed.
634        console.info("IpcStageServer ServiceAbility onCronDestroyeate");
635    }
636};