Timer.lua 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. now = now or 0 --当前时间
  2. d = d or 0 --真实时间的偏移值
  3. local Config = require("Config")
  4. local Log = require("common.Log")
  5. local Monitor = require("core.Monitor")
  6. local ObjHuman = require("core.ObjHuman")
  7. local JjcLogic = require("jjc.JjcLogic")
  8. local FundLogic = require("present.FundLogic")
  9. local LoginSignLogic = require("loginSign.LoginSignLogic")
  10. local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
  11. local MiddleHeartBeat = require("middle.MiddleHeartBeat")
  12. local MiddleConnect = require("middle.MiddleConnect")
  13. local DrillLogic = require("drill.DrillLogic")
  14. local UnionWarMiddleLogic = require("union.UnionWarMiddleLogic")
  15. local UnionWarLogic = require("union.UnionWarLogic")
  16. local Util = require("common.Util")
  17. local UnionDBLogic = require("union.UnionDBLogic")
  18. local UnionLogic = require("union.UnionLogic")
  19. local BattleLogic = require("battle.BattleLogic")
  20. local CommonDB = require("common.CommonDB")
  21. local UnionWarDBLogic = require("union.UnionWarDBLogic")
  22. local ChatPaoMaLogic = require("chat.ChatPaoMaLogic")
  23. local QQApi = require("platform.QQApi")
  24. local ReportOnline = require("platform.ReportOnline")
  25. local LianyuLogic = require("lianyu.LianyuLogic")
  26. local YunYingLogic = require("yunying.YunYingLogic")
  27. local FcmLogic = require("fcm.FcmLogic")
  28. local SharePlatformLogic = require("present.SharePlatformLogic")
  29. local JjcGodWarLogic = require("jjcGodWar.JjcGodWarLogic")
  30. local JjcLadderLogic = require("jjcLadder.JjcLadderLogic")
  31. local DailyTaskLogic = require("dailyTask.DailyTaskLogic")
  32. local ValleyLogic = require("valley.ValleyLogic")
  33. local YjTreasureLogic = require("yjTreasure.YjTreasureLogic")
  34. local UnionWarLogic = require("union.UnionWarLogic")
  35. local WarReportMiddle = require("warReport.WarReportMiddle")
  36. local ZhanbuLogic = require("zhanbu.ZhanbuLogic")
  37. local BillboardLogic = require("billboard.BillboardLogic")
  38. local ChatRecord = require("chat.ChatRecord")
  39. local HeroGrowUp = require("absAct.HeroGrowUp")
  40. local AbsActLogic = require("absAct.AbsActLogic")
  41. local MoZhuMiddleLogic = require("mozhu.MoZhuMiddleLogic")
  42. local LostTempleLogic = require("lostTemple.lostTempleLogic")
  43. local MainDianLogic = require("MaiDian.MaiDianLogic")
  44. local VoucherShopLogic = require("voucher.VoucherShopLogic")
  45. local ServerCommerceMiddle = require("serverCommerce.ServerCommerceMiddle")
  46. local JjcNewLadderLogic = require("jjcnewladder.jjcNewLadderLogic")
  47. local CycleActivityLogic = require("yunying.CycleActivity")
  48. local commonOperate = require("core.commonOperate")
  49. local GodsAreaCS = require("godsArea.GodsAreaCS")
  50. local AreaBattleCS = require("areaBattle.AreaBattleCS")
  51. local AnotherWorldBattleCS = require("anotherWorldBattle.AnotherWorldBattleCS")
  52. local BaiZhanChengShenCS = require("baiZhanChengShen.BaiZhanChengShenCS")
  53. register_timer = {
  54. monitor = 60000, --
  55. offlineCheck = 10000, -- 离线校验
  56. saveChar = 1000, -- 用户存db
  57. onZhengDian = 15000,
  58. humanRefresh = 10000, -- 角色心跳刷新
  59. middleHeartbeat = 3000,
  60. dayCheck = 100, -- 天检测
  61. unionOfflineCheck = 1000, -- 公会会长离线时间检查
  62. paomaHerartbeat = 10000, -- 跑马灯心跳
  63. tenSecond = 10000, -- 10秒1次通用
  64. oneMin = 60000, -- 60秒1次通用
  65. reportOnline = 300000, -- 在线时长上报心跳
  66. fcm = 60000, -- 防沉迷
  67. jjcGodWar = 2000, -- 众神之战
  68. jjcLadder = 2000, -- 天梯争霸
  69. valley = 2000, -- 荣耀峡谷
  70. later = 1000, -- 1秒1次 专门为了一些大数据量的处理延后处理用
  71. }
  72. LATER_DAYA = LATER_DAYA or {} -- {ts,func,param1, param2, param3, param4}
  73. function monitor()
  74. print(_G.collectgarbage("count"))
  75. local humanCnt = ObjHuman.getOnlineCnt()
  76. Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), humanCnt)
  77. Monitor.output()
  78. end
  79. function tenSecond()
  80. QQApi.onTimer()
  81. end
  82. function oneMin()
  83. MiddleConnect.onTimer()
  84. ZhanbuLogic.checkRecover()
  85. AreaBattleCS.oneMin()
  86. AnotherWorldBattleCS.oneMin()
  87. BaiZhanChengShenCS.oneMin()
  88. end
  89. function offlineCheck()
  90. _G.collectgarbage("step", 100000)
  91. ObjHuman.humanOfflineCheck()
  92. end
  93. function saveChar()
  94. ObjHuman.saveCharDB()
  95. end
  96. function humanRefresh()
  97. ObjHuman.refresh()
  98. end
  99. function doZhengDian(hour)
  100. -- 整点的时候刷新逻辑用的内存较多 这里gc一把
  101. _G.collectgarbage("step", 100000)
  102. if hour == 0 then
  103. YjTreasureLogic.onZero()
  104. CycleActivityLogic.onZero()
  105. YunYingLogic.onZero()
  106. for _, human in pairs(ObjHuman.onlineUuid) do
  107. ObjHuman.updateDaily(human)
  108. YunYingLogic.onZeroHuman(human)
  109. DailyTaskLogic.onLogin(human)
  110. end
  111. UnionLogic.onHour()
  112. LianyuLogic.onZero()
  113. SharePlatformLogic.onZero()
  114. WarReportMiddle.onZero()
  115. BillboardLogic.onZero()
  116. ChatRecord.CHAT_RECORD_REPETITION = {}
  117. local expireTs = os.time() - 86400
  118. if DELIVER_CODE_HIS then
  119. for k, v in pairs(DELIVER_CODE_HIS) do
  120. if v < expireTs then DELIVER_CODE_HIS[k] = nil end
  121. end
  122. end
  123. if CHARGE_CODE_HIS then
  124. for k, v in pairs(CHARGE_CODE_HIS) do
  125. if v < expireTs then CHARGE_CODE_HIS[k] = nil end
  126. end
  127. end
  128. HeroGrowUp.actLoop()
  129. -- LostTempleLogic.onZero()
  130. VoucherShopLogic.VoucherShop_OnZero()
  131. MainDianLogic.MaiDian_OnTime()
  132. ServerCommerceMiddle.CommerceMiddle_OnZero()
  133. commonOperate.onZero()
  134. end
  135. GodsAreaCS.onHour(hour)
  136. AreaBattleCS.onHour(hour)
  137. AnotherWorldBattleCS.onHour(hour)
  138. BaiZhanChengShenCS.onHour(hour)
  139. --if hour == 21 then
  140. -- if _G.is_middle ~= true then
  141. -- JjcLogic.onHour(hour)
  142. -- end
  143. --end
  144. JjcLogic.onHour(hour)
  145. JjcNewLadderLogic.onHour(hour)
  146. if hour == 2 then
  147. local weekDay = Util.getWeekDay()
  148. if weekDay == 2 then
  149. -- 每周一凌晨2點 斷開鏈接 并且重新取一下php的跨服信息 重新連新跨服
  150. MiddleConnect.autoResetMiddle()
  151. end
  152. end
  153. YunYingLogic.onHour(hour)
  154. UnionWarDBLogic.onHour(hour)
  155. AbsActLogic.onHour(hour)
  156. MoZhuMiddleLogic.onHour(hour)
  157. -- 晚上11点检查美团2楼玩家每日固定奖励领取情况
  158. if hour == 23 then
  159. local ZhuanpanLogic = require("zhuanpan.ZhuanpanLogic")
  160. ZhuanpanLogic.checkMtFrom2floorDailyReward()
  161. end
  162. _G.collectgarbage("step", 100000)
  163. end
  164. lastUpDateTime = lastUpDateTime or nil
  165. function onZhengDian()
  166. if lastUpDateTime and (now - lastUpDateTime) < 180000 or 120000 < now % (1000 * 60 * 60) then
  167. return
  168. end
  169. lastUpDateTime = now
  170. local hour = os.date("%H", math.floor(now / 1000)) + 0
  171. print("onZhengDian", hour)
  172. Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), 'gc befor')
  173. _G.collectgarbage("collect")
  174. Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), 'gc after')
  175. doZhengDian(hour)
  176. end
  177. function dayCheck()
  178. local call = 1
  179. local now = os.time()
  180. local resetTime = CommonDB.getResetTime()
  181. if resetTime == 0 then
  182. CommonDB.setResetTime(now)
  183. return
  184. end
  185. if call == 1 then
  186. local sameDay = Util.isSameDay(resetTime, now)
  187. call = sameDay == nil and 0 or 1
  188. end
  189. if call == 0 then
  190. CommonDB.setResetTime(now)
  191. DrillLogic.dayCheck()
  192. end
  193. end
  194. function middleHeartbeat()
  195. MiddleHeartBeat.heartbeat()
  196. end
  197. function unionOfflineCheck()
  198. UnionLogic.onTimer()
  199. end
  200. function paomaHerartbeat()
  201. ChatPaoMaLogic.onTimer()
  202. end
  203. function reportOnline()
  204. ReportOnline.onTimer()
  205. end
  206. function fcm()
  207. FcmLogic.onTimer()
  208. end
  209. function jjcGodWar()
  210. JjcGodWarLogic.onTimer()
  211. end
  212. function jjcLadder()
  213. JjcLadderLogic.onTimer()
  214. end
  215. function valley()
  216. ValleyLogic.onTimer()
  217. end
  218. function later()
  219. if LATER_DAYA[1] == nil then
  220. return
  221. end
  222. local tempData = LATER_DAYA[1]
  223. local now = os.time()
  224. local ts = tempData.ts
  225. if ts <= now then
  226. table.remove(LATER_DAYA, 1)
  227. tempData.func(tempData.param1, tempData.param2, tempData.param3, tempData.param4)
  228. end
  229. end
  230. last_exe_time = last_exe_time or {}
  231. function handlerTime(msec)
  232. now = msec + d
  233. if not register_timer[last_exe_func] then
  234. last_exe_func = nil
  235. end
  236. local tmp = last_exe_func
  237. while true do
  238. local k, v = next(register_timer, last_exe_func)
  239. if not k then
  240. k, v = next(register_timer)
  241. end
  242. if not k then
  243. return
  244. end
  245. last_exe_func = k
  246. local last_time = last_exe_time[k]
  247. if last_time then
  248. if last_time + v <= now then
  249. last_exe_time[k] = now
  250. Monitor.handleTimer(_ENV[k], now - last_time, k)
  251. break
  252. end
  253. else
  254. last_exe_time[k] = now
  255. break
  256. end
  257. if k == tmp then
  258. return
  259. end
  260. end
  261. end
  262. local function cmpLater(a, b)
  263. return a.ts < b.ts
  264. end
  265. function addLater(laterSec, func, param1, param2, param3, param4)
  266. local tempData = {}
  267. tempData.ts = os.time() + laterSec
  268. tempData.func = func
  269. tempData.param1 = param1
  270. tempData.param2 = param2
  271. tempData.param3 = param3
  272. tempData.param4 = param4
  273. table.insert(LATER_DAYA, tempData)
  274. table.sort(LATER_DAYA, cmpLater)
  275. end