从通信两端的位置类看,软总线主要分为IPC与RPC。IPC与RPC使用统一的C/S通信模型,即即Client向Server发送请求,Server返回请求结果。
IPC/RPC的主要有三个基础接口:IRemoteBroker, IRemoteStub, IRemoteProxy。还有一个基础类组:BrokerCreator, BrokerDelegator, BrokerRegistration。
假设开发过程中需要自定义服务TestService,自定义服务的方法主要分为如下几步:
- 定义服务接口类ITestService,令其继承IRemoteBroker,并定义关键接口方法
- 服务侧定义类TestServiceStub,令其继承IRemoteStub和ITestService,在本地实现关键接口方法,并要实现OnRemoteRequest。
- 客户端定义类TestServiceProxy,另其继承IRemoteProxy和ITestService,在本地实现对应接口的方法,即填写参数后,调用类成员remote的SendRequest()方法将参数发送。
同时,客户端进程获取TestServiceProxy类时,首先获取ITestService接口,然后调用iface_cast,将ITestService转换为指向TestServiceProxy类的指针。
因此我们主要从三个iface_cast启动分析,然后分析主要的接口:IRemoteBroker, IRemoteStub, IRemoteProxy和主要的类:BrokerCreator, BrokerDelegator, BrokerRegistration。
iface_cast的源码如下所示:
template <typename INTERFACE> inline sptr<INTERFACE> iface_cast(const sptr<IRemoteObject> &object)
{
const std::u16s