软总线组网流程
1、开机启动软总线
代码路径:foundation/communication/dsoftbus/core/frame/standard/init/src/softbus_server.cpp
void SoftBusServer::OnStart()
{
COMM_LOGI(COMM_SVC, "SoftBusServer OnStart called!");
InitSoftBusServer();
if (!Publish(this)) {
COMM_LOGE(COMM_SVC, "SoftBusServer publish failed!");
}
IPCSkeleton::SetMaxWorkThreadNum(SOFTBUS_IPC_THREAD_NUM);
}
初始化软总线服务
代码路径:foundation/communication/dsoftbus/core/frame/common/src/softbus_server_frame.c

SoftbusConfigInit初始化服务器默认参数
SoftBusTimerInit创建1s循环定时器,处理下列服务注册的回调函数
SOFTBUS_CONN_TIMER_FUN,
SOFTBUS_AUTHEN_TIMER_FUN,
SOFTBUS_SESSION_TIMER_FUN,
SOFTBUS_PROXYCHANNEL_TIMER_FUN,
SOFTBUS_PROXYSLICE_TIMER_FUN,
SOFTBUS_TCP_DIRECTCHANNEL_TIMER_FUN,
SOFTBUS_UDP_CHANNEL_TIMER_FUN,
SOFTBUS_TIME_SYNC_TIMER_FUN,
SOFTBUS_PROXY_SENDFILE_TIMER_FUN,
SOFTBUS_NIP_NODE_AGING_TIMER_FUN,
SOFTBUS_TRNAS_IDLE_TIMEOUT_TIMER_FUN,
SOFTBUS_TRNAS_REQUEST_TIMEOUT_TIMER_FUN,
SOFTBUS_TRANS_ASYNC_SENDBYTES_TIMER_FUN,
SOFTBUS_DDOS_TIMER_FUN,
SOFTBUS_MAX_TIMER_FUN_NUM
LooperInit创建服务默认线程,绑定PostMessage消息管理机制

在InitServicesAndModules中调用ConnServerInit连接初始化TCP、经典蓝牙BR、低功耗蓝牙BLE接口都是在这里进行初始化的。


TransServerInit数据传输初始化(包含传输权限、会话管理、传输通道和传输质量初始化)。
AuthInit鉴权初始化。
Auth模块业务就是组网安全。保证近场设备之间的分布式通信安全。
DisServerInit初始化发现服务。
BusCenterServerInit软总线控制中心初始化。
2、注册服务
注册服务会执行以下操作

1、根据包名初始化软总线,后续通过SoftbusRegisterService函数将自己注册到软总线中。
2、检测包名是否正确。
3、检测包名信息是否正确。
4、通过IPC通信客户端将包名和服务相关的信息一起发送到服务端。

3、发布服务

4、拉起发布服务

![]()




InnerPublishService将InfoNode添加到系统内部维护的全局列表g_publishInfo中,随后调用CallInterfaceByMedium,该函数即根据函数类型(如蓝牙或者COAP),调用对应的处理。


根据传输类型调用相应的处理。

5、发现服务
当客户端发布了自己的某个服务后,远端设备的客户端便可以通过调用StartDiscovery来发现该设备的已发布服务。远端设备调用ServerIpcStartDiscovery函数发现设备,其源码流程与PublishService流程一致。简而言之,ServerIpcStartDiscovery会调用客户端的SoftBusServerProxy的StartDiscover函数,该函数发送请求给远端设备的服务进程,服务进程调用StartDiscoveryInner函数读取发送端填写的参数后,再调用本地的StartDiscovery方法处理该函数。StartDiscovery会调用DiscIpcStartDiscovery

与PublishService的回调一样服务端获取SoftBusClient的代理后,调用其OnDiscoverySussess方法,该方法发送请求给客户端进程,客户端解析对应的命令后调用OnDiscoverySuccess方法,该方法又会调用DiscClientOnDiscoverySuccess完成回调处理。

6、组网
当A端通过PublishService发布服务,B端通过调用StartDiscovery查找对应的服务后,A端或者B端根据对端设备的MAC地址,便可以发布组网请求。
组网请求的函数为JoinLNN,JoinLNN源码主要做两件事,调用本地的JoinLnn接口发起组网请求,成功后调用函数AddJoinLNNCbltem将组网结果添加到本地维护的列表中。

其中AddJoinLNNCbltem将组网成功后的target信息和cb回调保存在本地g_busCenterClient的joinLNNCbList列表中。
joinLNN接口与PublishService和StartDiscovery的IPC通信过程一致:
1、joinLNN接口获取SoftBusServerProxy对象,调用其JoinLNN方法,该方法填写参数请求发送到服务端进程。
2、服务端解析参数后调用SoftBusServer的JoinLNN方法。
3、JoinLNN调LnnIpcServerJoin完成响应的处理。

调用LnnServerJoin发起组网请求,请求成功后调用AddJoinLNNInfo将组网信息添加到本地。


通过PostMessgaeToHandler函数,进行组网连接请求。

组网校验功能在状态机中完成。

7、上线通知



更多推荐

所有评论(0)