Callback
Callbacks bidirectionnels client ↔ serveur avec await, timeout et cleanup automatique.
Callbacks bidirectionnels client ↔ serveur avec await, timeout et cleanup automatique.
lib.callback permet à un côté de demander une valeur à l'autre et d'attendre la réponse —
avec un timeout et un cleanup automatique quand une ressource s'arrête.
lib.callback.register(name, handler) — une seule ressource peut servir un nom donné.
lib.callback.register('myscript:getStats', function(source)
return { kills = 3, deaths = 1 }
end)Côté serveur le handler est function(source, ...) ; côté client c'est function(...).
lib.callback.await(name, ...) bloque (async) jusqu'à la réponse de l'autre côté.
-- appelle un callback SERVEUR ; le 2e arg est le throttle (false = aucun)
local stats = lib.callback.await('myscript:getStats', false)-- appelle un callback CLIENT ; le 2e arg est l'id du joueur cible
local coords = lib.callback.await('myscript:getCoords', targetSource)namestringrequiredLe nom du callback enregistré.
delaynumber | falseoptionalClient → serveur uniquement (2e arg) : throttle local en ms. Si le même callback a été appelé il y a moins de delay ms, renvoie nil immédiatement — pratique contre le spam clic. false = pas de throttle. (Serveur → client, le 2e arg est plutôt le playerId cible.)
RegisterNUICallback('submit', function(data, cb)
local result = lib.callback.await('saveData', 500, data)
cb(result or { error = 'throttled' })
end)Timeout par défaut : 5 min (convar see:callbackTimeout) — au-delà tu reçois false, 'timed out'. Appeler un callback inconnu lève une erreur. Un throttle déclenché renvoie nil (pas une erreur) — vérifie-le. Toujours await dans un CreateThread, jamais le thread principal.