Merge pull request #1160 from Z3rio/main

feat: use promises in callbacks + cleanup
This commit is contained in:
Kakarot
2025-01-08 12:59:22 -05:00
committed by GitHub
5 changed files with 68 additions and 26 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)
+19 -7
View File
@@ -6,14 +6,26 @@ 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 = { ... }
function QBCore.Functions.TriggerCallback(name, cb, ...)
QBCore.ServerCallbacks[name] = cb
TriggerServerEvent('QBCore:Server:TriggerCallback', name, ...)
if QBCore.Shared.IsFunction(args[1]) then
cb = args[1]
table.remove(args, 1)
end
QBCore.ServerCallbacks[name] = {
callback = cb,
promise = promise.new()
}
TriggerServerEvent('QBCore:Server:TriggerCallback', name, table.unpack(args))
if cb == nil then
Citizen.Await(QBCore.ServerCallbacks[name].promise)
return QBCore.ServerCallbacks[name].promise.value
end
end
function QBCore.Debug(resource, obj, depth)
+11 -3
View File
@@ -32,7 +32,7 @@ local databaseConnected, bansTableExists = readyFunction == nil, readyFunction =
if readyFunction ~= nil then
MySQL.ready(function()
databaseConnected = true
local DatabaseInfo = QBCore.Functions.GetDatabaseInfo()
if not DatabaseInfo or not DatabaseInfo.exists then return end
@@ -125,15 +125,23 @@ end)
-- Client Callback
RegisterNetEvent('QBCore:Server:TriggerClientCallback', function(name, ...)
if QBCore.ClientCallbacks[name] then
QBCore.ClientCallbacks[name](...)
QBCore.ClientCallbacks[name].promise:resolve(...)
if QBCore.ClientCallbacks[name].callback then
QBCore.ClientCallbacks[name].callback(...)
end
QBCore.ClientCallbacks[name] = nil
end
end)
-- Server Callback
RegisterNetEvent('QBCore:Server:TriggerCallback', function(name, ...)
if not QBCore.ServerCallbacks[name] then return end
local src = source
QBCore.Functions.TriggerCallback(name, src, function(...)
QBCore.ServerCallbacks[name](src, function(...)
TriggerClientEvent('QBCore:Client:TriggerCallback', src, name, ...)
end, ...)
end)
+21 -14
View File
@@ -434,9 +434,26 @@ end
---@param source any
---@param cb function
---@param ... any
function QBCore.Functions.TriggerClientCallback(name, source, cb, ...)
QBCore.ClientCallbacks[name] = cb
TriggerClientEvent('QBCore:Client:TriggerClientCallback', source, name, ...)
function QBCore.Functions.TriggerClientCallback(name, source, ...)
local cb = nil
local args = { ... }
if QBCore.Shared.IsFunction(args[1]) then
cb = args[1]
table.remove(args, 1)
end
QBCore.ClientCallbacks[name] = {
callback = cb,
promise = promise.new()
}
TriggerClientEvent('QBCore:Client:TriggerClientCallback', source, name, table.unpack(args))
if cb == nil then
Citizen.Await(QBCore.ClientCallbacks[name].promise)
return QBCore.ClientCallbacks[name].promise.value
end
end
---Create Server Callback
@@ -446,16 +463,6 @@ function QBCore.Functions.CreateCallback(name, cb)
QBCore.ServerCallbacks[name] = cb
end
---Trigger Serv er Callback
---@param name string
---@param source any
---@param cb function
---@param ... any
function QBCore.Functions.TriggerCallback(name, source, cb, ...)
if not QBCore.ServerCallbacks[name] then return end
QBCore.ServerCallbacks[name](source, cb, ...)
end
-- Items
---Create a usable item
@@ -475,7 +482,7 @@ function QBCore.Functions.CreateUseableItem(item, data)
elseif type(data) == "function" then
rawFunc = data
end
if rawFunc then
QBCore.UsableItems[item] = {
func = rawFunc,
+8
View File
@@ -68,6 +68,14 @@ function QBShared.ChangeVehicleExtra(vehicle, extra, enable)
end
end
function QBShared.IsFunction(value)
if type(value) == 'table' then
return value.__cfx_functionReference ~= nil and type(value.__cfx_functionReference) == "string"
end
return type(value) == 'function'
end
function QBShared.SetDefaultVehicleExtras(vehicle, config)
-- Clear Extras
for i = 1, 20 do