42 lines
1.3 KiB
Lua
42 lines
1.3 KiB
Lua
local pendingCallbacks = {}
|
|
local callbackCounter = 0
|
|
local resourceName = GetCurrentResourceName()
|
|
local responseEvent = ('devx_core:client:callback:%s'):format(resourceName)
|
|
|
|
function DevXTriggerCallback(name, payload, callback)
|
|
assert(type(name) == 'string' and name:match('^[%w_%-]+:[%w_%-]+$'),
|
|
'Callbackname ist ungültig.')
|
|
assert(type(callback) == 'function', 'Clientcallback muss eine Funktion sein.')
|
|
|
|
callbackCounter = callbackCounter + 1
|
|
local requestId = ('%s:%s:%s'):format(resourceName, GetGameTimer(), callbackCounter)
|
|
|
|
pendingCallbacks[requestId] = callback
|
|
|
|
TriggerServerEvent(
|
|
('devx_core:server:callback:%s:%s'):format(resourceName, name),
|
|
requestId,
|
|
payload or {}
|
|
)
|
|
|
|
SetTimeout(22000, function()
|
|
local pending = pendingCallbacks[requestId]
|
|
if not pending then return end
|
|
|
|
pendingCallbacks[requestId] = nil
|
|
pending({
|
|
ok = false,
|
|
error = ('Keine Antwort auf %s. Prüfe die txAdmin- und F8-Konsole.'):format(name)
|
|
})
|
|
end)
|
|
end
|
|
|
|
RegisterNetEvent(responseEvent)
|
|
AddEventHandler(responseEvent, function(requestId, result)
|
|
local callback = pendingCallbacks[requestId]
|
|
if not callback then return end
|
|
|
|
pendingCallbacks[requestId] = nil
|
|
callback(result or { ok = false, error = 'Leere Serverantwort.' })
|
|
end)
|