From 3a33cbaa7f2ecf2f043890ec596173f382c00811 Mon Sep 17 00:00:00 2001 From: wusongqing Date: Mon, 23 May 2022 09:47:34 +0800 Subject: [PATCH] Added idl-guidelines.md EN Signed-off-by: wusongqing --- .../IDL/figures/IDL-interface-description.png | Bin 0 -> 76084 bytes .../figures/IPC-RPC-communication-model.png | Bin 0 -> 20805 bytes en/application-dev/IDL/idl-guidelines.md | 661 ++++++++++++++++++ 3 files changed, 661 insertions(+) create mode 100644 en/application-dev/IDL/figures/IDL-interface-description.png create mode 100644 en/application-dev/IDL/figures/IPC-RPC-communication-model.png create mode 100644 en/application-dev/IDL/idl-guidelines.md diff --git a/en/application-dev/IDL/figures/IDL-interface-description.png b/en/application-dev/IDL/figures/IDL-interface-description.png new file mode 100644 index 0000000000000000000000000000000000000000..c7acc5c490e1aef26ceeafaffd0f63675cc2d488 GIT binary patch literal 76084 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/IDL/figures/IPC-RPC-communication-model.png b/en/application-dev/IDL/figures/IPC-RPC-communication-model.png new file mode 100644 index 0000000000000000000000000000000000000000..0af6b9fef057703ab2b00ef9153e73df87d4176b GIT binary patch literal 20805 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%0A*S1-@N9Mii}IPr2b< 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%0DYxwE%Z(;tV-la%}UUw`jV7C14_j1|jp#npb- zcIBUbb*ui#Bwum?fvwE4OjD?#*sCx7+bJ^z{Lfns@NM$?pl|y2p!f@J@@K|@`@Q?I zc*^&HVyYSR-fPdMTwmq`7v=s!Vgf?C``ZLj{1BqyL*bA_`QFq$KIwwvlI+rL2=w#W zt*qev-r21bcE~Z>XM35y<7sK}BA8eS5EuanjlXVt=$X7at1ao;Y>e0wDF5bdFwB{-uC#Gf}OT2C`GbagF2hEg~<*b?C2a2?u3B*$S; zD5;e!EcAeJ3GK5ZP^w)y7}*FbA^RfJmFiTOz+0ZneJTsNN#>FAQ#-1 zk1X)vKM0XUyaN)-YwL~sL&JB*`R5pw1&^o-2+nu7UTOO(ua{y$e@gv=Hm;Q8d-9lNwaNre(M+_YaxJ3ROt~)1&0yy?62ChIl zx2SrUvBjF3x_j5XJ-K$24K!Q6xiZDn71VG8QccBTKJVG8IyAR`UMqR$@~^lqg$*aD zY8FAOaq4Bu-$v=4hT;1Pjnp?;j8mXl_3R)Zz?g~`mAm~O6rfu%k!a6QVtTm(5#H*? zorxP`i8Ouyh=$u`;Xs&G`u1X9QOW^xq&Ogf809}iLE)KIMF&yGg?B68rJ2^}!w#Zm zl`a!)39`@k=bZLuMf3`c6^$kHn1t%of(!NIPt^a6?C(`y(||Z1a3ye`zTRl`>URt( z61|ZfusGaDr{Gb?MrSHT%+_bRTNAiw(<;nB9rPz<$XXjeo7RF&bIyJ4&pZ zpOoJr&u8`(*?XYr1p2pG~~W9SYLST7X|80b-vAjSV)_GWC{g5-mBA;^{A1IdS@(msthd+Zo54WD9MHCjD8bOJnOs6i{hD8M zk@q+LCwJL2o@4%wHm!ZW7+cd4DNTWf9t7j%1BND0y%Lwrm<8%E*+sT+y57q*nd(88 zSdFz8F=th~)X3AL`C7`C(cM9nf|P5wrZXZPj3VhL<*x?;9e_Z~lTo6?w*bXsC?Pt( zw^3wgVs27jGM9Qef+0$)(7t%WW&B^tb3OS>teAQq40nRow+HOLKtA@JP{p0U2dt1o zvoCJCIz;Muodt{zBxZ9VT*3X@TT$JS1lu2+`3bS3O@@wApmDtQT@u6W04Zqb03IwTw(IULLkr}uJ+P(3tBKP;_l z9WWEDBv2U5;PqU!rd%7uB%ud4*jF#n&ire{g8&s`L0bnWn9&k(kVuLMm!Bp-@0-Y{ z@6J4Jp<2Awmk6GG>ETcf{T&4iIqrA@=RxMgf3B#S-U&ydN}__Kll$Q_FE10Go5*F9 za#ZY-x4Yhqhpe9C|~u%5s{yFdVWzghtrrl-NB5 zk`bYEY5hePiWR=AG_#&_h0_gncLhY1z5!ge$=Mm!^@!Q%-zRU;DjW43+7snhu-!QW z&m>I-PqQNt;iW!fI{mjxJv!2g-{_$E5gGuS?7R?gZoS%E4~!Jem{4HmmmMSI-hUgi zw>d@RrDT)ZY82`XB-yBI(P^j*3r?00e9{qlQIF!j+ud0t3L z2oMx2p@jz?pn>^0a74VYisQz+zjxeiWwd9aa}Z>EDLaSe5as7aT*5;)szo@MvmQbajcdXGVF%$nXQ=+ByE4!2q#<30N0*z)Kk<=pMoU{FQJG#Q=1F zEY0iA@|P>j(WXd1ca_;Au20XP+Fm7$NuP#uJM{9}+U*YojMUDv9xnhSNTjWN#xo8L zsc}G&tIsI7*W`L#4X4d&Y`va7yLv)SMAtK44I+59>v?TO{n}IFNN88=??*Qp-U7C1;+EGH5a^sF zyDdDY#3JH=qE;86aX$#iGWTj8GHD9WacFRvFVCN+1Y>q?H13qu?`_TbZ;ah%I_)hB zGrh{&KLEMUh1Yr+3jp!I)FA zul1u-GV%+St=*c90P6&GFC$z}OXw~TDuEs4bu(%TmmdO1O|7S79Xw0kEl0~ZH4JJb z*+aLNjK1P6+!jYfN7C1_Csrog%ft4!M~Ziw4qbUQdKW-9xM+w3&w(@QHrE=8I&#KE zJaprA2w-Cuo;U#vfgFe)ztBj?I=bI%Y)Wgtwjlp=)fEm9Xa*pY7*gy#QYne7#gP$! z0HbPu;23iL_7sc)e$5xn)uFz4Yi_WX1dxcrlL0;;+t9-iayP8F^lP)A)*rjYf;y+y zo+HOEoBH$~#mSKXzhN`iSJYeyB=^roK%NATH`cE)zUs%Go8Q{k+TU4G0?gez9*%s! zAFHzkC3LoE#l$A3{Vh~~h7c$`SVHLYQ*OTHd3J$YeciKv zh>s4)iAj#sFI6Lb{mwuv|=yQub=s;$4*p7*J6csFe3gzPM}7N?}kFD7>d^+J~bUL8r2 z{eZy8$F3L!h<8&@B93Q!p|0dw)nac!QVd}I0ry^thyX|p`9Z(zz3V5~L0lpl)K%Vo zc2JxaCwrjZ^y~X{96SF`)|Hc?yR81ccY!O>E%yd2bRqm=g*a}0*PZQ={WJ*>2rdUy z&-muZvAy&AidHFrOa?XgcSu3=mHl3OJDawG8(GIV!9qPYY$B>}0kE>D`P1-ZY+&yye4xtyCA@ufFs@(^Kqy7yaR}oQQ>N0*Q>;r(|_;Wz;Nz(|T ztA}9LfEFhtq(E>cNWyf~op1PQ>D4$X)IK*)bKFPFaX&+MU$qrBi#;q2_4 zaUTz}uj(}shv);Jgq^&Y#JVDTp8sfrSxZ%;_~{CXQ+g19esgfc>4gIHp{SOgs!;ecy_@M z^e-h>Bxqv%VWPZFS>aYYB};6R-&5y|xfI>Q8G1U~Nyp9I$C+(R3?vtTjD}cr1Zes;H+M-MfAGp5?K@hm%UDHI>>7#6#R}G;Cy6 z;(FV-xNs`GAlAzpOAc>uN5q^_Xu&KGSf~w@VN8r+d=CI09?l8i?Eh9a_`jZ{zN(as zZc!$Ph6b*B1|U#$QkkDd>uc?;*QpBJ>^Fu<`5|iyD)_DnN)50>Po(q~B-(V$3%+&M zs=MZ3VcP;3&C@zk9h+$b7@eZPqVXOp2EJ?+;63&)R@DJv;WWZ`#w=tb}-l zfc1eFwpkaxZHN>oJvtS0D9K9SRr`PbRQF#e^uOZ0hq%fc4QP+Bkk{Y#rWUWwud1VJ zW+pwp{;BV1YnEA_8!zb_IBwbh&%O>iqp>Bsy?3fz($6%eq90q-^c{qB#NRoq ze{PMXg4eJ%c5+fG-)T*-Lf5x~h?!3;SL*>}lP~!(wrOp-nJwne5A7JjWYXN9FSj?9 zn^dQ34E8e~68g)RYg=Ys>}h0%@Q=Lq{d6;_#LoNpFdDy~R$J9Ib%u`2ivFheDNmfM z^;{{*RoG@`=cI$!Ti01qfz_u*r;$oc(z-yNDg0BfJq3TeJvsj8#%--m(&A8UgvQ2f zRJvs=YvkSnG3yL2I53CQJ@RAGB)Af?s`jJ7ikhX4?X1OX?cLcTroF0a*`42AuZHGw zEBPh0ECj7j9m`&Mwo$u1*Aiwu@6kBAC{;lGCogb7sNLQU=|?b-EEw3h0v z4&8mD-qNzuo}G^$+FuCugP z`PHDLa5cz^(#CI|RLhzYvq@gs{*+@`<#LZDMt%^Z;%!>PAU<8L7Dh1z z?>_dOBl6G3YF{Y7@Y(XoA^9?K0Z*@@B+O$bxCFM zn5eQVA zY3NvsAq2+VZWQ7a+6qM_m6ZJ4eK=Ji6@3BUd}b13AT^p2uZ}fid2Ls zSrH|bEXi?BYqlgthi4s@vuRGF=-{mT4r@7VjM&Onwc5D(m*}ioLHsWiZG{2+xjJ^YJcv)u9!!o$R%z<{KMGVo(GDF**gbub(Z0H zlIwAVq;DotST)Vf0?DItHf49Hx%@lKj5JOr%~~rvQ+ao+&8a@cNF_iuY}DjSt3^{&k3VefDy8wbrgn z7MsIv$4svYz_=Kip`A1a+?4LvRkun^W@{SI7?Mh<0zQK7PUV8g9u6UNAUk6qw&KaD zcb4I7D`hYRz+yb+hu?5p1qe$ORf9T4uyt(<&S@6qhwGkjQjj`zWla;@n@@&#wJoi^ zgZYxVMUHr>_FnUX-ynidsFE7Gk|qVPAB|m_pmzca4{a4V{XGi~C00 zo(`2l8?uKA2cmTjY&FnDXLpxDUyywi(y=mElvjtSLn3G>*+z+Uq_x=P%&N0WazhDt zw$J>Ck8clN9z2RmPwzK{?QA6mMlttZm zC-)}<7ZFuFCIFj4mQd=qUgMK})R*4)c0lHO0!46Twget5%-6P8gCCsB{sRoDU;)MA zRRkGnpDwrt_997*1&>6bL)qTzUUd;RKw`IFg@`crls zk;{-<^B*f_VwvB9n=U$7P30c(GOIX1`8=1GAC3{zrxz-wfRczaQ$hNllHLzl7J@gd zGi?cgt||g}vfCpBuh!n}^s?h!qx+Zoz*8EDVQ{ludG97ZJWPLfV#m?$@o%tKhjtj8 zf;Tn2i{PYy;Fwnb{DfQqZOrRAUK1w=>%+Wn4gM8ikD&kdVQCacSsrLe*lOz4j&7!! zv03BG4)%VI-q99;CfWCB)?S6MXD6a6cJHu;xZE!)htr8&Mm!`Onb0`f_5rpRC{Bf5 zA&Go2o%HDlY~n$6Xe$-pZLQ+FnuqjUemNy;0$Ay3(J#ZCY4ikSjAO`0z6VFGP$$4k z?Y}P}65^q}r$xQ&J-%>VWi;w0(GR1j7-*;7xPfY+Tne#hV*r;`D7;Pz+$Mm*@Rw$O zD7~VtGTaYy%p3Q$zJf9~i2AJ@&)62v>ekUkj(KkF9qXU3Q~(Viwr=QYk*K1AOnH9# z(8GcSzk;t#7}OSFrD;%CKx1wSK}ho zUF=4e(>2UZY|G?|S?@H@7Wo(RWdERiyHQiuO{idsXm5_O<7ZQzbl6OVfD6|fCm^OG zl3E2voj7!%It_#>ZqS5&tfQER(=yiQS_Xlb{(5uV7`QE?R;S41surc`WvH(lJObZL zIT*v!mMdfUr6}eMaJ#I3Nwr^_b?r63bwo9e!ddTF!H&k<;+E6O6U|1Fr^@`a^8psM zH^Iggg_BP+3B%-rM=ZpnU*Vt}ko>HWdYs^%Nd-gFsKVhU$??Of%+eofiQMl*b>90h zOyNQEWyEyX+lavHbR%I`x!QBqCS`N3x(g^A?kHIHL%zxPEb#?f^{g2wkQb%AfL zdfY3rre>Uh_nv1l<~vyY*Zi4beJse*JyRuoHfN8!#B=xg^hC&=BsY3}6-JY^gBVQz zN?C#I>NqTmxp|$NubQ&lJ$Hf6m*lj54 zS^4a-2Hl`un&IB;pmXhkzl@Egpw{sGZMD@W=gjlU$fE$dL@J=rPo>=lV6FJ;gDh%j z?#IO!=OuBDN-7*%e=t)INFhZm^ksj*P(>i+0^}9x>iKMTIn@NQT~qJzc7k-5KJ9J6 z6cppz5p?|v{lxjmc@Wktej)H-EW$*&iG6R6EC|6=ANsVyZ^mkAVWaa5r7(_`mb>80 zx>3!zwrkYGhR-L-1o>uqW)7f|odtO;L~W+7!_{LqG^SoGyL4wjp_ZZFikX0Chut;I z$ojh9C^;RXqPYEoTx9eeu7NA`d@rqx<~p5?Nj}n#V*P8H9Zjc8Mss~0mXHiyp~*A+ zKLpBuN_zgcu=;Oa`!>h8E%J8kpMTeGTjsWU%#WM**jFNrbbkcrj+i;i%iS)(Hackt zO7A%y*Y#4{m#X3OxMLc5_i?4pNf;EM{x`U}EjUmxE_kN^Mx literal 0 HcmV?d00001 diff --git a/en/application-dev/IDL/idl-guidelines.md b/en/application-dev/IDL/idl-guidelines.md new file mode 100644 index 0000000000..66b45bd4c0 --- /dev/null +++ b/en/application-dev/IDL/idl-guidelines.md @@ -0,0 +1,661 @@ +# OpenHarmony IDL Specifications and User Guide + +## IDL Overview +To ensure successful communications between the client and server, interfaces recognized by both parties must be defined. The OpenHarmony Interface Definition Language (IDL) is a tool for defining such interfaces. OpenHarmony IDL decomposes objects to be transferred into primitives that can be understood by the operating system and encapsulates cross-boundary objects based on developers' requirements. + +**Figure 1** IDL interface description + +![IDL-interface-description](./figures/IDL-interface-description.png) + +IDL provides the following functions: + +- Declares interfaces provided by system services for external systems, and based on the interface declaration, generates C, C++, JS, or TS code for inter-process communication (IPC) or remote procedure call (RPC) proxies and stubs during compilation. + +- Declares interfaces provided by abilities for external systems, and based on the interface declaration, generates C, C++, JS, or TS code for IPC or RPC proxies and stubs during compilation. + +**Figure 2** IPC/RPC communication model + +![IPC-RPC-communication-model](./figures/IPC-RPC-communication-model.png) + +IDL has the following advantages: + +- Services are defined in the form of interfaces in IDL. Therefore, you do not need to focus on implementation details. + +- Interfaces defined by IDL can be used in IPC or RPC scenarios. The information or code generated based on the definitions in IDL simplifies IPC or RPC implementation. + +## IDL File Structure + +### Data Types + +#### Primitive Type +| IDL Primitive Type| C++ Primitive Type| TS Primitive Type| +| -------- | -------- | -------- | +|void | void | void | +|boolean | bool | boolean | +|byte | int8_t | number | +|short | int16_t | number | +|int | int32_t | number | +|long | int64_t | number | +|float | float | number | +|double | double | number | +|String | std::string | string | + +The preceding table lists the primitive types supported by IDL and the mappings to the C++ and TS primitive types. + +#### sequenceable Type +The sequenceable type is declared using the keyword **sequenceable**. This type can be passed during IPC or RPC through **Parcel** objects. The declaration mode of the sequenceable type in C++ is different from that in TS. + +In C++, the declaration is placed in the file header in the format of **sequenceable includedir..namespace.typename**. It can be in any of the following forms: + +``` +sequenceable includedir..namespace.typename +sequenceable includedir...typename +sequenceable namespace.typename +``` +In the preceding information, **includedir** indicates the directory where the header file of the type is located, and the dot (.) is used as the separator. **namespace** indicates the namespace where the type is located, and the dot (.) is used as the separator. **typename** indicates the data type, which can contain only English characters. **includedir** and **namespace** are separated by two dots (..). If the declaration statement does not contain two dots, all characters except the last typename will be parsed as a namespace. Example: +``` +sequenceable a.b..C.D +``` +The preceding statement is parsed into the following code in the C++ header file: +``` +#include "a/b/d.h" +using C::D; +``` +In TS, the declaration is placed in the file header in the format of **sequenceable namespace.typename;**. It can be in the following form: + +``` +sequenceable idl.MySequenceable +``` + +In the preceding information, **namespace** indicates the namespace to which the data type belongs, **typename** indicates the data type name, and **MySequenceable** indicates that data can be passed during IPC using **Parcel** objects. The sequenceable type is not defined in the IDL file, but in the .ts file. Therefore, IDL adds the following statement to the generated .ts file based on the declaration: + +``` +import MySequenceable from "./my_sequenceable" +``` + +Note that IDL does not implement code for this type. It only imports the header file in the specified format or imports the specified module and uses the type. Therefore, you must ensure that the imported directory, namespace, and type are correct. + +#### Interface Type +The interface type refers to interfaces defined in IDL files. The interfaces defined in an IDL file can be directly used as the parameter type or return value type of a method declared in the file. If an IDL file attempts to use interfaces defined in other IDL files, forward declaration must be contained in the header of that IDL file. + +The declaration form in C++ is similar to that of the sequenceable type. The declaration form is as follows: + +``` +interface includedir..namespace.typename +``` + +In TS, the declaration form is as follows: + +``` +interface namespace.interfacename +``` + +In the preceding information, **namespace** indicates the namespace to which the interface belongs, and **interfacename** indicates the name of the interface. For example, **interface OHOS.IIdlTestObserver;** declares the **IIdlTestObserver** interface defined in another IDL file. This interface can be used as the parameter type or return value type of a method in the current file. IDL adds the following statement to the generated .ts file based on the statement: + +``` +import IIdlTestObserver from "./i_idl_test_observer" +``` + +#### Array Type +The array type is represented by T[], where **T** can be the primitive, sequenceable, interface, or array type. In C++, this type is generated as **std::vector<T>**. +The table below lists the mappings between the IDL array type and TS and C++ data types. + +|IDL Data Type | C++ Data Type | TS Data Type | +| -------- | -------- | -------- | +|T[] | std::vector<T> | T[] | + +#### Container Type +IDL supports two container types: List and Map. The List container is represented in the format of **List<T>**. The Map container is represented in the format of **Map**, where **T**, **KT**, and **VT** can be of the primitive, sequenceable, interface, array, or container type. + +In C++, the List container type is generated as **std::list**, and the Map container type is generated as **std::map**. + +In TS, the List container type is not supported, and the Map container type is generated as **Map**. + +The table below lists the mappings between the IDL container type and TS and C++ data types. + +|IDL Data Type | C++ Data Type | TS Data Type | +| -------- | -------- | -------- | +|List<T> | std::list | Not supported| +|Map | std::map | Map | + + +### Specifications for Compiling IDL Files +Only one interface type can be defined in an IDL file, and the interface name must be the same as the file name. The interface definition of the IDL file is described in Backus-Naur form (BNF). The basic definition format is as follows: +``` +[<*interface_attr_declaration*>]interface<*interface_name_with_namespace*>{<*method_declaration*>} +``` +In the preceding information, <*interface_attr_declaration*> declares interface attributes. Currently, only the **oneway** attribute is supported, indicating that all methods in the interface are unidirectional. Such a method returns value without waiting for the execution to complete. This attribute is optional. If this attribute is not set, synchronous call is used. The interface name must contain the complete interface header file directory, namespace, and method declaration. Empty interfaces are not allowed. +The method declaration format in the interface is as follows: +``` +[<*method_attr_declaration*>]<*result_type*><*method_declaration*> +``` +In the preceding information, <*method_attr_declaration*> describes the interface attributes. Currently, only the **oneway** attribute is supported, indicating that the method is unidirectional. Such a method returns value without waiting for the execution to complete. This attribute is optional. If this attribute is not set, synchronous call is used. <*result_type*> indicates the type of the return value, and <*method_declaration*> indicates the method name and parameter declaration. +The parameter declaration format is as follows: +``` +[<*formal_param_attr*>]<*type*><*identifier*> +``` +The value of <*formal_param_attr*> can be **in**, **out**, or **inout**, indicating that the parameter is an input parameter, an output parameter, or both an input and an output parameter, respectively. A **oneway** method does not allow **output** or **inout** parameters or return values. + +## How to Develop + +### Development Using C++ + +#### Creating an IDL File + + You can use C++ to create IDL files. An example IDL file is as follows: + +``` + interface OHOS.IIdlTestService { + int TestIntTransaction([in] int data); + void TestStringTransaction([in] String data); + } +``` + +You can run the **./idl -gen-cpp -d dir -c dir/iTest.idl** command (**-d** indicates the output directory) to generate the interface file, stub file, and proxy file in the **dir** directory in the execution environment. The names of the generated interface class files are the same as that of the IDL file, except that the file name extensions are **.h** and **.cpp**. For example, for **IIdlTestService.idl**, the generated files are **i_idl_test_service.h**, **idl_test_service_proxy.h**, **idl_test_service_stub.h**, **idl_test_service_proxy.cpp**, and **idl_test_service_stub.cpp**. + +#### Exposing Interfaces on the Server + +The stub class generated by IDL is an abstract implementation of the interface class and declares all methods in the IDL file. + +``` +#ifndef OHOS_IDLTESTSERVICESTUB_H +#define OHOS_IDLTESTSERVICESTUB_H +#include +#include "iidl_test_service.h" + +namespace OHOS { +class IdlTestServiceStub : public IRemoteStub { +public: + int OnRemoteRequest( + /* [in] */ uint32_t code, + /* [in] */ MessageParcel& data, + /* [out] */ MessageParcel& reply, + /* [in] */ MessageOption& option) override; + +private: + static constexpr int COMMAND_TEST_INT_TRANSACTION = MIN_TRANSACTION_ID + 0; + static constexpr int COMMAND_TEST_STRING_TRANSACTION = MIN_TRANSACTION_ID + 1; +}; +} // namespace OHOS +#endif // OHOS_IDLTESTSERVICESTUB_H +``` + +You need to inherit the interface class defined in the IDL file and implement the methods in the class. In addition, you need to register the defined services with SAMGR during service initialization. In the following code snippet, **TestService** inherits the **IdlTestServiceStub** interface class and implements the **TestIntTransaction** and **TestStringTransaction** methods. + +``` +#ifndef OHOS_IPC_TEST_SERVICE_H +#define OHOS_IPC_TEST_SERVICE_H + +#include "hilog/log.h" +#include "log_tags.h" +#include "idl_test_service_stub.h" + +namespace OHOS { +class TestService : public IdlTestServiceStub { +public: + TestService(); + ~TestService(); + static int Instantiate(); + ErrCode TestIntTransaction(int data, int &rep) override; + ErrCode TestStringTransaction(const std::string& data) override; +private: + static constexpr HiviewDFX::HiLogLabel LABEL = { LOG_CORE, LOG_ID_IPC, "TestService" }; +}; +} // namespace OHOS +#endif // OHOS_IPC_TEST_SERVICE_H +``` + +The sample code for registering a service is as follows: + +``` +#include "test_service.h" + +#include + +#include "if_system_ability_manager.h" +#include "ipc_debug.h" +#include "ipc_skeleton.h" +#include "iservice_registry.h" +#include "system_ability_definition.h" + +namespace OHOS { +using namespace OHOS::HiviewDFX; + +int TestService::Instantiate() +{ + ZLOGI(LABEL, "%{public}s call in", __func__); + auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (saMgr == nullptr) { + ZLOGE(LABEL, "%{public}s:fail to get Registry", __func__); + return -ENODEV; + } + + sptr newInstance = new TestService(); + int result = saMgr->AddSystemAbility(IPC_TEST_SERVICE, newInstance); + ZLOGI(LABEL, "%{public}s: IPC_TEST_SERVICE result = %{public}d", __func__, result); + return result; +} + +TestService::TestService() +{ +} + +TestService::~TestService() +{ +} + +ErrCode TestService::TestIntTransaction(int data, int &rep) +{ + ZLOGE(LABEL, " TestService:read from client data = %{public}d", data); + rep = data + data; + return ERR_NONE; +} + +ErrCode TestService::TestStringTransaction(const std::string &data) +{ + ZLOGE(LABEL, "TestService:read string from client data = %{public}s", data.c_str()); + return data.size(); +} +} // namespace OHOS +``` + + +#### Calling Methods from the Client for IPC + +The C++ client obtains the service proxy defined in the system through SAMGR and then invokes the interface provided by the proxy. The sample code is as follows: + +``` +#include "test_client.h" + +#include "if_system_ability_manager.h" +#include "ipc_debug.h" +#include "ipc_skeleton.h" +#include "iservice_registry.h" +#include "system_ability_definition.h" + +namespace OHOS { +int TestClient::ConnectService() +{ + auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (saMgr == nullptr) { + ZLOGE(LABEL, "get registry fail"); + return -1; + } + + sptr object = saMgr->GetSystemAbility(IPC_TEST_SERVICE); + if (object != nullptr) { + ZLOGE(LABEL, "Got test Service object"); + testService_ = (new (std::nothrow) IdlTestServiceProxy(object)); + } + + if (testService_ == nullptr) { + ZLOGE(LABEL, "Could not find Test Service!"); + return -1; + } + + return 0; +} + +void TestClient::StartIntTransaction() +{ + if (testService_ != nullptr) { + ZLOGE(LABEL, "StartIntTransaction"); + [[maybe_unused]] int result = 0; + testService_->TestIntTransaction(1234, result); // 1234 : test number + ZLOGE(LABEL, "Rec result from server %{public}d.", result); + } +} + +void TestClient::StartStringTransaction() +{ + if (testService_ != nullptr) { + ZLOGI(LABEL, "StartIntTransaction"); + testService_->TestStringTransaction("IDL Test"); + } +} +} // namespace OHOS +``` + + + + +### Development Using TS + +#### Creating an IDL File + + You can use TS to create IDL files. An example IDL file is as follows: + +``` + interface OHOS.IIdlTestService { + int TestIntTransaction([in] int data); + void TestStringTransaction([in] String data); + } +``` + +Run the **./idl -c IIdlTestService.idl -gen-ts -d /data/ts/** command (**-d** indicates the output directory) to generate the interface file, stub file, and proxy file in the **/data/ts** directory in the execution environment. The names of the generated interface class files are the same as that of the IDL file, except that the file name extension is **.ts**. For example, the files generated for the **IIdlTestService.idl** file are **i_idl_test_service.ts**, **idl_test_service_proxy.ts**, and **idl_test_service_stub.ts**. + +#### Exposing Interfaces on the Server + +The stub class generated by IDL is an abstract implementation of the interface class and declares all methods in the IDL file. + +``` +import {testIntTransactionCallback} from "./i_idl_test_service"; +import {testStringTransactionCallback} from "./i_idl_test_service"; +import IIdlTestService from "./i_idl_test_service"; +import rpc from "@ohos.rpc"; + +export default class IdlTestServiceStub extends rpc.RemoteObject implements IIdlTestService { + constructor(des: string) { + super(des); + } + + onRemoteRequest(code: number, data, reply, option): boolean { + console.log("onRemoteRequest called, code = " + code); + switch(code) { + case IdlTestServiceStub.COMMAND_TEST_INT_TRANSACTION: { + let _data = data.readInt(); + this.testIntTransaction(_data, (errCode, returnValue) => { + reply.writeInt(errCode); + if (errCode == 0) { + reply.writeInt(returnValue); + } + }); + return true; + } + case IdlTestServiceStub.COMMAND_TEST_STRING_TRANSACTION: { + let _data = data.readString(); + this.testStringTransaction(_data, (errCode) => { + reply.writeInt(errCode); + }); + return true; + } + default: { + console.log("invalid request code" + code); + break; + } + } + return false; + } + + testIntTransaction(data: number, callback: testIntTransactionCallback): void{} + testStringTransaction(data: string, callback: testStringTransactionCallback): void{} + + static readonly COMMAND_TEST_INT_TRANSACTION = 1; + static readonly COMMAND_TEST_STRING_TRANSACTION = 2; +} +``` + +You need to inherit the interface class defined in the IDL file and implement the methods in the class. The following code snippet shows how to inherit the **IdlTestServiceStub** interface class and implement the **testIntTransaction** and **testStringTransaction** methods. + +``` +import {testIntTransactionCallback} from "./i_idl_test_service" +import {testStringTransactionCallback} from "./i_idl_test_service" +import IdlTestServiceStub from "./idl_test_service_stub" + + +class IdlTestImp extends IdlTestServiceStub { + + testIntTransaction(data: number, callback: testIntTransactionCallback): void + { + callback(0, data + 1); + } + testStringTransaction(data: string, callback: testStringTransactionCallback): void + { + callback(0); + } +} +``` + +After the service implements the interface, the interface needs to be exposed to the client for connection. If your service needs to expose this interface, extend **Ability** and implement **onConnect()** to return **IRemoteObject** so that the client can interact with the service process. The following code snippet shows how to expose the **IRemoteAbility** interface to the client: + +``` +export default { + onStart() { + console.info('ServiceAbility onStart'); + }, + onStop() { + console.info('ServiceAbility onStop'); + }, + onCommand(want, startId) { + console.info('ServiceAbility onCommand'); + }, + onConnect(want) { + console.info('ServiceAbility onConnect'); + try { + console.log('ServiceAbility want:' + typeof(want)); + console.log('ServiceAbility want:' + JSON.stringify(want)); + console.log('ServiceAbility want name:' + want.bundleName) + } catch(err) { + console.log("ServiceAbility error:" + err) + } + console.info('ServiceAbility onConnect end'); + return new IdlTestImp('connect'); + }, + onDisconnect(want) { + console.info('ServiceAbility onDisconnect'); + console.info('ServiceAbility want:' + JSON.stringify(want)); + } +}; +``` + +#### Calling Methods from the Client for IPC + +When the client calls **connectAbility()** to connect to a Service ability, the **onConnect** callback in **onAbilityConnectDone** of the client receives the **IRemoteObject** instance returned by the **onConnect()** method of the Service ability. The client and Service ability are in different applications. Therefore, the directory of the client application must contain a copy of the .idl file (the SDK automatically generates the proxy class). The **onConnect** callback then uses the **IRemoteObject** instance to create the **testProxy** instance of the **IdlTestServiceProxy** class and calls the related IPC method. The sample code is as follows: + +``` +import IdlTestServiceProxy from './idl_test_service_proxy' +import featureAbility from '@ohos.ability.featureAbility'; + +function callbackTestIntTransaction(result: number, ret: number): void { + if (result == 0 && ret == 124) { + console.log("case 1 success "); + } +} + +function callbackTestStringTransaction(result: number): void { + if (result == 0) { + console.log("case 2 success "); + } +} + +var onAbilityConnectDone = { + onConnect:function (elementName, proxy) { + let testProxy = new IdlTestServiceProxy(proxy); + testProxy.testIntTransaction(123, callbackTestIntTransaction); + testProxy.testStringTransaction('hello', callbackTestStringTransaction); + }, + onDisconnect:function (elementName) { + console.log("onDisconnectService onDisconnect"); + }, + onFailed:function (code) { + console.log("onDisconnectService onFailed"); + } +}; + +function connectAbility: void { + let want = { + "bundleName":"com.example.myapplicationidl", + "abilityName": "com.example.myapplicationidl.ServiceAbility" + }; + let connectionId = -1; + connectionId = featureAbility.connectAbility(want, onAbilityConnectDone); +} + + +``` + +#### Transferring a sequenceable Object During IPC + +You can send a class from one process to another through IPC interfaces. However, you must ensure that the peer can use the code of this class and this class supports the **marshalling** and **unmarshalling** methods. OpenHarmony uses **marshalling** and **unmarshalling** to serialize and deserialize objects into objects that can be identified by each process. + +To create a class that supports the sequenceable type, perform the following operations: + +1. Implement the **marshalling** method, which obtains the current state of the object and serializes the object into a **Parcel** object. +2. Implement the **unmarshalling** method, which deserializes the object from a **Parcel** object. + +The following is an example of the **MySequenceable** class code: + +``` +import rpc from '@ohos.rpc'; +export default class MySequenceable { + constructor(num: number, str: string) { + this.num = num; + this.str = str; + } + getNum() : number { + return this.num; + } + getString() : string { + return this.str; + } + marshalling(messageParcel) { + messageParcel.writeInt(this.num); + messageParcel.writeString(this.str); + return true; + } + unmarshalling(messageParcel) { + this.num = messageParcel.readInt(); + this.str = messageParcel.readString(); + return true; + } + private num; + private str; +} +``` + + + +## How to Develop for Interworking Between C++ and TS + +### TS Proxy and C++ Stub Development + +#### C++ Service Object + +1. Use C++ to construct an IDL file and run commands to generate interfaces, stub files, and proxy files. + +2. Create a service object, inherit the interface class defined in the C++ stub file, and implement the methods in the class. An example is as follows: + + ``` + class IdlTestServiceImpl : public IdlTestServiceStub { + public: + IdlTestServiceImpl() = default; + virtual ~IdlTestServiceImpl() = default; + + ErrCode TestIntTransaction(int _data, int& result) override + { + result = 256; + return ERR_OK; + } + + ErrCode TestStringTransaction(const std::string& _data) override + { + return ERR_OK; + } + }; + ``` + +#### Native APIs in C++ + +C++ provides C++ service objects to TS in the format of native APIs. For example, C++ provides a **GetNativeObject** method, which is used to create an **IdlTestServiceImpl** instance. Using the **NAPI_ohos_rpc_CreateJsRemoteObject** method, you can create a JS remote object for the TS application. + +``` +NativeValue* GetNativeObject(NativeEngine& engine, NativeCallbackInfo& info) +{ + sptr impl = new IdlTestServiceImpl(); + napi_value napiRemoteObject = NAPI_ohos_rpc_CreateJsRemoteObject(reinterpret_cast(&engine), impl); + NativeValue* nativeRemoteObject = reinterpret_cast(napiRemoteObject); + return nativeRemoteObject; +} +``` + +#### TS Proxy Object + +Use TS to construct an IDL file and run commands to generate interfaces, stub files, and proxy files. An example proxy file is as follows: + +``` + +import {testIntTransactionCallback} from "./i_idl_test_service"; +import {testStringTransactionCallback} from "./i_idl_test_service"; +import IIdlTestService from "./i_idl_test_service"; +import rpc from "@ohos.rpc"; + +export default class IdlTestServiceProxy implements IIdlTestService { + constructor(proxy) { + this.proxy = proxy; + } + + testIntTransaction(data: number, callback: testIntTransactionCallback): void + { + let _option = new rpc.MessageOption(rpc.MessageOption.TF_SYNC); + let _data = new rpc.MessageParcel(); + let _reply = new rpc.MessageParcel(); + _data.writeInt(data); + this.proxy.sendRequest(IdlTestServiceProxy.COMMAND_TEST_INT_TRANSACTION, _data, _reply, _option).then(function(result) { + if (result.errCode === 0) { + let _errCode = result.reply.readInt(); + if (_errCode != 0) { + let _returnValue = undefined; + callback(_errCode, _returnValue); + return; + } + let _returnValue = result.reply.readInt(); + callback(_errCode, _returnValue); + } else { + console.log("sendRequest failed, errCode: " + result.errCode); + } + }) + } + + testStringTransaction(data: string, callback: testStringTransactionCallback): void + { + let _option = new rpc.MessageOption(rpc.MessageOption.TF_SYNC); + let _data = new rpc.MessageParcel(); + let _reply = new rpc.MessageParcel(); + _data.writeString(data); + this.proxy.sendRequest(IdlTestServiceProxy.COMMAND_TEST_STRING_TRANSACTION, _data, _reply, _option).then(function(result) { + if (result.errCode === 0) { + let _errCode = result.reply.readInt(); + callback(_errCode); + } else { + console.log("sendRequest failed, errCode: " + result.errCode); + } + }) + } + + static readonly COMMAND_TEST_INT_TRANSACTION = 1; + static readonly COMMAND_TEST_STRING_TRANSACTION = 2; + private proxy +} +``` + +#### Interworking Between TS and C++ Applications + +1. The TS application invokes the native API to obtain the remote C++ service object. +2. Construct a TS proxy and transfers the remote C++ service object to it. +3. Use the TS proxy to call the method declared in the IDL file to implement the interworking between the TS proxy and C++ stub. The following is an example: + +``` +import IdlTestServiceProxy from './idl_test_service_proxy' +import nativeMgr from 'nativeManager'; + +function testIntTransactionCallback(errCode: number, returnValue: number) +{ + console.log("errCode: " + errCode + " returnValue: " + returnValue); +} + +function testStringTransactionCallback(errCode: number) +{ + console.log("errCode: " + errCode); +} + +function jsProxyTriggerCppStub() +{ + let nativeObj = nativeMgr.GetNativeObject(); + let tsProxy = new IdlTestServiceProxy(nativeObj); + // Call testIntTransaction. + tsProxy.testIntTransaction(10, testIntTransactionCallback); + + // Call testStringTransaction. + tsProxy.testStringTransaction("test", testIntTransactionCallback); +} +``` -- GitLab