用Lua的coroutine在实现异步逻辑的妙处

发现用coroutine处理登陆,交易等异步流程的问题非常简单清晰。同比c++的代码不需要state这个东西。

直接上登陆的代码:

 

 

function co_client_login(User)
send_msg_to_loginserver()
msg = wait_msg_login(User,{msg_loginserver_logined})
if (not msg.ok) then
return
end
while(true) do
msg = wait_msg_login(User,{msg_create_char,msg_del_char,msg_select_char})
if (msg.type == msg_create_char) then
--...
elseif (msg.type == msg_del_char) then
--...
elseif(msg.type == msg_select_char) then
send_msg_to_dbserver(msg)
msg = wait_msg_login(User,{msg_dbserver_charinfo})
if (msg.char_data) then
User.char=create_char(msg.char_data)
enter_game(User.char)
return
end
end
end
end

function on_msg_client_login(User)
User.threads.co_login = create_corroutine(co_client_login)
end

function wait_msg_login(User,msgs)
User.threads.co_login_wait_msgs = msgs
end

function is_wait_msg_login(User,msg)
return is_in_table(User.threads.co_login_wait_msgs,msg)
end

function on_msg_login(User,msg)
if is_wait_msg_login(msg.type) then
resume(User.threads.co_login, msg)
end
end

function on_msg_loginserver_logined(User,msg)
on_msg_login(User,msg)
end

function on_msg_dbserver_chardata(User,msg)
on_msg_login(User,msg)
end

原文链接: https://www.cnblogs.com/yujiang2011/archive/2012/02/04/2337887.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    用Lua的coroutine在实现异步逻辑的妙处

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/40926

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午5:49
下一篇 2023年2月8日 下午5:49

相关推荐