• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 InterfaceToken = data.readInterfaceToken();
318                        let listeners = data.readRemoteObjectArray();
319                        console.info("readRemoteObjectArray is " + listeners.length + "readInterfaceToken: " + InterfaceToken);
320                        for (let i = 0; i < listeners.length; i++) {
321                            let option2 = new rpc.MessageOption();
322                            let data2 = rpc.MessageParcel.create();
323                            let reply2 = rpc.MessageParcel.create();
324                            data2.writeInt(123);
325                            data2.writeString("rpcListenerTest");
326                            listeners[i].sendRequest(1, data2, reply2, option2)
327                                .then(function(result) {
328                                    console.info("send request done, error code: " + result.errCode + ", index: " + i);
329                                })
330                                .catch(function(e) {
331                                    console.error("send request got exception: " + e);
332                                })
333                                .finally(() => {
334                                    data2.reclaim();
335                                    reply2.reclaim();
336                                    console.info("case 24 test done");
337                                })
338                        }
339                        console.info("The server's writeRemoteObjectArray result is " + result);
340                        return true;
341                    }
342                case 25:
343                    {
344                        console.info("case 25 start");
345                        let tmp1 = data.readByte();
346                        let tmp2 = data.readShort();
347                        let tmp3 = data.readInt();
348                        let tmp4 = data.readLong();
349                        let tmp5 = data.readFloat();
350                        let tmp6 = data.readDouble();
351                        let tmp7 = data.readBoolean();
352                        let tmp8 = data.readChar();
353                        let tmp9 = data.readString();
354                        let s = new MySequenceable(null, null);
355                        let tmp10 = data.readParcelable(s);
356                        let result1 =  reply.writeByte(tmp1);
357                        let result2 =  reply.writeShort(tmp2);
358                        let result3 =  reply.writeInt(tmp3);
359                        let result4 =  reply.writeLong(tmp4);
360                        let result5 =  reply.writeFloat(tmp5);
361                        let result6 =  reply.writeDouble(tmp6);
362                        let result7 =  reply.writeBoolean(tmp7);
363                        let result8 =  reply.writeChar(tmp8);
364                        let result9 =  reply.writeString(tmp9);
365                        let result10 =  reply.writeParcelable(s);
366                        return true;
367                    }
368                case 26:
369                    {
370                        console.info("case 26 start");
371                        let tmp1 = data.readByteArray();
372                        let tmp2 = data.readShortArray();
373                        let tmp3 = data.readIntArray();
374                        let tmp4 = data.readLongArray();
375                        let tmp5 = data.readFloatArray();
376                        let tmp6 = data.readDoubleArray();
377                        let tmp7 = data.readBooleanArray();
378                        let tmp8 = data.readCharArray();
379                        let tmp9 = data.readStringArray();
380                        let s = [new MySequenceable(null, null), new MySequenceable(null, null),
381                        new MySequenceable(null, null)];
382                        let tmp10 = data.readParcelableArray(s);
383                        let result1 =  reply.writeByteArray(tmp1);
384                        let result2 =  reply.writeShortArray(tmp2);
385                        let result3 =  reply.writeIntArray(tmp3);
386                        let result4 =  reply.writeLongArray(tmp4);
387                        let result5 =  reply.writeFloatArray(tmp5);
388                        let result6 =  reply.writeDoubleArray(tmp6);
389                        let result7 =  reply.writeBooleanArray(tmp7);
390                        let result8 =  reply.writeCharArray(tmp8);
391                        let result9 =  reply.writeStringArray(tmp9);
392                        let result10 =  reply.writeParcelableArray(s);
393                        return true;
394                    }
395                case 27:
396                    {
397                        console.info("case 27 start");
398                        var ashmem = data.readAshmem();
399                        console.info("The server's readAshmem result is " + ashmem);
400                        var gongx = ashmem.mapReadOnlyAshmem();
401                        console.info("The server's gongxiang result is " + gongx);
402                        let huoqu = ashmem.getAshmemSize();
403                        console.info("The server's huoqu result is " + huoqu);
404                        let bytes = ashmem.readFromAshmem(huoqu, 0);
405                        console.info("The server's readFromAshmem result is " + bytes);
406                        let err = reply.writeNoException();
407                        console.info("The server's writeNoException result is " + err);
408                        var resultInt = reply.writeInt(bytes.length);
409                        console.info("The server's writeInt result is " + resultInt);
410                        let result =  reply.writeAshmem(ashmem);
411                        console.info("The server's writeAshmem result is " + result);
412                        ashmem.unmapAshmem();
413                        console.info("unmapAshmem success " );
414                        ashmem.closeAshmem();
415                        console.info("closeAshmem success ");
416                        return true;
417                    }
418                case 28:
419                    {
420                        console.info("case 28 start");
421                        let s = new MySequenceable(null, null);
422                        var tmp1 = data.readParcelable(s);
423                        console.info("The server's readParcelable result is " + s);
424                        var result =  reply.writeParcelable(s);
425                        console.info("The server's writeParcelable result is " + s);
426                        return true;
427                    }
428                case 29:
429                    {
430                        console.info("case 29 start");
431                        var tmp1 = data.readShort();
432                        var tmp2 = data.readShort();
433                        var tmp3 = data.readShort();
434                        var tmp4 = data.readShort();
435                        var tmp5 = data.readShort();
436                        console.info("The server's readShort result is " + tmp1 + tmp2 + tmp3 + tmp4 + tmp5);
437                        var result1 =  reply.writeShort(tmp1);
438                        var result2 =  reply.writeShort(tmp2);
439                        var result3 =  reply.writeShort(tmp3);
440                        var result4 =  reply.writeShort(tmp4);
441                        var result5 =  reply.writeShort(tmp5);
442                        console.info("The server's writeShort result is " + result1);
443                        return true;
444                    }
445                case 30:
446                    {
447                        console.info("case 30 start");
448                        var tmp1 = data.readByte();
449                        var tmp2 = data.readByte();
450                        var tmp3 = data.readByte();
451                        var tmp4 = data.readByte();
452                        var tmp5 = data.readByte();
453                        console.info("The server's readByte result is " + tmp1 + tmp2 + tmp3 + tmp4 + tmp5);
454                        var result1 =  reply.writeByte(tmp1);
455                        var result2 =  reply.writeByte(tmp2);
456                        var result3 =  reply.writeByte(tmp3);
457                        var result4 =  reply.writeByte(tmp4);
458                        var result5 =  reply.writeByte(tmp5);
459                        console.info("The server's writeByte result is " + result1);
460                        return true;
461                    }
462                case 31:
463                    {
464                        console.info("case 31 start");
465                        var tmp1 = data.readInt();
466                        var tmp2 = data.readInt();
467                        var tmp3 = data.readInt();
468                        var tmp4 = data.readInt();
469                        var tmp5 = data.readInt();
470                        console.info("The server's readInt result is " + tmp1 + tmp2 + tmp3 + tmp4 + tmp5);
471                        var result1 =  reply.writeInt(tmp1);
472                        var result2 =  reply.writeInt(tmp2);
473                        var result3 =  reply.writeInt(tmp3);
474                        var result4 =  reply.writeInt(tmp4);
475                        var result5 =  reply.writeInt(tmp5);
476                        console.info("The server's writeInt result is " + result1);
477                        return true;
478                    }
479                case 32:
480                    {
481                        console.info("case 32 start");
482                        let callingPid = rpc.IPCSkeleton.getCallingPid();
483                        let callingUid = rpc.IPCSkeleton.getCallingUid();
484                        let callingDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
485                        let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
486                        let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
487                        reply.writeNoException();
488                        reply.writeInt(callingPid);
489                        reply.writeInt(callingUid);
490                        reply.writeString(callingDeviceID);
491                        reply.writeString(localDeviceID);
492                        reply.writeBoolean(isLocalCalling);
493                        reply.writeInt(this.getCallingPid());
494                        reply.writeInt(this.getCallingUid());
495                        console.info("getCallingUid the server result success");
496                        let id = rpc.IPCSkeleton.resetCallingIdentity();
497                        rpc.IPCSkeleton.setCallingIdentity(id);
498                        reply.writeInt(rpc.IPCSkeleton.getCallingPid());
499                        reply.writeInt(rpc.IPCSkeleton.getCallingUid());
500                        reply.writeInt(rpc.IPCSkeleton.flushCommands(this));
501                        console.info("IPCSkeleton the server result success");
502                        return true;
503                    }
504                case 33:
505                    {
506                        console.info("case 33 starts");
507                        let callingPid = rpc.IPCSkeleton.getCallingPid();
508                        let callingUid = rpc.IPCSkeleton.getCallingUid();
509                        reply.writeNoException();
510                        reply.writeInt(callingPid);
511                        reply.writeInt(callingUid);
512                        reply.writeInt(this.getCallingPid());
513                        reply.writeInt(this.getCallingUid());
514                        console.info("getCallingUid the server result success");
515                        let id = rpc.IPCSkeleton.resetCallingIdentity();
516                        rpc.IPCSkeleton.setCallingIdentity(id);
517                        reply.writeInt(rpc.IPCSkeleton.getCallingPid());
518                        reply.writeInt(rpc.IPCSkeleton.getCallingUid());
519                        reply.writeInt(rpc.IPCSkeleton.flushCommands(this));
520                        console.info("IPCSkeleton the server result success");
521                        return true;
522                    }
523                case 34:
524                    {
525                        console.info("case 34 start");
526                        let listeners = data.readRemoteObjectArray();
527                        console.info("The server's readRemoteObjectArray result is " + listeners.length);
528                        let num = data.readInt();
529                        let str = data.readString();
530                        let len = listeners.length;
531                        console.info("num is:" + num + "str is:" + str + "len is:" + len);
532                        for (let i = 0; i < len; i++) {
533                            let option2 = new rpc.MessageOption();
534                            let data2 = rpc.MessageParcel.create();
535                            let reply2 = rpc.MessageParcel.create();
536                            data2.writeInt(num);
537                            data2.writeString(str);
538                            console.info("case 34 start sendRequest");
539                            listeners[i].sendRequest(1, data2, reply2, option2)
540                                .then(function(result) {
541                                    console.info("send request done, error code: " + result.errCode);
542                                    console.info("result:" + reply2.readBoolean());
543                                })
544                                .catch(function(e) {
545                                    console.error("send request got exception: " + e);
546                                })
547                                .finally(() => {
548                                    data2.reclaim();
549                                    reply2.reclaim();
550                                    console.info("case 34 test done");
551                                })
552                        }
553                        reply.writeNoException();
554                        return true;
555                    }
556                case 35:
557                    {
558                        console.info("case 35 start");
559                        let listeners = new Array(3);
560                        data.readRemoteObjectArray(listeners);
561                        let num = data.readInt();
562                        let str = data.readString();
563                        for (let i = 0; i < listeners.length; i++) {
564                            let option2 = new rpc.MessageOption();
565                            let data2 = rpc.MessageParcel.create();
566                            let reply2 = rpc.MessageParcel.create();
567                            data2.writeInt(num);
568                            data2.writeString(str);
569                            console.info("case 35 start sendRequest");
570                            listeners[i].sendRequest(1, data2, reply2, option2)
571                                .then(function(result) {
572                                    console.info("send request done, error code: " + result.errCode + ", index: " + i);
573                                })
574                                .catch(function(e) {
575                                    console.error("send request got exception: " + e);
576                                })
577                                .finally(() => {
578                                    data2.reclaim();
579                                    reply2.reclaim();
580                                    console.info("case 35 test done");
581                                })
582                        }
583                        reply.writeNoException();
584                        return true;
585                    }
586                case 36:
587                    {
588                        console.info("case 36 start");
589                        let tmp = data.readInterfaceToken();
590                        console.info("The server's getSize and readInterfaceToken result is " + tmp.length);
591                        let result =  reply.writeInterfaceToken(tmp);
592                        console.info("The server's setSize and writeInterfaceToken result is " + result);
593                        return true;
594                    }
595                case 37:
596                    {
597                        console.info("case 37 start");
598                        let tmp1 = data.readString();
599                        console.info("onRemoteRequest readstring is " + tmp1);
600                        let result =  reply.writeString("onRemoteMessageRequest invoking");
601                        console.info("onRemoteRequest writestring is " + result);
602                        return true;
603                    }
604                default:
605                    this.onRemoteRequest(code, data, reply, option);
606            }
607        } catch (error) {
608            console.info("onRemoteMessageRequest: " + error);
609        }
610        return false
611    }
612}
613
614export default class ServiceAbility extends ServiceExtension {
615    onCreate(want) {
616        // Called to return a FormBindingData object.
617        console.info("IpcStageServer ServiceAbility onCreate");
618    }
619
620    onConnect(want) {
621        // Called when the form provider is notified that a temporary form is successfully
622        console.info("IpcStageServer ServiceAbility onConnect");
623        return new Stub("rpcTestAbility");
624    }
625
626    onDisconnect(want) {
627        // Called to notify the form provider to update a specified form.
628        console.info("IpcStageServer ServiceAbility onDisconnect");
629    }
630
631    onRequest(want, startId){
632        console.info("IpcStageServer ServiceAbility onRequest");
633    }
634
635    onDestroy() {
636        // Called to notify the form provider that a specified form has been destroyed.
637        console.info("IpcStageServer ServiceAbility onCronDestroyeate");
638    }
639};