openharmony软总线

Ethereal Lv4

1. 软总线基本流程

1.1 发现

  1. 上层应用需要发现特定能力设备时,调用发现接口启动发现。
1
2
3
4
5
6
7
8
9
10
// 发现回调
typedef struct {
/** Callback that is invoked when a device is found */
void (*OnDeviceFound)(const DeviceInfo *device);
/** Callback for a subscription result */
void (*OnDiscoverResult)(int32_t refreshId, RefreshResult reason);
} IRefreshCallback;

// 发现服务
int32_t RefreshLNN(const char *pkgName, const SubscribeInfo *info, const IRefreshCallback *cb);
  1. 当软总线发现到设备时,通过回调接口通知业务所发现的设备信息。
  • 发现设备最终会调用到实现,如果传入的info是AUTO,则会通过蓝牙和CoAP服务进行发现。

1.2 组网

当发现设备时,则传入地址进行组网。组网接口为JoinLNN

1
2
3
4
// 发起组网请求
int32_t JoinLNN(const char *pkgName, ConnectionAddr *target, OnJoinLNNResult cb);
// 组网请求执行结果回调
typedef void (*OnJoinLNNResult)(ConnectionAddr *addr, const char *networkId, int32_t retCode);

具体调用链为:(将地址信息加入map中)

JoinLNN->JoinLNNInner->ServerIpcJoinLNN->Invoke->ServerJoinLNN->LnnIpcServerJoin->LnnServerJoin->PostMessageToHandler(MSG_TYPE_JOIN_LNN, 地址)->g_netBuilder.handler->NetBuilderMessageHandler->g_messageProcessor[]->ProcessJoinLNNRequest->TrySendJoinLNNRequest->PostJoinRequestToConnFsm->(StartNewConnectionFsm)LnnSendJoinRequestToConnFsm->LnnFsmPostMessage(FSM_MSG_TYPE_JOIN_LNN,地址)->PostMessageToFsm->fsm.handler->FsmStateMsgHandler->ProcessDataMessage->(fsm->curState->process)->AuthStateProcess->OnJoinLNN->CompleteJoinLNN->CompleteJoinLNN

2. 连接

2.1 创建会话服务器

CreateSessionServer

1
2
// 创建会话服务
int CreateSessionServer(const char *pkgName, const char *sessionName, const ISessionListener* listener);

2.2 创建会话

1
2
// 创建会话
int OpenSession(const char *mySessionName, const char *peerSessionName, const char *peerNetworkId, const char *groupId, const SessionAttribute* attr);

具体调用链为:

  1. 获取地址信息

OpenSession->ServerIpcOpenSession->Invoke->ServerOpenSession->TransOpenSession->TransOpenChannel->TransGetLaneInfo->TransGetLaneInfoByOption->TransAddLaneReqToPendingAndWaiting->LnnRequestLane(listener)->(listenser.OnLaneRequestSuccess)->LnnRequestLane->AllocLane->Alloc->TriggerLink->PostMsgToHandler->PostMessage->g_laneLoopHandler.HandleMessage->MsgHandler->LaneTriggerLink->BuildLink->g_linkTable[]->LaneLinkOfWlan->(LnnGetRemoteNumInfo->g_dlKeyTable[]->DlGetSessionPort->LnnGetNodeInfoById)OnLaneLinkSuccess->LinkSuccess->PostMsgToHandler->PostMessage->g_laneLoopHandler.HandleMessage->MsgHandler->LaneLinkSuccess->NotifyLaneAllocSuccess->TransOnLaneRequestSuccess->TransUpdateLaneConnInfoByLaneId

  1. 开启tcp

OpenSession->ServerIpcOpenSession->Invoke->ServerOpenSession->TransOpenSession->TransOpenChannel->TransOpenChannelProc->TransOpenDirectChannel->OpenTcpDirectChannel->ConnOpenClientSocket->OpenClientSocket->OpenTcpClientSocket->BindTcpClientAddr

参考

communication_dsoftbus: 暂无描述 (gitee.com)

communication_dsoftbus: 暂无描述 - Gitee.com

  • Title: openharmony软总线
  • Author: Ethereal
  • Created at: 2024-10-16 13:59:07
  • Updated at: 2024-10-16 15:56:32
  • Link: https://ethereal-o.github.io/2024/10/16/openharmony软总线/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments