CServer类中
m_pAcceptor->async_accept( *pSocket, boost::bind(&CServer::acceptHandler, this,
pSocket, iIndex, boost::asio::placeholders::error) );
void CServer::acceptHandler(tcp::socket *pSocket, int iIndex, error_code ec);
在纯c++运行的时候,acceptHandler函数是能够正常回调到的,但是转到lua中。
local server = CServer:new(bind_port);
function server:acceptHandler(socket, index, err)
print("--->> on_connect, index:", index);
end
server:start()
server:run();
acceptHandler函数也是能够正常回调到的,但是确是在c++中回调,我想在lua中处理。也就是在
function server:acceptHandler(socket, index, err)
print("--->> on_connect, index:", index);
end
中处理,请问如何将这个回调转移到lua中触发?谢谢。
4 个解决方案
#1
CServer:new是你在C++里定义的类的静态方法,生成一个C++对象。这个c++ 对象在监听端口,同时
accepthandler 也应该在这个对象上。你监听的时候一定绑定了回调函数。如果一定要在lua 里处理,就在那个
回调函数里调用lua_callfunction,把命令转由lua脚本执行。
accepthandler 也应该在这个对象上。你监听的时候一定绑定了回调函数。如果一定要在lua 里处理,就在那个
回调函数里调用lua_callfunction,把命令转由lua脚本执行。
#2
您好,感谢您的回复。我的lua知识比较有限。如果我在 CServer::acceptHandler 中调用 lua 函数
function server:acceptHandler(socket, index, err),但是我是用 tolua 将类转给lua使用的。调用lua函数应该要用到 lua_getglobal(L, "acceptHandler"); /* function to be called */ (不知道对不对),我不知道如何获取这个L值?我这个类中是没有L这个值的额,谢谢指点。
#3
我贴上我的main函数代码:
int luaopen_Engine(lua_State* tolua_S);//这个就是用tolua将c++封装后的可给lua调用的接口。
int main(int argc, char* argv[])
{
cout << " ====== main in c++ ====== " << endl;
lua_State* L = lua_open();
luaopen_base(L);
luaopen_Engine(L);
string strLuaFile;
if (argc == 2)
{
strLuaFile = argv[1];
}
else
{
strLuaFile = "start.lua";
}
if ( luaL_loadfile(L, strLuaFile.c_str()) || lua_pcall(L, 0, 0, 0) )
{
{
const char * error = lua_tostring(L, -1) ;
cout << string(error) << endl;
}
}
cout << "in c++ exit!" << endl;
return 0;
}
#4
问题今天解决了,做一个全局的变量就行了。
#1
CServer:new是你在C++里定义的类的静态方法,生成一个C++对象。这个c++ 对象在监听端口,同时
accepthandler 也应该在这个对象上。你监听的时候一定绑定了回调函数。如果一定要在lua 里处理,就在那个
回调函数里调用lua_callfunction,把命令转由lua脚本执行。
accepthandler 也应该在这个对象上。你监听的时候一定绑定了回调函数。如果一定要在lua 里处理,就在那个
回调函数里调用lua_callfunction,把命令转由lua脚本执行。
#2
您好,感谢您的回复。我的lua知识比较有限。如果我在 CServer::acceptHandler 中调用 lua 函数
function server:acceptHandler(socket, index, err),但是我是用 tolua 将类转给lua使用的。调用lua函数应该要用到 lua_getglobal(L, "acceptHandler"); /* function to be called */ (不知道对不对),我不知道如何获取这个L值?我这个类中是没有L这个值的额,谢谢指点。
#3
我贴上我的main函数代码:
int luaopen_Engine(lua_State* tolua_S);//这个就是用tolua将c++封装后的可给lua调用的接口。
int main(int argc, char* argv[])
{
cout << " ====== main in c++ ====== " << endl;
lua_State* L = lua_open();
luaopen_base(L);
luaopen_Engine(L);
string strLuaFile;
if (argc == 2)
{
strLuaFile = argv[1];
}
else
{
strLuaFile = "start.lua";
}
if ( luaL_loadfile(L, strLuaFile.c_str()) || lua_pcall(L, 0, 0, 0) )
{
{
const char * error = lua_tostring(L, -1) ;
cout << string(error) << endl;
}
}
cout << "in c++ exit!" << endl;
return 0;
}
#4
问题今天解决了,做一个全局的变量就行了。