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