void Script::setState(lua_State* pState){ if(pState==NULL){ m_pState = luaL_newstate(); lua_pop( m_pState, luaopen_base( m_pState ) ); lua_pop( m_pState, luaopen_math( m_pState ) ); lua_pop( m_pState, 1 ); // Save a pointer to the thread Manager object in the global table // using the new thread script vm pointer as a key. lua_pushlightuserdata( m_pState, m_pState ); lua_pushlightuserdata( m_pState, this ); lua_settable( m_pState, LUA_GLOBALSINDEX ); }else{ m_pState = pState; } // open standard libs luaL_openlibs( m_pState ); lua_settop( m_pState, 0 ); // open lua socket libs luaopen_socket_core(m_pState); luaopen_mime_core(m_pState); luaopen_ssl_context(m_pState); luaopen_ssl_x509(m_pState); luaopen_ssl_core(m_pState); // open luasql libs luaopen_luasql_mysql(m_pState); // open luahiredis libs luaopen_hiredis(m_pState); // open self define c libs tolua_hivenet_open(m_pState); }
LUALIB_API void luaL_openlibs(lua_State *L) { const luaL_Reg *lib; /* call open functions from 'loadedlibs' and set results to global table */ for (lib = loadedlibs; lib->func; lib++) { luaL_requiref(L, lib->name, lib->func, 1); lua_pop(L, 1); /* remove lib */ } /* add open functions from 'preloadedlibs' into 'package.preload' table */ luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); for (lib = preloadedlibs; lib->func; lib++) { lua_pushcfunction(L, lib->func); lua_setfield(L, -2, lib->name); } lua_pop(L, 1); /* remove _PRELOAD table */ // Create luasql table.. luaopen_luasql_mysql(L); // Call this one first! It creates the main tabble.. luaopen_luasql_sqlite3(L); // Injects into the luasql table.. lua_pop(L, 1); // Pop the luasql table.. }