diff --git a/lua-test/lua/base/BootStarp.lua b/lua-test/lua/base/BootStarp.lua index f8cccf6..ad7ab9c 100644 --- a/lua-test/lua/base/BootStarp.lua +++ b/lua-test/lua/base/BootStarp.lua @@ -9,7 +9,7 @@ require("LuaScan") require("EventLister") local this = {} -local LoginEventListerTable = EventListerTable:new("测试扫描", 9999) +local LoginEventListerTable = EventListerTable.new("测试扫描", 9999) function onStart() diff --git a/lua-test/lua/base/EventLister.lua b/lua-test/lua/base/EventLister.lua index 04d8690..ff7d9b5 100644 --- a/lua-test/lua/base/EventLister.lua +++ b/lua-test/lua/base/EventLister.lua @@ -15,6 +15,8 @@ local __Recharge_Type = {} local __Recharge_PlayerDbKey = {} local __Recharge_GlobalDbKey = {} +local this = {} + ---注册全局key function EventListerTable.registerType(name, type, playerDbKey, globalDbKey) -- gameDebug.assertTrue((playerDbKey ~= nil) or (globalDbKey ~= nil), "充值玩家数据库key或充值全局数据库key不能为空") @@ -40,7 +42,7 @@ end function EventListerTable.new(name, max) local var = setmetatable({}, EventListerTable) var.name = name - var.maxCount = max + var.maxCount = max or 9999 return var end --- 获取事件容器 @@ -63,6 +65,7 @@ end ---@param eventFun function 事件回调函数 ---@param index number 优先级,越小越靠前,默认9999 function EventListerTable:eventLister(eventType, eventName, eventFun, index) + gameDebug.assertNil(self, "事件监听器为空 请使用引用方式调用") local em = self:eventMap(eventType, eventName) if em.maxCount and em.maxCount <= table.count(em.MappingList) then gameDebug.error(self.name, "事件类型", eventType, "数量超过限制", em.maxCount) @@ -75,7 +78,7 @@ function EventListerTable:eventLister(eventType, eventName, eventFun, index) table.sort(em.MappingList, function(a, b) return a.weight < b.weight end) - EventListerTable.print(self.name, "注册事件:", eventType, eventName, funInfo) + EventListerTable.print(self.name or "未知", "注册事件:", eventType, eventName, funInfo) end --- 触发事件 @@ -85,9 +88,9 @@ function EventListerTable:triggerEvent(eventType, ...) local em = self:eventMap(eventType) if em then for _, v in pairs(em.MappingList) do - EventListerTable.print(self.name, "触发监听", v.name, v.funInfo) + EventListerTable.print(self.name, "触发监听", v.name, "文件:", v.funInfo) local s, e = xpcall(v.fun, debug.traceback, ...) - gameDebug.assertPrint(s, "触发事件", v.name, v.funInfo, "调用异常", ..., e) + gameDebug.assertPrint(s, self.name, "触发事件", v.name, "文件:", v.funInfo, "调用异常", ..., e) end end end @@ -100,9 +103,9 @@ function EventListerTable:triggerResult(eventType, ...) if table.notEmpty(em) then gameDebug.assertTrue(table.count(em.MappingList) == 1, self.name, "存在多个事件监听", eventType) local v = em.MappingList[1] - EventListerTable.print(self.name, "触发监听", v.name, v.funInfo) + EventListerTable.print(self.name, "触发监听", v.name, "文件:", v.funInfo) local s, e = xpcall(v.fun, debug.traceback, ...) - gameDebug.assertPrint(s, "触发事件", v.name, v.funInfo, "调用异常", ..., e) + gameDebug.assertPrint(s, self.name, "触发事件", v.name, "文件:", v.funInfo, "调用异常", ..., e) if s then return e end @@ -110,13 +113,12 @@ function EventListerTable:triggerResult(eventType, ...) return nil end -local offPrint = false +local printOff = false function EventListerTable.print(...) - if offPrint then + if printOff then return end - print("out", gameDebug.toStrings(" ", ...)) - print("EventListerTable.print") + print(gameDebug.toStrings(" ", ...)) end EventListerTable.registerType("默认", "0", "player_db_key", "global_db_key") @@ -131,5 +133,9 @@ LoginEventListerTable = EventListerTable.new("登录") LevelUpEventListerTable = EventListerTable.new("等级提升触发") --- 凌晨触发执行 ZeroEventListerTable = EventListerTable.new("模块凌晨更新") - -CheckOpenEventListerTable = EventListerTable.new("检查模块是否开启", 1) \ No newline at end of file +--- 检查功能是否有效 +CheckValidEventListerTable = EventListerTable.new("检查模块是否开启", 1) +---小红点 +RedPointEventListerTable = EventListerTable.new("红点事件") +--- 运营活动前端通信信息路由监听 +OperationalActivitiesMessageEventListerTable = EventListerTable.new("运营活动消息请求路由") \ No newline at end of file diff --git a/lua-test/lua/base/GameDebug.lua b/lua-test/lua/base/GameDebug.lua index 03ad096..c0b482f 100644 --- a/lua-test/lua/base/GameDebug.lua +++ b/lua-test/lua/base/GameDebug.lua @@ -3,8 +3,6 @@ --- Created by 無心道(15388152619). --- DateTime: 2024/10/31 19:30 -require("LuaProfiler") - gameDebug = {} gameDebug.__index = gameDebug @@ -28,14 +26,13 @@ end ---获取函数所在的文件名 function gameDebug.get_function_file(func) - local info = debug.getinfo(func, "S") + local info = debug.getinfo(func) return info.short_src or "匿名文件" end ---获取函数的名字 function gameDebug.get_function_name(func) local info = debug.getinfo(func) - gameDebug.print(info) return info.name or "匿名函数" end @@ -265,40 +262,16 @@ function gameDebug.print0(isTraceback, appendYinhao, appendType, ...) print(printString) end ---- 辅助调试 ---- @param fun function 函数 +--- 辅助调试 不会抛出异常,执行异常会返回 nil --- @param ... any 如果调用 函数 异常后打印你需要显示的参数 function gameDebug.debug(fun, ...) - gameDebug.debug0(fun, true, false, ...) -end - ---- 辅助调试 输出变量类型 ---- @param fun function 函数 ---- @param ... any 如果调用 函数 异常后打印你需要显示的参数 -function gameDebug.debugType(fun, ...) - gameDebug.debug0(fun, true, true, ...) -end - -function gameDebug.debug0(fun, appendYinhao, appendType, ...) - local f_success, f_error = xpcall(fun, debug.traceback, ...) - if not f_success then - local printString = "" - local tmp = { ... } - local s, e = pcall(function() - for i, v in pairs(tmp) do - if not (printString == nil or printString == "") then - printString = printString .. ",\n" - end - printString = printString .. " " .. gameDebug.toString(v, appendYinhao, appendType) - end - end) - print("===================参数======================\n" - .. "[\n" .. printString .. "\n]" .. - "\n===================堆栈=======================\n" - .. f_error .. - "\n===================结束=======================\n" - ) + local s, e = xpcall(fun, debug.traceback, ...) + if not s then + local params = gameDebug.toStrings(" ", ...) + print("执行异常", params, "\n", e)--把异常信息反馈java里面 + return nil end + return e; end --- 断言对象为nil @@ -316,14 +289,14 @@ function gameDebug.assertEquals(o1, o2, ...) gameDebug.assertTrue(o1 ~= o2, ...) end ---- 断言对象为nil +--- 断言对象为 nil 触发异常 function gameDebug.assertNil(obj, ...) if obj == nil then gameDebug.error(...) end end ---- 断言对象为nil +--- 断言对象不是nil 触发异常 function gameDebug.assertNotNil(obj, ...) if obj ~= nil then gameDebug.error(...) @@ -335,7 +308,7 @@ end function gameDebug.assertPrint(b, ...) if not b then local msg = gameDebug.toStrings0(false, false, " ", ...) - _LUA_Print(msg) + print(msg)--反馈的java里面 end end @@ -345,7 +318,7 @@ function gameDebug.assertPrintTrace(b, ...) if not b then local msg = gameDebug.toStrings0(false, false, " ", ...) local traceback = debug.traceback(msg) - _LUA_Print(traceback) + print(traceback)--反馈的java里面 end end @@ -353,7 +326,5 @@ end function gameDebug.error(...) local var = gameDebug.toStrings0(false, false, " ", ...) var = debug.traceback(var) - _LUA_Error(var) -end - -return gameDebug \ No newline at end of file + error(var) +end \ No newline at end of file diff --git a/lua-test/lua/base/string.lua b/lua-test/lua/base/string-extend.lua similarity index 100% rename from lua-test/lua/base/string.lua rename to lua-test/lua/base/string-extend.lua diff --git a/lua-test/lua/module/TableInsert.lua b/lua-test/lua/module/TableInsert.lua index 46aaa98..f8e49fb 100644 --- a/lua-test/lua/module/TableInsert.lua +++ b/lua-test/lua/module/TableInsert.lua @@ -54,19 +54,19 @@ function tableInsert.onLogin() print("onLogin") end -LoginEventListerTable:eventLister("0", "test", function() - print("test") -end, 999999) - -LoginEventListerTable:eventLister("0", "test", this.t1) - -LoginEventListerTable:eventLister("0", "test", function() - print("test100") -end, 100) - -LoginEventListerTable:eventLister("0", "test", function() - print("test1") -end, 1) +--LoginEventListerTable:eventLister("0", "test", function() +-- print("test") +--end, 999999) +-- +--LoginEventListerTable:eventLister("0", "test", this.t1) +-- +--LoginEventListerTable:eventLister("0", "test", function() +-- print("test100") +--end, 100) +-- +--LoginEventListerTable:eventLister("0", "test", function() +-- print("test1") +--end, 1) --LoginEventListerTable:triggerEvent("0") diff --git a/lua-test/lua/module/TimeTest.lua b/lua-test/lua/module/TimeTest.lua new file mode 100644 index 0000000..fd5e8c3 --- /dev/null +++ b/lua-test/lua/module/TimeTest.lua @@ -0,0 +1,37 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by 無心道(15388152619). +--- DateTime: 2024/12/27 16:32 +--- + +function diffTimeDay() + local nowSec = os.time() + local openServerTime = 1730390400 + print(TimeUtil.timeFormat(openServerTime)) + print(TimeUtil.timeFormat(TimeUtil.addDay(openServerTime, 30) - 1)) + print(TimeUtil.timeFormat(TimeUtil.addDay(openServerTime, 60) - 1)) + print(TimeUtil.timeFormat(TimeUtil.addDay(openServerTime, 90) - 1)) + print(TimeUtil.timeFormat(TimeUtil.addDay(openServerTime, 120) - 1)) + print(TimeUtil.timeFormat(TimeUtil.addDay(openServerTime, 150) - 1)) + -- 开服天数 + local serverOpenDays = TimeUtil.diffDays(nowSec, openServerTime) + 1 + --通过开服时间计算当前最大购买次数 + local resetDay = 30 + local maxFirstCount = math.ceil(serverOpenDays / resetDay) + --计算到本轮结束还有多少天 + local endDay = maxFirstCount * resetDay - serverOpenDays + 1; + local nowStartSec = TimeUtil.creteTimeDayStart4Sec(nowSec) + --计算出结束时间 + local endDayTime = TimeUtil.addDay(nowStartSec, endDay) - 1 + --往前推计算出开始时间 + local startDayTime = TimeUtil.creteTimeDayStart4Sec(TimeUtil.addDay(endDayTime, -(resetDay - 1))) + --获取开始时间那一天的00:00:00 + startDayTime = TimeUtil.creteTimeDayStart4Sec(startDayTime) + print("充值首充判定", TimeUtil.timeFormat(startDayTime), TimeUtil.timeFormat(nowSec), TimeUtil.timeFormat(endDayTime), + "openday", serverOpenDays, maxFirstCount, + endDay, endDay + ) + return startDayTime, endDayTime, serverOpenDays <= resetDay +end + +diffTimeDay() \ No newline at end of file diff --git a/lua-test/luac/src/main/java/luajava/luac/LuaFunction.java b/lua-test/luac/src/main/java/luajava/luac/LuaFunction.java index b5cfe20..0c52ba2 100644 --- a/lua-test/luac/src/main/java/luajava/luac/LuaFunction.java +++ b/lua-test/luac/src/main/java/luajava/luac/LuaFunction.java @@ -1,6 +1,7 @@ package luajava.luac; import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; import party.iroiro.luajava.JFunction; import party.iroiro.luajava.Lua; import party.iroiro.luajava.value.LuaValue; @@ -11,9 +12,10 @@ import party.iroiro.luajava.value.LuaValue; * @author: wxd-gaming(無心道, 15388152619) * @version: 2024-08-26 11:01 */ -public interface LuaFunction extends JFunction { +@Slf4j +public abstract class LuaFunction implements JFunction { - @Override default int __call(Lua L) { + @Override public int __call(Lua L) { Object[] _args = null; try { int oldTop = L.getTop(); @@ -34,10 +36,11 @@ public interface LuaFunction extends JFunction { try { jsonString = JSON.toJSONString(_args); } catch (Exception ignore) {} + log.error("call lua function error " + jsonString, e); throw new RuntimeException("call lua function error " + jsonString, e); } } - Object doAction(Lua L, Object[] args); + protected abstract Object doAction(Lua L, Object[] args); } diff --git a/lua-test/luac/src/main/java/luajava/luac/LuaUtils.java b/lua-test/luac/src/main/java/luajava/luac/LuaUtils.java index aa83b66..84936d4 100644 --- a/lua-test/luac/src/main/java/luajava/luac/LuaUtils.java +++ b/lua-test/luac/src/main/java/luajava/luac/LuaUtils.java @@ -35,6 +35,8 @@ public class LuaUtils { return map; } else if (luaValue.type() == Lua.LuaType.NONE || luaValue.type() == Lua.LuaType.NIL) { return null; + } else if (luaValue.type() == Lua.LuaType.FUNCTION) { + return "lua method"; } return luaValue.toJavaObject(); } diff --git a/lua-test/luac/src/main/java/luajava/luac/func/JLogDebug.java b/lua-test/luac/src/main/java/luajava/luac/func/JLogDebug.java index 137a85b..3e8584a 100644 --- a/lua-test/luac/src/main/java/luajava/luac/func/JLogDebug.java +++ b/lua-test/luac/src/main/java/luajava/luac/func/JLogDebug.java @@ -14,7 +14,7 @@ import java.util.stream.Collectors; * @version: 2024-12-26 16:00 **/ @Slf4j -public class JLogDebug implements LuaFunction { +public class JLogDebug extends LuaFunction { @Override public Object doAction(Lua L, Object[] args) { if (log.isDebugEnabled()) diff --git a/lua-test/luac/src/main/java/luajava/luac/func/JLogError.java b/lua-test/luac/src/main/java/luajava/luac/func/JLogError.java index 09ead7c..fc23c46 100644 --- a/lua-test/luac/src/main/java/luajava/luac/func/JLogError.java +++ b/lua-test/luac/src/main/java/luajava/luac/func/JLogError.java @@ -14,7 +14,7 @@ import java.util.stream.Collectors; * @version: 2024-12-26 16:00 **/ @Slf4j -public class JLogError implements LuaFunction { +public class JLogError extends LuaFunction { @Override public Object doAction(Lua L, Object[] args) { log.error("{}", Arrays.stream(args).map(String::valueOf).collect(Collectors.joining(" "))); diff --git a/lua-test/luac/src/main/java/luajava/luac/func/JLogInfo.java b/lua-test/luac/src/main/java/luajava/luac/func/JLogInfo.java index 5286b47..bdbc64e 100644 --- a/lua-test/luac/src/main/java/luajava/luac/func/JLogInfo.java +++ b/lua-test/luac/src/main/java/luajava/luac/func/JLogInfo.java @@ -14,7 +14,7 @@ import java.util.stream.Collectors; * @version: 2024-12-26 16:00 **/ @Slf4j -public class JLogInfo implements LuaFunction { +public class JLogInfo extends LuaFunction { @Override public Object doAction(Lua L, Object[] args) { log.info("{}", Arrays.stream(args).map(String::valueOf).collect(Collectors.joining(" "))); diff --git a/lua-test/luac/src/test/java/code/LuaTest.java b/lua-test/luac/src/test/java/code/LuaTest.java index e8bc046..ddfd360 100644 --- a/lua-test/luac/src/test/java/code/LuaTest.java +++ b/lua-test/luac/src/test/java/code/LuaTest.java @@ -79,7 +79,7 @@ public class LuaTest { // luaService.getRuntime().call("printData"); // luaService.getRuntime().call("showmemory", Thread.currentThread().getName()); - Thread.sleep(500); + Thread.sleep(500000); } } diff --git a/lua-test/luac/src/test/java/code/LuaTest2.java b/lua-test/luac/src/test/java/code/LuaTest2.java new file mode 100644 index 0000000..de2746f --- /dev/null +++ b/lua-test/luac/src/test/java/code/LuaTest2.java @@ -0,0 +1,57 @@ +package code; + +import lombok.extern.slf4j.Slf4j; +import luajava.ILuaContext; +import luajava.LuaService; +import luajava.LuaType; +import luajava.bean.LuaActor; +import luajava.luac.LuaFunction; +import party.iroiro.luajava.Lua; + +import java.util.HashMap; + +/** + * 测试 + * + * @author: wxd-gaming(無心道, 15388152619) + * @version: 2024-10-21 19:21 + **/ +@Slf4j +public class LuaTest2 { + + + public static void main(String[] args) throws Exception { + LuaService luaService = LuaService.of(LuaType.LUA54, true, "lua"); + HashMap value = new HashMap<>(); + luaService.getRuntime().getGlobals().put("getdata", new LuaFunction() { + @Override public Object doAction(Lua L, Object[] args) { + return value.get(String.valueOf(args[0])); + } + }); + + luaService.getRuntime().getGlobals().put("setdata", new LuaFunction() { + @Override public Object doAction(Lua L, Object[] args) { + return value.put(String.valueOf(args[0]), args[1]); + } + }); + + ILuaContext context = luaService.getRuntime().context(); + context.call(true, "testActor", new LuaActor(7788L, "7788L")); + // while (true){ + // Thread.sleep(3000); + // context.call(true, "forTable0"); + // } + // context.call(true, "onInit"); + + // 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); + } + + +}