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🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请看下图提示:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值