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};