51 lines
1.9 KiB
Lua
51 lines
1.9 KiB
Lua
|
|
local skynet = require "skynet"
|
||
|
|
local oo = require "Class"
|
||
|
|
local log = require "Log"
|
||
|
|
local dataType = require "DataType"
|
||
|
|
local errorInfo = require "ErrorInfo"
|
||
|
|
local Timer = oo.class()
|
||
|
|
|
||
|
|
Timer.list = {}
|
||
|
|
Timer.Status_Start = 1 --运行
|
||
|
|
Timer.Status_Stop = 2 --停止
|
||
|
|
|
||
|
|
--新增Timer
|
||
|
|
function Timer:Add( type , interval , callFunc , parent )
|
||
|
|
if not self.list[ type ] then
|
||
|
|
self.list[ type ] = {}
|
||
|
|
end
|
||
|
|
self.list[ type ].status = self.Status_Start --状态
|
||
|
|
self.list[ type ].callFunc = callFunc --回调函数
|
||
|
|
self.list[ type ].parent = parent --回调参数
|
||
|
|
self.list[ type ].interval = interval --间隔时间
|
||
|
|
self.list[ type ].nextFreshTime = skynet.GetTime() + interval --下一次刷新时间
|
||
|
|
callFunc( parent )
|
||
|
|
end
|
||
|
|
|
||
|
|
--刷新Timer
|
||
|
|
function Timer:Refresh()
|
||
|
|
local isSuc ,err = nil,nil
|
||
|
|
for k, v in pairs( self.list ) do
|
||
|
|
if self.Status_Start == v.status and skynet.GetTime() >= v.nextFreshTime then
|
||
|
|
function Do ()
|
||
|
|
local t1 = skynet.GetTime()
|
||
|
|
v.callFunc( v.parent )
|
||
|
|
local t2 = skynet.GetTime() - t1
|
||
|
|
if t2 > 3 then
|
||
|
|
skynet.server.clusterServer:SendErrorInfoToCenter( nil , errorInfo.ErrorCode.CalcTimeTooLong , string.format("Timer类型%d 计算时间过长", k))
|
||
|
|
log.info("Timer类型%d 运行时间",k, t2 )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
isSuc,err = pcall(Do)
|
||
|
|
if not isSuc then
|
||
|
|
log.info("Timer:Refresh 有报错" , err )
|
||
|
|
end
|
||
|
|
v.nextFreshTime = skynet.GetTime() + v.interval --下一次刷新时间
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
skynet.server.timer = Timer
|
||
|
|
return Timer
|