mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-09-04 16:23:21 +00:00
feat(modules/callback): add Await callbacks
This commit is contained in:
@@ -3,22 +3,47 @@ local serverRequests = {}
|
|||||||
|
|
||||||
local clientCallbacks = {}
|
local clientCallbacks = {}
|
||||||
|
|
||||||
---@param eventName string
|
ESX.TriggerServerCallback = setmetatable({
|
||||||
---@param callback function
|
---@param eventName string
|
||||||
---@param ... any
|
---@param ... any
|
||||||
ESX.TriggerServerCallback = function(eventName, callback, ...)
|
Await = function(eventName, ...)
|
||||||
serverRequests[RequestId] = callback
|
assert(type(eventName) == 'string', 'Argument 1 `eventName` is not a string!')
|
||||||
|
local p = promise.new()
|
||||||
TriggerServerEvent('esx:triggerServerCallback', eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
|
||||||
|
|
||||||
RequestId = RequestId + 1
|
serverRequests[RequestId] = p
|
||||||
end
|
|
||||||
|
TriggerServerEvent('esx:triggerServerCallback', eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
||||||
|
|
||||||
|
RequestId = RequestId + 1
|
||||||
|
|
||||||
|
return Citizen.Await(p)
|
||||||
|
end
|
||||||
|
}, {
|
||||||
|
---@param eventName string
|
||||||
|
---@param callback function
|
||||||
|
---@param ... any
|
||||||
|
__call = function(_, eventName, callback, ...)
|
||||||
|
assert(type(eventName) == 'string', 'Argument 1 `eventName` is not a string!')
|
||||||
|
assert(type(callback) == 'function', 'Argument 2 `callback` is not a function!')
|
||||||
|
|
||||||
|
serverRequests[RequestId] = callback
|
||||||
|
|
||||||
|
TriggerServerEvent('esx:triggerServerCallback', eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
||||||
|
|
||||||
|
RequestId = RequestId + 1
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
RegisterNetEvent('esx:serverCallback', function(requestId, invoker, ...)
|
RegisterNetEvent('esx:serverCallback', function(requestId, invoker, ...)
|
||||||
if not serverRequests[requestId] then
|
if not serverRequests[requestId] then
|
||||||
return print(('[^1ERROR^7] Server Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker))
|
return print(('[^1ERROR^7] Server Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if type(serverRequests[requestId]) == 'table' then
|
||||||
|
serverRequests[requestId]:resolve(...)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
serverRequests[requestId](...)
|
serverRequests[requestId](...)
|
||||||
serverRequests[requestId] = nil
|
serverRequests[requestId] = nil
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -21,23 +21,56 @@ RegisterNetEvent('esx:triggerServerCallback', function(eventName, requestId, inv
|
|||||||
end, ...)
|
end, ...)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---@param player number playerId
|
ESX.TriggerClientCallback = setmetatable({
|
||||||
---@param eventName string
|
---@param player number?
|
||||||
---@param callback function
|
---@param eventName string
|
||||||
---@param ... any
|
---@param ... any
|
||||||
ESX.TriggerClientCallback = function(player, eventName, callback, ...)
|
Await = function(player, eventName, ...)
|
||||||
clientRequests[RequestId] = callback
|
player = tonumber(player)
|
||||||
|
|
||||||
TriggerClientEvent('esx:triggerClientCallback', player, eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
assert(player, 'Argument 1 `player` is not a number!')
|
||||||
|
assert(type(eventName) == 'string', 'Argument 2 `eventName` is not a string!')
|
||||||
|
|
||||||
RequestId = RequestId + 1
|
local p = promise.new()
|
||||||
end
|
|
||||||
|
clientRequests[RequestId] = p
|
||||||
|
|
||||||
|
TriggerClientEvent('esx:triggerClientCallback', player, eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
||||||
|
|
||||||
|
RequestId = RequestId + 1
|
||||||
|
|
||||||
|
return Citizen.Await(p)
|
||||||
|
end
|
||||||
|
}, {
|
||||||
|
---@param player number? playerId
|
||||||
|
---@param eventName string
|
||||||
|
---@param callback function
|
||||||
|
---@param ... any
|
||||||
|
__call = function(_, player, eventName, callback, ...)
|
||||||
|
player = tonumber(player)
|
||||||
|
|
||||||
|
assert(player, 'Argument 1 `player` is not a number!')
|
||||||
|
assert(type(eventName) == 'string', 'Argument 2 `eventName` is not a string!')
|
||||||
|
assert(type(callback) == 'function', 'Argument 3 `callback` is not a function!')
|
||||||
|
|
||||||
|
clientRequests[RequestId] = callback
|
||||||
|
|
||||||
|
TriggerClientEvent('esx:triggerClientCallback', player, eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
||||||
|
|
||||||
|
RequestId = RequestId + 1
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
RegisterNetEvent('esx:clientCallback', function(requestId, invoker, ...)
|
RegisterNetEvent('esx:clientCallback', function(requestId, invoker, ...)
|
||||||
if not clientRequests[requestId] then
|
if not clientRequests[requestId] then
|
||||||
return print(('[^1ERROR^7] Client Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker))
|
return print(('[^1ERROR^7] Client Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if type(clientRequests[requestId]) == 'table' then
|
||||||
|
clientRequests[requestId]:resolve(...)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
clientRequests[requestId](...)
|
clientRequests[requestId](...)
|
||||||
clientRequests[requestId] = nil
|
clientRequests[requestId] = nil
|
||||||
end)
|
end)
|
||||||
Reference in New Issue
Block a user