| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- now = now or 0 --当前时间
- d = d or 0 --真实时间的偏移值
- local Config = require("Config")
- local Log = require("common.Log")
- local Monitor = require("core.Monitor")
- local ObjHuman = require("core.ObjHuman")
- local JjcLogic = require("jjc.JjcLogic")
- local FundLogic = require("present.FundLogic")
- local LoginSignLogic = require("loginSign.LoginSignLogic")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local MiddleHeartBeat = require("middle.MiddleHeartBeat")
- local MiddleConnect = require("middle.MiddleConnect")
- local DrillLogic = require("drill.DrillLogic")
- local UnionWarMiddleLogic = require("union.UnionWarMiddleLogic")
- local UnionWarLogic = require("union.UnionWarLogic")
- local Util = require("common.Util")
- local UnionDBLogic = require("union.UnionDBLogic")
- local UnionLogic = require("union.UnionLogic")
- local BattleLogic = require("battle.BattleLogic")
- local CommonDB = require("common.CommonDB")
- local UnionWarDBLogic = require("union.UnionWarDBLogic")
- local ChatPaoMaLogic = require("chat.ChatPaoMaLogic")
- local QQApi = require("platform.QQApi")
- local ReportOnline = require("platform.ReportOnline")
- local LianyuLogic = require("lianyu.LianyuLogic")
- local YunYingLogic = require("yunying.YunYingLogic")
- local FcmLogic = require("fcm.FcmLogic")
- local SharePlatformLogic = require("present.SharePlatformLogic")
- local JjcGodWarLogic = require("jjcGodWar.JjcGodWarLogic")
- local JjcLadderLogic = require("jjcLadder.JjcLadderLogic")
- local DailyTaskLogic = require("dailyTask.DailyTaskLogic")
- local ValleyLogic = require("valley.ValleyLogic")
- local YjTreasureLogic = require("yjTreasure.YjTreasureLogic")
- local UnionWarLogic = require("union.UnionWarLogic")
- local WarReportMiddle = require("warReport.WarReportMiddle")
- local ZhanbuLogic = require("zhanbu.ZhanbuLogic")
- local BillboardLogic = require("billboard.BillboardLogic")
- local ChatRecord = require("chat.ChatRecord")
- local HeroGrowUp = require("absAct.HeroGrowUp")
- local AbsActLogic = require("absAct.AbsActLogic")
- local MoZhuMiddleLogic = require("mozhu.MoZhuMiddleLogic")
- local LostTempleLogic = require("lostTemple.lostTempleLogic")
- local MainDianLogic = require("MaiDian.MaiDianLogic")
- register_timer = {
- monitor = 60000, --
- offlineCheck = 10000, -- 离线校验
- saveChar = 1000, -- 用户存db
- onZhengDian = 15000,
- humanRefresh = 10000, -- 角色心跳刷新
- middleHeartbeat = 3000,
- dayCheck = 100, -- 天检测
- unionOfflineCheck = 1000, -- 公会会长离线时间检查
- paomaHerartbeat = 10000, -- 跑马灯心跳
- tenSecond = 10000, -- 10秒1次通用
- oneMin = 60000, -- 60秒1次通用
- reportOnline = 300000, -- 在线时长上报心跳
- fcm = 60000, -- 防沉迷
- jjcGodWar = 2000, -- 众神之战
- jjcLadder = 2000, -- 天梯争霸
- valley = 2000, -- 荣耀峡谷
- later = 1000, -- 1秒1次 专门为了一些大数据量的处理延后处理用
- }
- LATER_DAYA = LATER_DAYA or {} -- {ts,func,param1, param2, param3, param4}
- function monitor()
- print(_G.collectgarbage("count"))
- local humanCnt = ObjHuman.getOnlineCnt()
- Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), humanCnt)
- Monitor.output()
- end
- function tenSecond()
- QQApi.onTimer()
- end
- function oneMin()
- MiddleConnect.onTimer()
- ZhanbuLogic.checkRecover()
- end
- function offlineCheck()
- _G.collectgarbage("step", 100000)
- ObjHuman.humanOfflineCheck()
- end
- function saveChar()
- ObjHuman.saveCharDB()
- end
- function humanRefresh()
- ObjHuman.refresh()
- end
- function doZhengDian(hour)
- -- 整点的时候刷新逻辑用的内存较多 这里gc一把
- _G.collectgarbage("step", 100000)
- if hour == 0 then
- YjTreasureLogic.onZero()
- YunYingLogic.onZero()
- for _, human in pairs(ObjHuman.onlineUuid) do
- ObjHuman.updateDaily(human)
- YunYingLogic.onZeroHuman(human)
- DailyTaskLogic.onLogin(human)
- end
- UnionLogic.onHour()
- LianyuLogic.onZero()
- SharePlatformLogic.onZero()
- WarReportMiddle.onZero()
- BillboardLogic.onZero()
- ChatRecord.CHAT_RECORD_REPETITION = {}
- HeroGrowUp.actLoop()
- LostTempleLogic.onZero()
- MainDianLogic.MaiDian_OnTime()
- end
- --if hour == 21 then
- -- if _G.is_middle ~= true then
- -- JjcLogic.onHour(hour)
- -- end
- --end
- JjcLogic.onHour(hour)
- if hour == 2 then
- local weekDay = Util.getWeekDay()
- if weekDay == 2 then
- -- 每周一凌晨2點 斷開鏈接 并且重新取一下php的跨服信息 重新連新跨服
- MiddleConnect.autoResetMiddle()
- end
- end
- UnionWarDBLogic.onHour(hour)
- AbsActLogic.onHour(hour)
- MoZhuMiddleLogic.onHour(hour)
- _G.collectgarbage("step", 100000)
- end
- lastUpDateTime = lastUpDateTime or nil
- function onZhengDian()
- if lastUpDateTime and (now - lastUpDateTime) < 180000 or 120000 < now % (1000 * 60 * 60) then
- return
- end
- lastUpDateTime = now
-
- local hour = os.date("%H", math.floor(now / 1000)) + 0
- print("onZhengDian", hour)
-
-
- Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), 'gc befor')
- _G.collectgarbage("collect")
- Log.write(Log.LOGID_MONITOR, _G.collectgarbage("count"), 'gc after')
-
- doZhengDian(hour)
- end
- function dayCheck()
- local call = 1
- local now = os.time()
- local resetTime = CommonDB.getResetTime()
- if resetTime == 0 then
- CommonDB.setResetTime(now)
- return
- end
-
- if call == 1 then
- local sameDay = Util.isSameDay(resetTime, now)
- call = sameDay == nil and 0 or 1
- end
-
- if call == 0 then
- CommonDB.setResetTime(now)
- DrillLogic.dayCheck()
- end
- end
- function middleHeartbeat()
- MiddleHeartBeat.heartbeat()
- end
- function unionOfflineCheck()
- UnionLogic.onTimer()
- end
- function paomaHerartbeat()
- ChatPaoMaLogic.onTimer()
- end
- function reportOnline()
- ReportOnline.onTimer()
- end
- function fcm()
- FcmLogic.onTimer()
- end
- function jjcGodWar()
- JjcGodWarLogic.onTimer()
- end
- function jjcLadder()
- JjcLadderLogic.onTimer()
- end
- function valley()
- ValleyLogic.onTimer()
- end
- function later()
- if LATER_DAYA[1] == nil then
- return
- end
-
- local tempData = LATER_DAYA[1]
- local now = os.time()
- local ts = tempData.ts
- if ts <= now then
- table.remove(LATER_DAYA, 1)
- tempData.func(tempData.param1, tempData.param2, tempData.param3, tempData.param4)
- end
- end
- last_exe_time = last_exe_time or {}
- function handlerTime(msec)
- now = msec + d
- if not register_timer[last_exe_func] then
- last_exe_func = nil
- end
- local tmp = last_exe_func
- while true do
- local k, v = next(register_timer, last_exe_func)
- if not k then
- k, v = next(register_timer)
- end
- if not k then
- return
- end
-
- last_exe_func = k
- local last_time = last_exe_time[k]
- if last_time then
- if last_time + v <= now then
- last_exe_time[k] = now
- Monitor.handleTimer(_ENV[k], now - last_time, k)
- break
- end
- else
- last_exe_time[k] = now
- break
- end
- if k == tmp then
- return
- end
- end
- end
- local function cmpLater(a, b)
- return a.ts < b.ts
- end
- function addLater(laterSec, func, param1, param2, param3, param4)
- local tempData = {}
- tempData.ts = os.time() + laterSec
- tempData.func = func
- tempData.param1 = param1
- tempData.param2 = param2
- tempData.param3 = param3
- tempData.param4 = param4
- table.insert(LATER_DAYA, tempData)
- table.sort(LATER_DAYA, cmpLater)
- end
|