往期知识点记录:
- 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
- OpenHarmony之分布式软总线coap头文件& coap组包分析
- OpenHarmony之分布式软总线discovery/coap/source/coap_socket.c
- OpenHarmony之分布式软总线nstackx_device.c(一)
- OpenHarmony之分布式软总线nstackx_device.c(二)
- OpenHarmony之分布式软总线discovery_service.h头文件
- OpenHarmony之分布式软总线discovery_service.c(一)
- OpenHarmony之分布式软总线discovery_service.c(二)
- OpenHarmony之分布式软总线discovery_service.c(三)
- 持续更新中……
/*
函数功能:wifi事件触发器
*/
void WifiEventTrigger(unsigned int para)
{
//获取设备信息
DeviceInfo *localDev = GetCommonDeviceInfo();
if (localDev == NULL) {
return;
}
int ret;
if (para) {
//wifi IP
char wifiIp[MAX_DEV_IP_LEN] = {0};
CoapGetIp(wifiIp, MAX_DEV_IP_LEN, 0); //获取设备连接wifi后ip 地址
if (strcmp(wifiIp, "0.0.0.0") == 0) {
SOFTBUS_PRINT("[DISCOVERY] WifiEventTrigger new event interupt.\n");
return;
}
ret = memcpy_s(localDev->deviceIp, sizeof(localDev->deviceIp), wifiIp, sizeof(wifiIp)); //使用wifi ip 设置 deviceIP
} else {
ret = memset_s(localDev->deviceIp, sizeof(localDev->deviceIp), 0, sizeof(localDev->deviceIp));
}
if (ret != ERROR_SUCCESS) {
return;
}
//启动软总线
if (BusManager(para) != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] WifiEventTrigger StartBusManager(%d) fail\n", para);
return;
}
//注册设备信息
if (CoapRegisterDeviceInfo() != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] WifiEventTrigger CoapRegisterDeviceInfo fail\n");
return;
}
//注册服务
if (DoRegistService(COAP) != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] WifiEventTrigger DoRegistService fail\n");
return;
}
}
/*
函数功能:撤销服务
函数参数: 无
函数返回值: 成功返回0,否则非0
详细:
1.首先关闭软总线
2.释放g_publishModule,g_capabilityData
3.释放有关coap的信息
4.将wifi回调函数设置为NULL
5.释放设备信息
6.将服务初始化标志设置为0
*/
int DeinitService(void)
{
int ret = BusManager(0);
if (ret != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] DeinitService BusManager(0) fail\n");
}
if (g_publishModule) {
free(g_publishModule);
g_publishModule = NULL;
}
if (g_capabilityData) {
free(g_capabilityData);
g_capabilityData = NULL;
}
ret = CoapDeinit();
if (ret != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] DeinitService CoapDeinit fail\n");
}
RegisterWifiCallback(NULL);
DeinitCommonManager();
g_isServiceInit = 0;
return ERROR_SUCCESS;
}
/*
函数功能:初始化服务
函数参数: 无
函数返回值: 成功返回0,否则非0
详细:
1.设备服务是否已经初始化过
2.初始化设备信息
3.为发布模块分配存储空间
4.为功能数据分配存储空间
5.注册wifi回调函数
6.初始化coap相关参数 Cjson钩子 消息id,套接字等
7.将IP更新事件写入到消息队列中
8.注册设备信息
9.将初始化标记置为1
*/
int InitService(void)
{
//设备服务是否初始化
if (g_isServiceInit != 0) {
return ERROR_SUCCESS;
}
//初始化设备信息
if (InitCommonManager() != 0) {
SOFTBUS_PRINT("[DISCOVERY] InitService InitCommonManager fail\n");
DeinitService();
return ERROR_FAIL;
}
//为发布服务模块分配存储空间
g_publishModule = calloc(1, sizeof(PublishModule) * MAX_MODULE_COUNT);
if (g_publishModule == NULL) {
DeinitService();
return ERROR_NOMEMORY;
}
//为各个发布模块功能数据分配空间
g_capabilityData = calloc(1, MAX_SERVICE_DATA_LEN);
if (g_capabilityData == NULL) {
DeinitService();
return ERROR_NOMEMORY;
}
//注册wifi回调函数,就是成功连入wifi后做的操作
RegisterWifiCallback(WifiEventTrigger);
int ret = CoapInit(); //初始化coap
if (ret != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] InitService CoapInit fail\n");
DeinitService();
return ret;
}
CoapWriteMsgQueue(UPDATE_IP_EVENT);
ret = CoapRegisterDeviceInfo();
if (ret != ERROR_SUCCESS) {
SOFTBUS_PRINT("[DISCOVERY] InitService CoapRegisterDeviceInfo fail\n");
DeinitService();
return ret;
}
//将设备服务初始化标志设为1
g_isServiceInit = 1;
SOFTBUS_PRINT("[DISCOVERY] InitService ok\n");
return ERROR_SUCCESS;
}
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请看下图提示: