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
エラーは出なくなりました。