Timer.lua 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  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. doZhengDian(hour)
  133. end
  134. function dayCheck()
  135. local call = 1
  136. local now = os.time()
  137. local resetTime = CommonDB.getResetTime()
  138. if resetTime == 0 then
  139. CommonDB.setResetTime(now)
  140. return
  141. end
  142. if call == 1 then
  143. local sameDay = Util.isSameDay(resetTime, now)
  144. call = sameDay == nil and 0 or 1
  145. end
  146. if call == 0 then
  147. CommonDB.setResetTime(now)
  148. DrillLogic.dayCheck()
  149. end
  150. end
  151. function middleHeartbeat()
  152. MiddleHeartBeat.heartbeat()
  153. end
  154. function unionOfflineCheck()
  155. UnionLogic.onTimer()
  156. end
  157. function paomaHerartbeat()
  158. ChatPaoMaLogic.onTimer()
  159. end
  160. function reportOnline()
  161. ReportOnline.onTimer()
  162. end
  163. function fcm()
  164. FcmLogic.onTimer()
  165. end
  166. function jjcGodWar()
  167. JjcGodWarLogic.onTimer()
  168. end
  169. function jjcLadder()
  170. JjcLadderLogic.onTimer()
  171. end
  172. function valley()
  173. ValleyLogic.onTimer()
  174. end
  175. function later()
  176. if LATER_DAYA[1] == nil then
  177. return
  178. end
  179. local tempData = LATER_DAYA[1]
  180. local now = os.time()
  181. local ts = tempData.ts
  182. if ts <= now then
  183. table.remove(LATER_DAYA, 1)
  184. tempData.func(tempData.param1, tempData.param2, tempData.param3, tempData.param4)
  185. end
  186. end
  187. last_exe_time = last_exe_time or {}
  188. function handlerTime(msec)
  189. now = msec + d
  190. if not register_timer[last_exe_func] then
  191. last_exe_func = nil
  192. end
  193. local tmp = last_exe_func
  194. while true do
  195. local k, v = next(register_timer, last_exe_func)
  196. if not k then
  197. k, v = next(register_timer)
  198. end
  199. if not k then
  200. return
  201. end
  202. last_exe_func = k
  203. local last_time = last_exe_time[k]
  204. if last_time then
  205. if last_time + v <= now then
  206. last_exe_time[k] = now
  207. Monitor.handleTimer(_ENV[k], now - last_time, k)
  208. break
  209. end
  210. else
  211. last_exe_time[k] = now
  212. break
  213. end
  214. if k == tmp then
  215. return
  216. end
  217. end
  218. end
  219. local function cmpLater(a, b)
  220. return a.ts < b.ts
  221. end
  222. function addLater(laterSec, func, param1, param2, param3, param4)
  223. local tempData = {}
  224. tempData.ts = os.time() + laterSec
  225. tempData.func = func
  226. tempData.param1 = param1
  227. tempData.param2 = param2
  228. tempData.param3 = param3
  229. tempData.param4 = param4
  230. table.insert(LATER_DAYA, tempData)
  231. table.sort(LATER_DAYA, cmpLater)
  232. end