Timer.lua 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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. register_timer = {
  48. monitor = 60000, --
  49. offlineCheck = 10000, -- 离线校验
  50. saveChar = 1000, -- 用户存db
  51. onZhengDian = 15000,
  52. humanRefresh = 10000, -- 角色心跳刷新
  53. middleHeartbeat = 3000,
  54. dayCheck = 100, -- 天检测
  55. unionOfflineCheck = 1000, -- 公会会长离线时间检查
  56. paomaHerartbeat = 10000, -- 跑马灯心跳
  57. tenSecond = 10000, -- 10秒1次通用
  58. oneMin = 60000, -- 60秒1次通用
  59. reportOnline = 300000, -- 在线时长上报心跳
  60. fcm = 60000, -- 防沉迷
  61. jjcGodWar = 2000, -- 众神之战
  62. jjcLadder = 2000, -- 天梯争霸
  63. valley = 2000, -- 荣耀峡谷
  64. later = 1000, -- 1秒1次 专门为了一些大数据量的处理延后处理用
  65. }
  66. LATER_DAYA = LATER_DAYA or {} -- {ts,func,param1, param2, param3, param4}
  67. function monitor()
  68. print(_G.collectgarbage("count"))
  69. local humanCnt = ObjHuman.getOnlineCnt()
  70. Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), humanCnt)
  71. Monitor.output()
  72. end
  73. function tenSecond()
  74. QQApi.onTimer()
  75. end
  76. function oneMin()
  77. MiddleConnect.onTimer()
  78. ZhanbuLogic.checkRecover()
  79. end
  80. function offlineCheck()
  81. _G.collectgarbage("step", 100000)
  82. ObjHuman.humanOfflineCheck()
  83. end
  84. function saveChar()
  85. ObjHuman.saveCharDB()
  86. end
  87. function humanRefresh()
  88. ObjHuman.refresh()
  89. end
  90. function doZhengDian(hour)
  91. -- 整点的时候刷新逻辑用的内存较多 这里gc一把
  92. _G.collectgarbage("step", 100000)
  93. if hour == 0 then
  94. YjTreasureLogic.onZero()
  95. YunYingLogic.onZero()
  96. for _, human in pairs(ObjHuman.onlineUuid) do
  97. ObjHuman.updateDaily(human)
  98. YunYingLogic.onZeroHuman(human)
  99. DailyTaskLogic.onLogin(human)
  100. end
  101. UnionLogic.onHour()
  102. LianyuLogic.onZero()
  103. SharePlatformLogic.onZero()
  104. WarReportMiddle.onZero()
  105. BillboardLogic.onZero()
  106. ChatRecord.CHAT_RECORD_REPETITION = {}
  107. HeroGrowUp.actLoop()
  108. LostTempleLogic.onZero()
  109. VoucherShopLogic.VoucherShop_OnZero()
  110. MainDianLogic.MaiDian_OnTime()
  111. ServerCommerceMiddle.CommerceMiddle_OnZero()
  112. end
  113. --if hour == 21 then
  114. -- if _G.is_middle ~= true then
  115. -- JjcLogic.onHour(hour)
  116. -- end
  117. --end
  118. JjcLogic.onHour(hour)
  119. JjcNewLadderLogic.onHour(hour)
  120. if hour == 2 then
  121. local weekDay = Util.getWeekDay()
  122. if weekDay == 2 then
  123. -- 每周一凌晨2點 斷開鏈接 并且重新取一下php的跨服信息 重新連新跨服
  124. MiddleConnect.autoResetMiddle()
  125. end
  126. end
  127. YunYingLogic.onHour(hour)
  128. UnionWarDBLogic.onHour(hour)
  129. AbsActLogic.onHour(hour)
  130. MoZhuMiddleLogic.onHour(hour)
  131. _G.collectgarbage("step", 100000)
  132. end
  133. lastUpDateTime = lastUpDateTime or nil
  134. function onZhengDian()
  135. if lastUpDateTime and (now - lastUpDateTime) < 180000 or 120000 < now % (1000 * 60 * 60) then
  136. return
  137. end
  138. lastUpDateTime = now
  139. local hour = os.date("%H", math.floor(now / 1000)) + 0
  140. print("onZhengDian", hour)
  141. Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), 'gc befor')
  142. _G.collectgarbage("collect")
  143. Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), 'gc after')
  144. doZhengDian(hour)
  145. end
  146. function dayCheck()
  147. local call = 1
  148. local now = os.time()
  149. local resetTime = CommonDB.getResetTime()
  150. if resetTime == 0 then
  151. CommonDB.setResetTime(now)
  152. return
  153. end
  154. if call == 1 then
  155. local sameDay = Util.isSameDay(resetTime, now)
  156. call = sameDay == nil and 0 or 1
  157. end
  158. if call == 0 then
  159. CommonDB.setResetTime(now)
  160. DrillLogic.dayCheck()
  161. end
  162. end
  163. function middleHeartbeat()
  164. MiddleHeartBeat.heartbeat()
  165. end
  166. function unionOfflineCheck()
  167. UnionLogic.onTimer()
  168. end
  169. function paomaHerartbeat()
  170. ChatPaoMaLogic.onTimer()
  171. end
  172. function reportOnline()
  173. ReportOnline.onTimer()
  174. end
  175. function fcm()
  176. FcmLogic.onTimer()
  177. end
  178. function jjcGodWar()
  179. JjcGodWarLogic.onTimer()
  180. end
  181. function jjcLadder()
  182. JjcLadderLogic.onTimer()
  183. end
  184. function valley()
  185. ValleyLogic.onTimer()
  186. end
  187. function later()
  188. if LATER_DAYA[1] == nil then
  189. return
  190. end
  191. local tempData = LATER_DAYA[1]
  192. local now = os.time()
  193. local ts = tempData.ts
  194. if ts <= now then
  195. table.remove(LATER_DAYA, 1)
  196. tempData.func(tempData.param1, tempData.param2, tempData.param3, tempData.param4)
  197. end
  198. end
  199. last_exe_time = last_exe_time or {}
  200. function handlerTime(msec)
  201. now = msec + d
  202. if not register_timer[last_exe_func] then
  203. last_exe_func = nil
  204. end
  205. local tmp = last_exe_func
  206. while true do
  207. local k, v = next(register_timer, last_exe_func)
  208. if not k then
  209. k, v = next(register_timer)
  210. end
  211. if not k then
  212. return
  213. end
  214. last_exe_func = k
  215. local last_time = last_exe_time[k]
  216. if last_time then
  217. if last_time + v <= now then
  218. last_exe_time[k] = now
  219. Monitor.handleTimer(_ENV[k], now - last_time, k)
  220. break
  221. end
  222. else
  223. last_exe_time[k] = now
  224. break
  225. end
  226. if k == tmp then
  227. return
  228. end
  229. end
  230. end
  231. local function cmpLater(a, b)
  232. return a.ts < b.ts
  233. end
  234. function addLater(laterSec, func, param1, param2, param3, param4)
  235. local tempData = {}
  236. tempData.ts = os.time() + laterSec
  237. tempData.func = func
  238. tempData.param1 = param1
  239. tempData.param2 = param2
  240. tempData.param3 = param3
  241. tempData.param4 = param4
  242. table.insert(LATER_DAYA, tempData)
  243. table.sort(LATER_DAYA, cmpLater)
  244. end