/** Binds cNetwork::Listen */ static int tolua_cNetwork_Listen(lua_State * L) { // Function signature: // cNetwork:Listen(Port, Callbacks) -> cServerHandle cLuaState S(L); if ( !S.CheckParamUserTable(1, "cNetwork") || !S.CheckParamNumber(2) || !S.CheckParamTable(3) || !S.CheckParamEnd(4) ) { return 0; } // Get the plugin instance: cPluginLua * Plugin = cManualBindings::GetLuaPlugin(L); if (Plugin == nullptr) { // An error message has been already printed in GetLuaPlugin() S.Push(false); return 1; } // Read the params: int Port; S.GetStackValues(2, Port); if ((Port < 0) || (Port > 65535)) { LOGWARNING("cNetwork:Listen() called with invalid port (%d), failing the request.", Port); S.Push(false); return 1; } UInt16 Port16 = static_cast<UInt16>(Port); // Create the LuaTCPLink glue class: auto Srv = std::make_shared<cLuaServerHandle>(Port16, *Plugin, 3); // Listen: Srv->SetServerHandle(cNetwork::Listen(Port16, Srv), Srv); // Register the server to be garbage-collected by Lua: tolua_pushusertype(L, Srv.get(), "cServerHandle"); tolua_register_gc(L, lua_gettop(L)); // Return the server handle wrapper: S.Push(Srv.get()); return 1; }
/** Binds cNetwork::Listen */ static int tolua_cNetwork_Listen(lua_State * L) { // Function signature: // cNetwork:Listen(Port, Callbacks) -> cServerHandle cLuaState S(L); if ( !S.CheckParamStaticSelf("cNetwork") || !S.CheckParamNumber(2) || !S.CheckParamTable(3) || !S.CheckParamEnd(4) ) { return 0; } // Read the params: int port = 0; cLuaState::cTableRefPtr callbacks; if (!S.GetStackValues(2, port, callbacks)) { return S.ApiParamError("Cannot read parameters"); } // Check the validity: if ((port < 0) || (port > 65535)) { return S.ApiParamError("Port number out of range (%d, range 0 - 65535)", port); } auto port16 = static_cast<UInt16>(port); // Create the LuaTCPLink glue class: auto srv = std::make_shared<cLuaServerHandle>(port16, std::move(callbacks)); // Listen: srv->SetServerHandle(cNetwork::Listen(port16, srv), srv); // Register the server to be garbage-collected by Lua: tolua_pushusertype(L, srv.get(), "cServerHandle"); tolua_register_gc(L, lua_gettop(L)); // Return the server handle wrapper: S.Push(srv.get()); return 1; }