用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值