mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 07:01:29 +00:00
refactor(es_extended/server): rewrite callbacks
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
---@diagnostic disable: duplicate-set-field
|
||||
|
||||
Callbacks = {}
|
||||
Callbacks.__index = Callbacks
|
||||
|
||||
@@ -16,7 +18,7 @@ function Callbacks:Execute(cb, ...)
|
||||
local success, errorString = pcall(cb, ...)
|
||||
|
||||
if not success then
|
||||
error(("Failed to execute Callback with RequestId: ^5%s^1"):format(self.currentId ))
|
||||
print(("[^1ERROR^7] Failed to execute Callback with RequestId: ^5%s^7"):format(self.currentId))
|
||||
error(errorString)
|
||||
return
|
||||
end
|
||||
@@ -33,13 +35,14 @@ function Callbacks:ServerRecieve(requestId, invoker, ...)
|
||||
local callback = self.requests[self.currentId]
|
||||
|
||||
Callbacks:Execute(callback, ...)
|
||||
self.requests[self.currentId] = nil
|
||||
end
|
||||
|
||||
function Callbacks:Register(name, cb)
|
||||
self.storage[name] = cb
|
||||
end
|
||||
|
||||
function Callbacks:RecieveClient(eventName, requestId, invoker, ...)
|
||||
function Callbacks:ClientRecieve(eventName, requestId, invoker, ...)
|
||||
self.currentId = requestId
|
||||
|
||||
if not self.storage[eventName] then
|
||||
@@ -47,7 +50,7 @@ function Callbacks:RecieveClient(eventName, requestId, invoker, ...)
|
||||
end
|
||||
|
||||
local returnCb = function(...)
|
||||
TriggerServerEvent("esx:clientCallback", self.currentId, invoker, ...)
|
||||
TriggerServerEvent("esx:clientCallback", requestId, invoker, ...)
|
||||
end
|
||||
local callback = self.storage[eventName]
|
||||
|
||||
@@ -77,5 +80,5 @@ ESX.RegisterClientCallback = function(eventName, callback)
|
||||
end
|
||||
|
||||
RegisterNetEvent("esx:triggerClientCallback", function(...)
|
||||
Callbacks:RecieveClient(...)
|
||||
Callbacks:ClientRecieve(...)
|
||||
end)
|
||||
|
||||
@@ -1,43 +1,87 @@
|
||||
local serverCallbacks = {}
|
||||
---@diagnostic disable: duplicate-set-field
|
||||
|
||||
local clientRequests = {}
|
||||
local RequestId = 0
|
||||
Callbacks = {}
|
||||
Callbacks.__index = Callbacks
|
||||
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
ESX.RegisterServerCallback = function(eventName, callback)
|
||||
serverCallbacks[eventName] = callback
|
||||
Callbacks.requests = {}
|
||||
Callbacks.storage = {}
|
||||
Callbacks.id = 0
|
||||
|
||||
function Callbacks:Register(name, cb)
|
||||
self.storage[name] = cb
|
||||
end
|
||||
|
||||
RegisterNetEvent("esx:triggerServerCallback", function(eventName, requestId, invoker, ...)
|
||||
if not serverCallbacks[eventName] then
|
||||
return error(("Server Callback not registered, name: ^5%s^1, invoker resource: ^5%s^1"):format(eventName, invoker))
|
||||
function Callbacks:Execute(cb, ...)
|
||||
local success, errorString = pcall(cb, ...)
|
||||
|
||||
if not success then
|
||||
print(("[^1ERROR^7] Failed to execute Callback with RequestId: ^5%s^7"):format(self.currentId))
|
||||
error(errorString)
|
||||
return
|
||||
end
|
||||
self.currentId = nil
|
||||
end
|
||||
|
||||
function Callbacks:Trigger(player, event, cb, invoker, ...)
|
||||
self.requests[self.id] = cb
|
||||
|
||||
TriggerClientEvent("esx:triggerClientCallback", player, event, self.id, invoker, ...)
|
||||
|
||||
self.id += 1
|
||||
end
|
||||
|
||||
function Callbacks:ServerRecieve(player, event, requestId, invoker, ...)
|
||||
self.currentId = requestId
|
||||
|
||||
if not self.storage[event] then
|
||||
return error(("Server Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(event, invoker))
|
||||
end
|
||||
|
||||
local source = source
|
||||
local returnCb = function(...)
|
||||
TriggerClientEvent("esx:serverCallback", player, self.currentId, invoker, ...)
|
||||
end
|
||||
local callback = self.storage[event]
|
||||
|
||||
serverCallbacks[eventName](source, function(...)
|
||||
TriggerClientEvent("esx:serverCallback", source, requestId, invoker, ...)
|
||||
end, ...)
|
||||
self:Execute(callback, player, returnCb, ...)
|
||||
end
|
||||
|
||||
function Callbacks:RecieveClient(requestId, invoker, ...)
|
||||
self.currentId = requestId
|
||||
|
||||
if not self.requests[self.currentId] then
|
||||
return error(("Client Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(self.currentId, invoker))
|
||||
end
|
||||
|
||||
local callback = self.requests[self.currentId]
|
||||
|
||||
self:Execute(callback, ...)
|
||||
self.requests[self.currentId] = nil
|
||||
end
|
||||
|
||||
RegisterNetEvent("esx:clientCallback", function(requestId, invoker, ...)
|
||||
Callbacks:RecieveClient(requestId, invoker, ...)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:triggerServerCallback", function(eventName, requestId, invoker, ...)
|
||||
local source = source
|
||||
Callbacks:ServerRecieve(source, eventName, requestId, invoker, ...)
|
||||
end)
|
||||
|
||||
|
||||
---@param player number playerId
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
---@param ... any
|
||||
ESX.TriggerClientCallback = function(player, eventName, callback, ...)
|
||||
clientRequests[RequestId] = callback
|
||||
function ESX.TriggerClientCallback(player, eventName, callback, ...)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended"
|
||||
|
||||
TriggerClientEvent("esx:triggerClientCallback", player, eventName, RequestId, GetInvokingResource() or "unknown", ...)
|
||||
|
||||
RequestId = RequestId + 1
|
||||
Callbacks:Trigger(player, eventName, callback, invoker, ...)
|
||||
end
|
||||
|
||||
RegisterNetEvent("esx:clientCallback", function(requestId, invoker, ...)
|
||||
if not clientRequests[requestId] then
|
||||
return error(("Client Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(requestId, invoker))
|
||||
end
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
ESX.RegisterServerCallback = function(eventName, callback)
|
||||
Callbacks:Register(eventName, callback)
|
||||
end
|
||||
|
||||
clientRequests[requestId](...)
|
||||
clientRequests[requestId] = nil
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user