local HeartBeat = {} local networkManager = require("Network/NetworkManager.lua") local F_MAX_DISCONNECT_PERIOD = 25 local F_HEART_BEAT_PERIOD = 5 local heartBeatCorutine = nil local function HeartBeatCoroutine() while networkManager:IsConnecting() do require("Network/C2S.lua"):HeartBeat() require("Base/CoroutineHelper.lua"):Wait(F_HEART_BEAT_PERIOD) local deltaTime = os.time() - networkManager:GetLastRecvTime() if deltaTime > F_MAX_DISCONNECT_PERIOD then CS.ZLog.Log.Error(string.format("Net Disconnected with not response time", deltaTime)) local eventManager = require("Base/ZEventDispatchCenter.lua") eventManager:DispatchEvent(eventManager.EventType.NET_DISCONNECTED) networkManager:Disconnect() break end end heartBeatCorutine = nil end function HeartBeat:Init() if heartBeatCorutine then require("Base/CoroutineHelper.lua"):Stop(heartBeatCorutine) end heartBeatCorutine = require("Base/CoroutineHelper.lua"):Start(HeartBeatCoroutine) end function HeartBeat:UnInit() -- 心跳 require("Base/CoroutineHelper.lua"):Stop(NetworkManager._heartBeatCorutine) NetworkManager._heartBeatCorutine = nil end return HeartBeat