【tolua】c++类的一个成员回调函数如何在lua中也是相当于一个回调函数?

changecode 2014-05-06 11:37:06
直接贴代码求教

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中触发?谢谢。
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
changecode 2014-05-11
  • 打赏
  • 举报
回复
问题今天解决了,做一个全局的变量就行了。
changecode 2014-05-09
  • 打赏
  • 举报
回复
我贴上我的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;
}
changecode 2014-05-09
  • 打赏
  • 举报
回复
引用 1 楼 yingruxue 的回复:
CServer:new是你在C++里定义的类的静态方法,生成一个C++对象。这个c++ 对象在监听端口,同时 accepthandler 也应该在这个对象上。你监听的时候一定绑定了回调函数。如果一定要在lua 里处理,就在那个 回调函数里调用lua_callfunction,把命令转由lua脚本执行。
您好,感谢您的回复。我的lua知识比较有限。如果我在 CServer::acceptHandler 中调用 lua 函数 function server:acceptHandler(socket, index, err),但是我是用 tolua 将类转给lua使用的。调用lua函数应该要用到 lua_getglobal(L, "acceptHandler"); /* function to be called */ (不知道对不对),我不知道如何获取这个L值?我这个类中是没有L这个值的额,谢谢指点。
yingruxue 2014-05-07
  • 打赏
  • 举报
回复
CServer:new是你在C++里定义的类的静态方法,生成一个C++对象。这个c++ 对象在监听端口,同时 accepthandler 也应该在这个对象上。你监听的时候一定绑定了回调函数。如果一定要在lua 里处理,就在那个 回调函数里调用lua_callfunction,把命令转由lua脚本执行。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