1
2Callback = {}
3
4local Requests = {}
5local RequestId = 0
6
7local TIMEOUT = 5000 -- ms
8
9--- Permet de récuperer des données depuis le serveur
10---@param name string
11---@param ... args
12---@return unknown
13function Callback.Trigger(name, ...)
14 local p = promise.new()
15
16 local id = RequestId
17 RequestId = RequestId + 1
18
19 Requests[id] = {
20 promise = p,
21 time = GetGameTimer()
22 }
23
24 TriggerServerEvent("cb:trigger", name, id, ...)
25
26 -- timeout protection
27 SetTimeout(TIMEOUT, function()
28 if Requests[id] then
29 Requests[id].promise:resolve(nil)
30 Requests[id] = nil
31 print("[Callback] Timeout:", name)
32 end
33 end)
34
35 return Citizen.Await(p)
36end
37
38RegisterNetEvent("cb:response", function(id, ...)
39 local req = Requests[id]
40
41 if not req then return end
42
43 req.promise:resolve(...)
44 Requests[id] = nil
45end)
46