feat: use promises in callbacks + cleanup

This commit is contained in:
Zerio
2025-01-06 21:31:23 +01:00
parent de351c08bb
commit dc8fbf04e9
4 changed files with 76 additions and 24 deletions
+9 -2
View File
@@ -208,7 +208,9 @@ end)
-- Client Callback
RegisterNetEvent('QBCore:Client:TriggerClientCallback', function(name, ...)
QBCore.Functions.TriggerClientCallback(name, function(...)
if not QBCore.ClientCallbacks[name] then return end
QBCore.ClientCallbacks[name](function(...)
TriggerServerEvent('QBCore:Server:TriggerClientCallback', name, ...)
end, ...)
end)
@@ -216,7 +218,12 @@ end)
-- Server Callback
RegisterNetEvent('QBCore:Client:TriggerCallback', function(name, ...)
if QBCore.ServerCallbacks[name] then
QBCore.ServerCallbacks[name](...)
QBCore.ServerCallbacks[name].promise:resolve(...)
if QBCore.ServerCallbacks[name].callback then
QBCore.ServerCallbacks[name].callback(...)
end
QBCore.ServerCallbacks[name] = nil
end
end)
+27 -6
View File
@@ -6,14 +6,35 @@ function QBCore.Functions.CreateClientCallback(name, cb)
QBCore.ClientCallbacks[name] = cb
end
function QBCore.Functions.TriggerClientCallback(name, cb, ...)
if not QBCore.ClientCallbacks[name] then return end
QBCore.ClientCallbacks[name](cb, ...)
end
function QBCore.Functions.TriggerCallback(name, ...)
local cb = nil
local args = { ... }
if type(args[1]) == "function" then
cb = args[1]
table.remove(args, 1)
elseif type(args[1]) == "table" then
local _, err = pcall(function()
args[1]["__cfx_functionReferenc"] = args[1]["__cfx_functionReferenc"]
end)
if err and string.find(err, "Cannot index a funcref") then
cb = args[1]
table.remove(args, 1)
end
end
QBCore.ServerCallbacks[name] = {
callback = cb,
promise = promise.new()
}
function QBCore.Functions.TriggerCallback(name, cb, ...)
QBCore.ServerCallbacks[name] = cb
TriggerServerEvent('QBCore:Server:TriggerCallback', name, ...)
if cb == nil then
Citizen.Await(QBCore.ServerCallbacks[name].promise)
return QBCore.ServerCallbacks[name].promise.value
end
end
function QBCore.Debug(resource, obj, depth)