鸿蒙OpenHarmony之分布式软总线discovery_service.c(三)
·
📌往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)
①📖 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
②📖嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
③📖 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
④📖 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
⑤📖 记录一场鸿蒙开发岗位面试经历~
⑥📖 持续更新中……
/*
函数功能: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;
}
更多推荐
所有评论(0)