Timer.lua 7.9 KB

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