简易的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,如此一来在收到服务器背包变动响应时,便会触发客户端背包变动事件并执行回调函数;

以上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值