diff --git a/lua-test/lua/base/EventLister.lua b/lua-test/lua/base/EventLister.lua index 16e849b..37de936 100644 --- a/lua-test/lua/base/EventLister.lua +++ b/lua-test/lua/base/EventLister.lua @@ -3,24 +3,28 @@ --- Created by 無心道(15388152619). --- DateTime: 2024/10/31 16:54 -require("GameDebug") - ---事件注册 EventListerTable = {} + +EventListerTable.__index = EventListerTable + local __Recharge_Type = {} local __Recharge_PlayerDbKey = {} local __Recharge_GlobalDbKey = {} + ---注册全局key function EventListerTable.registerType(name, type, playerDbKey, globalDbKey) - gameDebug.assertTrue(playerDbKey ~= nil or globalDbKey ~= nil, "充值玩家数据库key或充值全局数据库key不能为空") + -- gameDebug.assertTrue((playerDbKey ~= nil) or (globalDbKey ~= nil), "充值玩家数据库key或充值全局数据库key不能为空") type = tostring(type) - gameDebug.assertNotNil(__Recharge_Type[type], "充值类型", type, "模块", __Recharge_Type[type]) + gameDebug.assertNotNil(__Recharge_Type[type], "充值类型", type, "模块") __Recharge_Type[type] = name + if playerDbKey then playerDbKey = tostring(playerDbKey) gameDebug.assertNotNil(__Recharge_PlayerDbKey[playerDbKey], "充值玩家数据库key", playerDbKey, "模块", __Recharge_PlayerDbKey[playerDbKey]) __Recharge_PlayerDbKey[playerDbKey] = name end + if globalDbKey then globalDbKey = tostring(globalDbKey) gameDebug.assertNotNil(__Recharge_GlobalDbKey[globalDbKey], "充值全局数据库", globalDbKey, "模块", __Recharge_GlobalDbKey[globalDbKey], "冲突") @@ -28,26 +32,40 @@ function EventListerTable.registerType(name, type, playerDbKey, globalDbKey) end end +--- 创建一个事件监听容器 +function EventListerTable.new(name) + local var = setmetatable({}, EventListerTable) + var.name = name + return var +end --- 获取事件容器 ---@param eventType any 事件类型 -function EventListerTable.eventMap(map, eventType, eventName) - gameDebug.assertNil(map, "数据集合异常") +function EventListerTable:eventMap(eventType, eventName) + eventType = eventType or "0" eventType = tostring(eventType) - gameDebug.assertNil(__Recharge_Type[eventType], "不存在事件类型", eventType, "模块", eventName) - if not map[eventType] then - map[eventType] = {} + gameDebug.assertNil(__Recharge_Type[eventType], self.name, "不存在事件类型", eventType, "模块", eventName) + if not self[eventType] then + self[eventType] = {} + self[eventType].MappingMap = {} + self[eventType].MappingList = {} end - return map[eventType] + return self[eventType] end --- 注册事件 ---@param eventType any 事件类型 ---@param eventName string 事件名称 ---@param eventFun function 事件回调函数 -function EventListerTable.eventLister(map, eventType, eventName, eventFun) - local em = EventListerTable.eventMap(map, eventType, eventName) - gameDebug.assertNotNil(em[eventName], "存在相同的事件【" .. eventName .. "】注册") - em[eventName] = eventFun +function EventListerTable:eventLister(eventType, eventName, eventFun, index) + local em = self:eventMap(eventType, eventName) + local funInfo = gameDebug.getFunctionInfo(eventFun) + gameDebug.assertPrintTrace(em.MappingMap[funInfo] == nil, self.name, "存在相同的事件【" .. eventName .. ", " .. funInfo .. "】注册") + local funMapping = { name = eventName, fun = eventFun, funInfo = funInfo, weight = tonumber((index or 9999)) } + em.MappingMap[funInfo] = funMapping + table.insert(em.MappingList, funMapping) + table.sort(em.MappingList, function(a, b) + return a.weight < b.weight + end) --gameDebug.printType(_VERSION, "注册事件:", self, em, eventType, eventName) end @@ -55,19 +73,26 @@ end ---@param eventType any 事件类型 ---@param name string 事件名称 ---@param ... any 事件参数 -function EventListerTable.triggerEvent(self, eventType, ...) - local em = EventListerTable.eventMap(self, eventType) +function EventListerTable:triggerEvent(eventType, ...) + local em = self:eventMap(eventType) if em then - for k, v in pairs(em) do - print("触发事件", k) - local s, e = xpcall(v, debug.traceback, ...) - gameDebug.assertPrintTrace(s, "触发事件", k, "调用异常", e, ...) + for _, v in pairs(em.MappingList) do + print(self.name, "触发监听", v.name, v.funInfo) + local s, e = xpcall(v.fun, debug.traceback, ...) + gameDebug.assertPrintTrace(s, "触发事件", v.name, v.funInfo, "调用异常", e, ...) end end end -EventListerTable.registerType("默认", 0, "player_db_key", "global_db_key") ---- 充值事件触发监听 -RechargeEventListerTable = { } ---- 充值消息路由监听 -RechargeMessageEventListerTable = { } -return EventListerTable \ No newline at end of file + +EventListerTable.registerType("默认", "0", "player_db_key", "global_db_key") + +--- 商业化模块充值事件触发监听 +RechargeEventListerTable = EventListerTable.new("充值回调") +--- 商业化模块前端通信消息路由监听 +RechargeMessageEventListerTable = EventListerTable.new("商业化消息请求路由") +--- 登录触发事件 +LoginEventListerTable = EventListerTable.new("登录") +--- 角色等级提升 +LevelUpEventListerTable = EventListerTable.new("等级提升触发") +--- 凌晨触发执行 +ZeroEventListerTable = EventListerTable.new("模块凌晨更新") diff --git a/lua-test/lua/base/GameDebug.lua b/lua-test/lua/base/GameDebug.lua index 0762a52..f2bfcca 100644 --- a/lua-test/lua/base/GameDebug.lua +++ b/lua-test/lua/base/GameDebug.lua @@ -32,13 +32,16 @@ end ---获取函数的名字 function gameDebug.get_function_name(func) - local info = debug.getinfo(func, "n") + local info = debug.getinfo(func) + gameDebug.print(info) return info.name or "匿名函数" end ---获取函数所在的文件名 function gameDebug.getFunctionInfo(func) - return gameDebug.get_function_file(func) .. "." .. gameDebug.get_function_name(func) + local debugInfo = debug.getinfo(func) + --获取不到函数名字,只能又文件名和行数表达了 + return (debugInfo.source or "匿名文件") .. ":" .. tostring(debugInfo.linedefined) end --- 把 table 数据转化成json字符串 diff --git a/lua-test/lua/module/ClassTest.lua b/lua-test/lua/module/ClassTest.lua index c3e299a..6c7526e 100644 --- a/lua-test/lua/module/ClassTest.lua +++ b/lua-test/lua/module/ClassTest.lua @@ -46,6 +46,6 @@ test:Level(2) test2:Name("t2") test2:Level(2) -TestClass.printName2(test) -TestClass.printName2(test2) -TestClass.printName2({ level = 1 }) \ No newline at end of file +--TestClass.printName2(test) +--TestClass.printName2(test2) +--TestClass.printName2({ level = 1 }) \ No newline at end of file diff --git a/lua-test/lua/module/TableInsert.lua b/lua-test/lua/module/TableInsert.lua new file mode 100644 index 0000000..d8f70db --- /dev/null +++ b/lua-test/lua/module/TableInsert.lua @@ -0,0 +1,54 @@ +--- 数据测试 +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by 無心道(15388152619). +--- DateTime: 2024/11/1 13:38 + +tableInsert = {} +local data = {} +local dataList = {} + +local function addData(id, name, index) + --if index then + -- if index < __i then + -- __i = index + -- end + --end + ---- 将从k开始的所有元素向后移动 + --for i = #dataList, __i, -1 do + -- dataList[i + 1] = dataList[i] + --end + local mapping = { id = id, name = name, weight = (index or 9999) } + data[id] = mapping + table.insert(dataList, mapping) + table.sort(dataList, function(a, b) + return tonumber(a.weight) < tonumber(b.weight) + end) +end + +addData("s12", "s2") +addData("s1", "s2") +addData("dste1", "s2") +addData("fs11", "我要第10", 10) +addData("s31", "s2", 998) +addData("d3", "我要第一", 2) +addData("d2", "我要第一", 1) +table.remove(dataList, 1) +gameDebug.print("table insert ", data, dataList) + +LoginEventListerTable:eventLister("0", "test", function() + print("test") +end,999999) + +LoginEventListerTable:eventLister("0", "test", function() + print("test9999") +end, 9999) + +LoginEventListerTable:eventLister("0", "test", function() + print("test100") +end,100) + +LoginEventListerTable:eventLister("0", "test", function() + print("test1") +end, 1) + +LoginEventListerTable:triggerEvent("0") \ No newline at end of file diff --git a/lua-test/lua/module/TestData.lua b/lua-test/lua/module/TestData.lua index 9e7ae8e..4c3960e 100644 --- a/lua-test/lua/module/TestData.lua +++ b/lua-test/lua/module/TestData.lua @@ -46,9 +46,14 @@ end function test33(o1, o2, o3) print("o1", o1, "o2", o2, "o3", o3) + + print(gameDebug.getFunctionInfo(test33)) + print(gameDebug.getFunctionInfo(function() + end)) + print(gameDebug.getFunctionInfo(TestData.print2)) end -test33(1, nil, 3) +--test33(1, nil, 3) --local var = TestData.new() --print(TestData.Lv(var, 33)) diff --git a/lua-test/luac/src/test/java/code/LuaTest.java b/lua-test/luac/src/test/java/code/LuaTest.java index 3f3675b..31fe306 100644 --- a/lua-test/luac/src/test/java/code/LuaTest.java +++ b/lua-test/luac/src/test/java/code/LuaTest.java @@ -1,6 +1,7 @@ package code; import lombok.extern.slf4j.Slf4j; +import luajava.ILuaContext; import luajava.LuaService; import luajava.LuaType; import luajava.luac.LuaFunction; @@ -50,7 +51,7 @@ public class LuaTest { } @After - public void after() { + public void after() throws InterruptedException { HashMap value = new HashMap<>(); luaService.getRuntime().getGlobals().put("getdata", new LuaFunction() { @Override public Object doAction(Lua L, Object[] args) { @@ -63,14 +64,15 @@ public class LuaTest { return value.put(String.valueOf(args[0]), args[1]); } }); - - luaService.getRuntime().call("printData"); + ILuaContext context = luaService.getRuntime().context(); + // luaService.getRuntime().call("printData"); // luaService.getRuntime().call("showmemory", Thread.currentThread().getName()); // luaService.getRuntime().call("t3", Long.MAX_VALUE); // luaService.getRuntime().call("cache_memory"); // luaService.getRuntime().call("printData"); // luaService.getRuntime().call("showmemory", Thread.currentThread().getName()); + Thread.sleep(500); } }