websocket を Lua から利用する時の注意

cocos2d-x-3.13 LuaでWebsocketを利用する際に、以前にはでてなかったと思うエラーが出た。
いつのバージョンからかは不明だが、3.6くらいの時は出てなかったと思う(曖昧な記憶)

  local ws = cc.WebSocket:create("ws://example.com")

  ws:registerScriptHandler(function(msg)
      -- なんらかの処理...
    end,
    cc.WEBSOCKET_MESSAGE)

上記を実行すると、registerScriptHandler の第4の引数が無いとエラーが出る。



以下のbindingファイルがその該当箇所のようなので398行目 のエラーチェックに引っかかってたようだ。

# Lua_web_socket.cpp line 390

int tolua_Cocos2d_WebSocket_registerScriptHandler00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
    tolua_Error tolua_err;
    if (
        !tolua_isusertype(tolua_S,1,"cc.WebSocket",0,&tolua_err) ||
        !toluafix_isfunction(tolua_S,2,"LUA_FUNCTION",0,&tolua_err) ||
        !tolua_isnumber(tolua_S,3,0,&tolua_err) || 
        !tolua_isnoobj(tolua_S,4,&tolua_err)    // ここにひっかかってる
        )
        goto tolua_lerror;
    else
#endif
    {
        LuaWebSocket* self    = (LuaWebSocket*)  tolua_tousertype(tolua_S,1,0);
        if (NULL != self ) {
            int handler = (  toluafix_ref_function(tolua_S,2,0));
            ScriptHandlerMgr::HandlerType handlerType = (ScriptHandlerMgr::HandlerType)((int)tolua_tonumber(tolua_S,3,0) + (int)ScriptHandlerMgr::HandlerType::WEBSOCKET_OPEN);
            ScriptHandlerMgr::getInstance()->addObjectHandler((void*)self, handler, handlerType);
        }
    }
    return 0;
#ifndef TOLUA_RELEASE
tolua_lerror:
    tolua_error(tolua_S,"#ferror in function 'registerScriptHandler'.",&tolua_err);
    return 0;
#endif
}

ただ、tolua_toobject(tolua_S,4,0) と、この第4の引数を利用している箇所が関数内には存在しないので
このチェックは無視しても問題なさそう。

以下の部分をfalseに変更

- !tolua_isnoobj(tolua_S,4,&tolua_err)
+ false

エラーは出なくなりました。