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