OpenHarmony之分布式软总线coap服务发现初始化

前言

coap_service.c这个文件是在设备启动时,为设备服务发现进行前期初始化并且负责注册设备信息和服务。初始化包括coap socket、消息队列线程、监听线程等。初始化之后就可以注册功能服务啦。下面来分析coap_service.c具体是如何做前期准备的。

 

代码分析

Coap服务发现初始化,这是调用NSTACKX_Init进行的,之后详细分析

复制代码
 1 /*
 2     函数功能: coap初始化,为服务发现做准备
 3     函数参数:无
 4     函数返回值: 成功返回0,否则返回-1
 5     详细:
 6         1.调用NSTACKX_Init,去初始cJSON_HOOK使其提供malloc, realloc和free函数,初始服务发现所需数据和结构,比如coap socket  g_serverFd  message id,wifi事件,消息队列等
 7 */
 8 int CoapInit(void)
 9 {
10     int ret = NSTACKX_Init();
11     if (ret != 0) {
12         SOFTBUS_PRINT("[DISCOVERY] CoapInit NSTACKX_Init fail\n");
13         return ERROR_FAIL;
14     }
15     return ERROR_SUCCESS;
16 }
复制代码

 

本地设备信息的注册

复制代码
 1 /*
 2     函数功能: 注册设备信息
 3     函数参数: 无
 4     函数返回: 成功返回0, 失败返回非0
 5     详细:
 6         1. 声明NSTACKX_LocalDeviceInfo 结构体并为其初始化
 7         2. 使用CoapGetLocalDeviceInfo获取设备信息 ,信息保存在之前声明的NSTACKX_LocalDeviceInfo结构体
 8         3. 使用localDeviceInfo配置g_localDeviceInfo,并用DEV_HASH_ID设置g_localDeviceInfo->deviceHash
 9 */
10 int CoapRegisterDeviceInfo(void)
11 {
12     NSTACKX_LocalDeviceInfo localDeviceInfo;  
13     int ret;
14     (void)memset_s(&localDeviceInfo, sizeof(NSTACKX_LocalDeviceInfo), 0, sizeof(NSTACKX_LocalDeviceInfo));
15     // 得到设备信息
16     ret = CoapGetLocalDeviceInfo(&localDeviceInfo);
17     if (ret != 0) {
18         return ERROR_FAIL;
19     }
20     //使用localDeviceInfo配置g_localDeviceInfo,并用DEV_HASH_ID设置g_localDeviceInfo->deviceHash
21     ret = NSTACKX_RegisterDeviceAn(&localDeviceInfo, DEV_HASH_ID);
22     if (ret != 0) {
23         SOFTBUS_PRINT("[DISCOVERY] CoapRegisterDeviceInfo RegisterDeviceAn fail\n");
24         return ERROR_FAIL;
25     }
26     return ERROR_SUCCESS;
27 }
复制代码

 

设备默认服务注册

复制代码
 1 /*
 2     函数功能:注册设备默认服务
 3     函数参数:无
 4     函数返回值:成功返回0,否则返回非零
 5     详细:
 6         1. 获取设备信息
 7         2. 声明一个char数组,长度为默认服务最大的数据长度,并初始化为0
 8         3. 将info->devicePort 以 port:info->devicePort格式,输入到serviceData
 9         4. 调用NSTACKX_RegisterServiceData 去注册设备服务,最终会保存在g_localDeviceInfo.serviceData
10 */
11 int CoapRegisterDefualtService(void)
12 {
13     //获取设备信息
14     DeviceInfo *info = GetCommonDeviceInfo();
15     if (info == NULL) {
16         return ERROR_FAIL;
17     }
18     //默认服务数据 最长16字节,设备可以有的最长服务数据64字节
19     char serviceData[MAX_DEFAULT_SERVICE_DATA_LEN] = {0};
20     //
21     if (sprintf_s(serviceData, sizeof(serviceData), "port:%d", info->devicePort) == -1) {
22         return ERROR_FAIL;
23     }
24     //设备注册服务数据
25     return NSTACKX_RegisterServiceData(serviceData);
26 }
复制代码

 

如果不是默认服务,就进行给定服务注册

复制代码
 1 /*
 2     函数功能:注册服务(设备功能)
 3     函数参数:
 4             1. capabilityBitmap : 功能位图数组
 5             2. length: capabilityBitmap数组长度
 6             3. capabilityData : 功能数据
 7     函数返回值:成功返回0,否则非零
 8     详细:
 9         1.检查capabilityData和capabilityBitmap是否为空
10         2.注册设备功能,最终会用capbilityBitmap设置g_localDeviceInfo.capabilityBitmap
11         3.注册服务(功能)数据,最终会保存在g_localDeviceInfo.serviceData中
12 */
13 int CoapRegistService(const unsigned int capabilityBitmap[], int length, const char* capabilityData)
14 {
15     if (capabilityData == NULL || capabilityBitmap == NULL) {
16         return ERROR_INVALID;
17     }
18     if (NSTACKX_RegisterCapability(MAX_CAPABILITY_NUM, capabilityBitmap) != 0) {
19         SOFTBUS_PRINT("[DISCOVERY] CoapRegistService RegisterCapability fail\n");
20         return ERROR_CAPABLITY_FAIL;
21     }
22     if (NSTACKX_RegisterServiceData(capabilityData) != 0) {
23         return ERROR_SERVICEDATA_FAIL;
24     }
25     (void)length;
26     return ERROR_SUCCESS;
27 }
复制代码

 

posted @   沉心慢慢  阅读(409)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示