fix(timeout): Fix server timeout problems (clock too slow) under rare conditions

This commit is contained in:
Jérémie N'gadi
2017-11-04 10:34:04 +01:00
parent 6a174821f1
commit 4b1f056103
2 changed files with 19 additions and 31 deletions
+2 -24
View File
@@ -3,7 +3,8 @@ ESX.Players = {}
ESX.UsableItemsCallbacks = {}
ESX.Items = {}
ESX.ServerCallbacks = {}
ESX.TimeoutCallbacks = {}
ESX.TimeoutCount = -1
ESX.CancelledTimeouts = {}
ESX.LastPlayerData = {}
ESX.Pickups = {}
ESX.PickupId = 0
@@ -76,26 +77,3 @@ AddEventHandler('esx:triggerServerCallback', function(name, requestId, ...)
end)
-- SetTimeout
CreateThread(function()
while true do
Wait(0)
local currTime = os.clock() * 1000
for i=1, #ESX.TimeoutCallbacks, 1 do
if ESX.TimeoutCallbacks[i] ~= nil then
if currTime >= ESX.TimeoutCallbacks[i].time then
ESX.TimeoutCallbacks[i].cb()
ESX.TimeoutCallbacks[i] = nil
end
end
end
end
end)
+17 -7
View File
@@ -27,15 +27,25 @@ ESX.GetRandomString = function(length)
end
ESX.SetTimeout = function(msec, cb)
table.insert(ESX.TimeoutCallbacks, {
time = os.clock() * 1000 + msec,
cb = cb
})
return #ESX.TimeoutCallbacks
local id = ESX.TimeoutCount + 1
SetTimeout(msec, function()
if ESX.CancelledTimeouts[id] then
ESX.CancelledTimeouts[id] = nil
else
cb()
end
end)
return id
end
ESX.ClearTimeout = function(i)
ESX.TimeoutCallbacks[i] = nil
ESX.ClearTimeout = function(id)
ESX.CancelledTimeouts[id] = true
end
ESX.RegisterServerCallback = function(name, cb)