分享

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

 quasiceo 2014-01-15

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
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多