简易的Lua客户端事件框架

本文旨在提供一个Lua客户端事件框架简单思路

下面以背包刷新事件为例,展示下Lua客户端的事件注册监听完整流程

首先创建事件管理类:

ClientEventManager = {
    
    }
local this = ClientEventManager

this.eventIds = {
    
    }
this.eventMap = {
    
    }
---派发客户端事件
function ClientEventManager.Dispatch(enumId,message)
    if not table.contains(this.eventIds,enumId) then
        print("事件未注册!")
        return
    end
    local curEvent = this.eventMap[enumId]
    if curEvent then
        local callRet,err = xpcall(curEvent.callback,debug.traceback,curEvent.ui,message)
        if not callRet then
            logErrorWithoutTraceBack(err)
        end
    end
end

---注册客户端事件
---@param enumId 事件枚举
---@param callback 回调函数
---@param ui 注册事件的UI界面
---@param param 事件参数
function ClientEventManager.RegistEvent(enumId,callback,ui)
    this.eventMap[enumId] = {
    
    callback = callback,ui = ui}
    if not table.contains(this.eventIds,enumId) then
        table.insert(this.eventIds,enumId)
    end
end

事件枚举类:

EventEnum = {
    
    
    BagChange = enum(0)
}

然后是背包界面类:

BagUI = {
    
    }
local this = BagUI

---注册并监听客户端背包变化事件
function BagUI:RegistEvent()
    ClientEventManager.RegistEvent(EventEnum.BagChange,this.OnBagChange,this)
end

function BagUI:OnBagChange(_,message)
    print("背包变动后需要执行的逻辑")
end

最后是服务器背包消息响应类:

BagController = {
    
    }

---服务器给到客户端的背包变动响应
function BagController:ResBagChange(_,message)
    --派发背包变动客户端事件
    ClientEventManager.Dispatch(EventEnum.BagChange,message)
end

整个过程总结起来就是:
1,首先在背包界面注册背包变动事件并绑定回调函数;
2,然后在服务器响应类中增加派发客户端的背包变动事件代码;
3,如此一来在收到服务器背包变动响应时,便会触发客户端背包变动事件并执行回调函数;

以上。

猜你喜欢

转载自blog.csdn.net/m0_46571622/article/details/128631932