更新时间:2022-05-10 GMT+08:00
分享

增加新接口指导(可选)

如果第三方应用需要使用的接口,或者接口中的参数在Windows SDK中有,但是在AppService的JavaScript接口中没有,则需要开发者自己新增接口,或者修改已有的接口,并重新编译UISDKJSAdapter。

下文中的示例代码以加入会议为例(joinConfByID),说明如何新增一个接口。

在UISDKJsAdapter中增加接口转换的代码以及编译UISDKAdapter需要开发者具备基本的C/C++能力。

AppService中增加JavaScript接口

  1. 找到Windows SDK中的接口定义

    在Windows SDK的“接口参考”中找到相应的接口定义,了解每个参数的含义。

    以“加入会议”为例,包含三个参数,分别为“confId”、“password”和“name”。

  2. 在hwSDKService.js的HWSDKService类中增加新的方法定义

    • 在cmd中增加该接口的CMD编号,需要确保与HWSDKService中的其他cmd不重复。
    • 在description中增加对该接口的描述。
    • 在param中增加json格式的接口参数,参数名称与Windows SDK中的参数名称保持一致。
    • 调用sendMessage接口将命令发送给UISDKJSAdapter。

      示例代码

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      /**
         * @api
         * @description 通过会议ID和密码加入已经存在的会议
         * @param confId string 会议ID
         * @param password string 会议密码
         * @param name string 会议昵称
         */
        joinConfByID(param) {
          const data = {
            cmd: 5,
            description: "hwmService_joinConfByID",
            param: {
              confId: param.confId,
              password: param.password,
              name: param.name ? param.name : ""
            }
          };
          return this.sendMessage({ data });
        }
      

