mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-18 14:26:03 +01:00
feat: callbacks
This commit is contained in:
@@ -9,3 +9,51 @@ end
|
|||||||
function NDCore.Functions.GetCharacters()
|
function NDCore.Functions.GetCharacters()
|
||||||
return NDCore.Characters
|
return NDCore.Characters
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Callbacks are licensed under LGPL v3.0
|
||||||
|
-- <https://github.com/overextended/ox_lib>
|
||||||
|
NDCore.callback = {}
|
||||||
|
local events = {}
|
||||||
|
|
||||||
|
RegisterNetEvent("ND:callbacks", function(key, ...)
|
||||||
|
local cb = events[key]
|
||||||
|
return cb and cb(...)
|
||||||
|
end)
|
||||||
|
|
||||||
|
local function triggerCallback(_, name, cb, ...)
|
||||||
|
local key = ("%s:%s"):format(name, math.random(0, 100000))
|
||||||
|
TriggerServerEvent(("ND:%s_cb"):format(name), key, ...)
|
||||||
|
|
||||||
|
local promise = not cb and promise.new()
|
||||||
|
|
||||||
|
events[key] = function(response, ...)
|
||||||
|
response = { response, ... }
|
||||||
|
events[key] = nil
|
||||||
|
|
||||||
|
if promise then
|
||||||
|
return promise:resolve(response)
|
||||||
|
end
|
||||||
|
|
||||||
|
if cb then
|
||||||
|
cb(table.unpack(response))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if promise then
|
||||||
|
return table.unpack(Citizen.Await(promise))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
setmetatable(NDCore.callback, {
|
||||||
|
__call = triggerCallback
|
||||||
|
})
|
||||||
|
|
||||||
|
function NDCore.callback.await(name, ...)
|
||||||
|
return triggerCallback(nil, name, false, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
function NDCore.callback.register(name, callback)
|
||||||
|
RegisterNetEvent(("ND:%s_cb"):format(name), function(key, ...)
|
||||||
|
TriggerServerEvent("ND:callbacks", key, callback(...))
|
||||||
|
end)
|
||||||
|
end
|
||||||
@@ -718,3 +718,53 @@ function NDCore.Functions.VersionChecker(expectedResourceName, resourceName, dow
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
NDCore.Functions.VersionChecker("ND_Core", GetCurrentResourceName(), "https://github.com/ND-Framework/ND_Core", "https://raw.githubusercontent.com/ND-Framework/ND_Core/main/fxmanifest.lua")
|
NDCore.Functions.VersionChecker("ND_Core", GetCurrentResourceName(), "https://github.com/ND-Framework/ND_Core", "https://raw.githubusercontent.com/ND-Framework/ND_Core/main/fxmanifest.lua")
|
||||||
|
|
||||||
|
|
||||||
|
-- Callbacks are licensed under LGPL v3.0
|
||||||
|
-- <https://github.com/overextended/ox_lib>
|
||||||
|
NDCore.callback = {}
|
||||||
|
local events = {}
|
||||||
|
|
||||||
|
RegisterNetEvent("ND:callbacks", function(key, ...)
|
||||||
|
local cb = events[key]
|
||||||
|
return cb and cb(...)
|
||||||
|
end)
|
||||||
|
|
||||||
|
function triggerCallback(_, name, playerId, cb, ...)
|
||||||
|
local key = ("%s:%s:%s"):format(name, math.random(0, 100000), playerId)
|
||||||
|
TriggerClientEvent(("ND:%s_cb"):format(name), playerId, key, ...)
|
||||||
|
|
||||||
|
local promise = not cb and promise.new()
|
||||||
|
|
||||||
|
events[key] = function(response, ...)
|
||||||
|
response = { response, ... }
|
||||||
|
events[key] = nil
|
||||||
|
|
||||||
|
if promise then
|
||||||
|
return promise:resolve(response)
|
||||||
|
end
|
||||||
|
|
||||||
|
if cb then
|
||||||
|
cb(table.unpack(response))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if promise then
|
||||||
|
return table.unpack(Citizen.Await(promise))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
setmetatable(NDCore.callback, {
|
||||||
|
__call = triggerCallback
|
||||||
|
})
|
||||||
|
|
||||||
|
function NDCore.callback.await(name, playerId, ...)
|
||||||
|
return triggerCallback(nil, name, playerId, false, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
function NDCore.callback.register(name, callback)
|
||||||
|
RegisterNetEvent(("ND:%s_cb"):format(name), function(key, ...)
|
||||||
|
local src = source
|
||||||
|
TriggerClientEvent("ND:callbacks", src, key, callback(src, ...))
|
||||||
|
end)
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user