新版Lua服务器下线处理

关于服务器内玩家下线的处理逻辑

本篇文章仅适用于自己公司内的一套服务器框架,是个人笔记,无通用性:


  对于玩家的管理,统一在/common/user_mgr.lua中实现,相对应的玩家掉线处理函数也在这里面注册。

require("event.register").register_handler("ClientDisconnected", on_disconnected)

  远程注册的掉线函数,在掉线后会回调on_disconnected()函数,相应的房间清理等逻辑只需要在该函数中实现即可。

local function on_disconnected(session_id)
    log:info("Client(%u) disconnected.", session_id)
    -- for manager user erase
    M.erase(session_id)
    -- 由 dispatcher 统一广播到其他服

    -- 通知对战房间
    local c_util = require("c_util")
    local my_svr_id = c_util.get_my_svr_id()
    assert(my_svr_id > 0)
    local client_id = cid_hlpr.client_id(my_svr_id, session_id)
    require("demo.room_mgr").on_disconnected(client_id)

end  -- on_disconnected()

  在room_mgr中处理相应的内存释放逻辑
  

-- 玩家下线事件处理器。
function M.on_disconnected(client_id)
    log:info("room_mgr:on_disconnected")
    local room = M.get(client_id)
    if room then
        timer_queue:erase(room.frame_time_id)                                   --清空房间定时器
        timer_queue:erase(room.colider_time_id)
        M.erase(room)
        room:on_disconnected()                                                  --房间内存清理
        if room ~= nil then
            room = nil                                                          --内存清理
        end

        log:info("room had erased")
    end
    -- if room
end  -- on_disconnected()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值