UISDKJSAdapter中增加C++接口

  1. 在JSADAPTERWND_SERVICE_CMD枚举中增加新接口的CMD编号

    在UISDKJSAdapter/JSAdapterService.h的JSADAPTERWND_SERVICE_CMD枚举中增加CMD编号,该编号需要与HWSDKService中新加接口的cmd值保持一致。

    以“加入会议”为例,就是增加“JSADAPTERWND_CMD_JOIN_CONF_BYID”。

    示例代码

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    typedef enum tagJSADAPTERWND_SERVICE_CMD
    {
        JSADAPTERWND_CMD_BEGIN = 0,
        JSADAPTERWND_CMD_INIT,             // 初始化
        JSADAPTERWND_CMD_SET_PROXY,        // 设置代理
        JSADAPTERWND_CMD_SET_SERVER,       // 设置服务器地址
        JSADAPTERWND_CMD_LOGIN,            // 登录
        JSADAPTERWND_CMD_JOIN_CONF_BYID,   // id入会
        JSADAPTERWND_CMD_EXIT_SDK,         // 退出sdk
        JSADAPTERWND_CMD_CREATE_CONF,      // 创建会议
        JSADAPTERWND_CMD_ADD_ATTENDEE,     // 会中邀人
        JSADAPTERWND_CMD_LOGOUT,           // 登出
        JSADAPTERWND_CMD_CONFIG,           // 配置
        JSADAPTERWND_CMD_BOOK_CONF,        //预约会议
        JSADAPTERWND_CMD_GET_VMR_LIST,      //获取VmrList
        JSADAPTERWND_CMD_GET_CONF_INFO,      //获取会议信息
        JSADAPTERWND_CMD_EDIT_CONF,         //编辑会议
        JSADAPTERWND_CMD_CANCEL_CONF,       //取消会议
        JSADAPTERWND_CMD_CLEAN_CONFIG,      //清除配置
        JSADAPTERWND_CMD_JOIN_CONF_BY_RANDOM,
        JSADAPTERWND_CND_RENAMESELF,
        JSADAPTERWND_CMD_CHANGE_VMRINFO,
        JSADAPTERWND_CMD_JOIN_CONF_BY_LINK,
    
        JSADAPTERWND_CMD_END
    } JSADAPTERWND_SERVICE_CMD;
    

  2. 在g_stJsAdapterWndCmdHandler函数指针数组中增加转换接口函数

    在UISDKJSAdapter/JSAdapterService.cpp的g_stJsAdapterWndCmdHandler数组中增加对应CMD的接口转换函数。

    以“加入会议”为例,就是增加“,{ JSADAPTERWND_CMD_JOIN_CONF_BYID, &JSAdapterService::JoinConfById }”。

    示例代码

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    static const JSADAPTERWND_CMD_HANDLER g_stJsAdapterWndCmdHandler[] = {
        { JSADAPTERWND_CMD_BEGIN, 0 }
    
        ,{ JSADAPTERWND_CMD_INIT, &JSAdapterService::Init }
        ,{ JSADAPTERWND_CMD_SET_PROXY, &JSAdapterService::SetProxy }
        ,{ JSADAPTERWND_CMD_SET_SERVER, &JSAdapterService::SetServer }
        ,{ JSADAPTERWND_CMD_LOGIN, &JSAdapterService::Login }
        ,{ JSADAPTERWND_CMD_JOIN_CONF_BYID, &JSAdapterService::JoinConfById }
        ,{ JSADAPTERWND_CMD_EXIT_SDK, &JSAdapterService::ExitSdk }
        ,{ JSADAPTERWND_CMD_CREATE_CONF, &JSAdapterService::CreateConf }
        ,{ JSADAPTERWND_CMD_ADD_ATTENDEE, &JSAdapterService::AddAttendee }
        ,{ JSADAPTERWND_CMD_LOGOUT, &JSAdapterService::Logout }
        ,{ JSADAPTERWND_CMD_CONFIG, &JSAdapterService::Config }
        ,{ JSADAPTERWND_CMD_BOOK_CONF, &JSAdapterService::BookConf }
        ,{ JSADAPTERWND_CMD_GET_VMR_LIST, &JSAdapterService::GetVmrList }
        ,{ JSADAPTERWND_CMD_GET_CONF_INFO, &JSAdapterService::GetConfInfo }
        ,{ JSADAPTERWND_CMD_EDIT_CONF, &JSAdapterService::EditConf}
        ,{ JSADAPTERWND_CMD_CANCEL_CONF, &JSAdapterService::CancelConf}
        ,{ JSADAPTERWND_CMD_CLEAN_CONFIG, &JSAdapterService::CleanConfig}
        ,{ JSADAPTERWND_CMD_JOIN_CONF_BY_RANDOM, &JSAdapterService::JoinConfByRandom}
        ,{ JSADAPTERWND_CND_RENAMESELF, &JSAdapterService::RenameSelf}
        ,{ JSADAPTERWND_CMD_CHANGE_VMRINFO, &JSAdapterService::ChangeVmrInfo}
        ,{ JSADAPTERWND_CMD_JOIN_CONF_BY_LINK ,&JSAdapterService::JoinConfByLink}
    
        ,{ JSADAPTERWND_CMD_END, 0 }
    };
    

  3. 实现新增的接口转换函数

    在UISDKJSAdapter/JSAdapterService.cpp的JSAdapterService类中实现新增加的接口转换函数。该函数就是把HWSDKService传过来的命令中的json参数转换成Windows SDK的原生接口参数。

    以“加入会议”为例。

    示例代码

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    int JSAdapterService::JoinConfById(const Json::Value& params)
    {
        HwmJoinConfByIdInfo joinConfByIdInfo = { 0 };
        int ret = Util::CopyJsonStr(joinConfByIdInfo.confId, sizeof(joinConfByIdInfo.confId), params["confId"]);
        ret += Util::CopyJsonStr(joinConfByIdInfo.password, sizeof(joinConfByIdInfo.confId), params["password"]);
        ret += Util::CopyJsonStr(joinConfByIdInfo.name, sizeof(joinConfByIdInfo.name), params["name"]);
        if (ret != 0)
        {
            LOG_ERROR("string copy error %d.", ret);
        }
    
        ret = hwmsdkagent::JoinConfById(&joinConfByIdInfo);
        if (ret != 0)
        {
            LOG_ERROR("JoinConfById failed %d.", ret);
        }
        return ret;
    }
    

  4. 处理Windows SDK接口的回调函数

    在Windows SDK接口对应的回调函数中,把结果发送给HWSDKService。

    以“加入会议”为例,Windows SDK提供的回调入口是OnJoinConfByIdResult,在该函数中发送结果给HWSDKService。

    • 在JSAdapterCallback.h的JSAdapterCallback类定义中,增加OnJoinConfByIdResult。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
          /**
          * @brief [en] Callback of JoinConfById interface.
          *        [cn] 通过会议id入会回调
          *
          * @param [in] hwmsdk::HwmErrCode ret            [en] Return code
          *                                               [cn] 返回值
          * @param [in] const char* reason                [en] Fail reason
          *                                               [cn] 失败原因描述
          * @attention [en] NA
          *            [cn] NA
          **/
          virtual void OnJoinConfByIdResult(hwmsdk::HwmErrCode ret, const char* reason);
      
    • 在JSAdapterCallback.cpp中实现OnJoinConfByIdResult。
    1
    2
    3
    4
    void JSAdapterCallback::OnJoinConfByIdResult(hwmsdk::HwmErrCode ret, const char* reason)
    {
        JSAdapterNotify::NotifyJoinConfByIdResult(ret, reason);
    }
    

    1
    2
    3
    4
    5
    void JSAdapterNotify::NotifyJoinConfByIdResult(int reasonCode, const std::string& description)
    {
        LOG_INFO("Start");
        SendCallback(JSADAPTERWND_CMD_JOIN_CONF_BYID, reasonCode);
    }
    

    这里调用SendCallback中的cmd就是步骤1中新增加的值。

重新编译UISDKAdapter

  1. 复制华为云会议Windows SDK的lib库和头文件

    1下载的Windows SDK的“\SDK\include\”的头文件复制到Demo的“\JsAdapter\HwmSdkLibs\”目录下。

    1下载的Windows SDK的“\SDK\lib\win32\”的“hwm_sdk_agent.lib”文件复制到Demo的“\JsAdapter\HwmSdkLibs\”目录下。

    图1 复制Windows SDK的头文件和lib库

  2. 在Visual Studio 2017中打开工程,并配置工程属性

    • 双击Demo的“\JsAdapter\JsApdpter\JsApdpter.sln”,打开工程。
    • 选择编译版本。

      选择x86的Release版本。

      图2 选择编译版本

      这里选择x86还是x64版本,取决于步骤1中的hwm_sdk_agent.lib复制的是win32版本还是x64版本。通常使用x86即可。

    • 配置工程属性
    图3 右键打开属性配置

    图4 选择“配置属性>>常规>>Windows SDK版本”

    UISDKJSAdapter对windows SDK版本没用强依赖,任意选择一个版本即可。

  3. 编译

    编译整改工程。

    图5 “生成>>重新生成解决方案”

    编译完成后在 Demo的“\JsAdapter\JsApdpter\”下生成“JsApdpter.dll”。将该dll复制到第三方项目的根目录下即可使用。

分享:

    相关文档

    相关产品

close