mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 03:01:31 +00:00
fix(es_extended/callback): correctly dispose of function references
This has been an Issue since ESX 1.0, This should hopefully stop invalid callbacks being called
This commit is contained in:
@@ -47,8 +47,11 @@ function Callbacks:ServerRecieve(requestId, invoker, ...)
|
||||
end
|
||||
end
|
||||
|
||||
function Callbacks:Register(name, cb)
|
||||
self.storage[name] = cb
|
||||
function Callbacks:Register(name, resource, cb)
|
||||
self.storage[name] = {
|
||||
resource = resource,
|
||||
cb = cb
|
||||
}
|
||||
end
|
||||
|
||||
function Callbacks:ClientRecieve(eventName, requestId, invoker, ...)
|
||||
@@ -60,7 +63,7 @@ function Callbacks:ClientRecieve(eventName, requestId, invoker, ...)
|
||||
local returnCb = function(...)
|
||||
TriggerServerEvent("esx:clientCallback", requestId, invoker, ...)
|
||||
end
|
||||
local callback = self.storage[eventName]
|
||||
local callback = self.storage[eventName].cb
|
||||
|
||||
self:Execute(callback, requestId, returnCb, ...)
|
||||
end
|
||||
@@ -106,9 +109,20 @@ end)
|
||||
---@param callback function
|
||||
---@return nil
|
||||
ESX.RegisterClientCallback = function(eventName, callback)
|
||||
Callbacks:Register(eventName, callback)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Register(eventName, invoker, callback)
|
||||
end
|
||||
|
||||
ESX.SecureNetEvent("esx:triggerClientCallback", function(...)
|
||||
Callbacks:ClientRecieve(...)
|
||||
end)
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
for k, v in pairs(Callbacks.storage) do
|
||||
if v.resource == resource then
|
||||
Callbacks.storage[k] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -6,8 +6,11 @@ Callbacks.requests = {}
|
||||
Callbacks.storage = {}
|
||||
Callbacks.id = 0
|
||||
|
||||
function Callbacks:Register(name, cb)
|
||||
self.storage[name] = cb
|
||||
function Callbacks:Register(name, resource, cb)
|
||||
self.storage[name] = {
|
||||
resource = resource,
|
||||
cb = cb
|
||||
}
|
||||
end
|
||||
|
||||
function Callbacks:Execute(cb, ...)
|
||||
@@ -39,7 +42,7 @@ function Callbacks:ServerRecieve(player, event, requestId, invoker, ...)
|
||||
local returnCb = function(...)
|
||||
TriggerClientEvent("esx:serverCallback", player, requestId, invoker, ...)
|
||||
end
|
||||
local callback = self.storage[event]
|
||||
local callback = self.storage[event].cb
|
||||
|
||||
self:Execute(callback, player, returnCb, ...)
|
||||
end
|
||||
@@ -73,7 +76,7 @@ end)
|
||||
---@param ... any
|
||||
function ESX.TriggerClientCallback(player, eventName, callback, ...)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended"
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Trigger(player, eventName, callback, invoker, ...)
|
||||
end
|
||||
@@ -81,6 +84,16 @@ end
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
ESX.RegisterServerCallback = function(eventName, callback)
|
||||
Callbacks:Register(eventName, callback)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Register(eventName, invoker, callback)
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
for k, v in pairs(Callbacks.storage) do
|
||||
if v.resource == resource then
|
||||
Callbacks.storage[k] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user