打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
弹出层
js 简单的接口文档与页面显示信息
数据库|Flask+Redis实现登录权限管理
WordPress新用户注册时提示“您的密码重设链接无效”
DWRUtil未定义解决
EXT2.0初学笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服