|
1 |
| -local callbackRequest = {} |
| 1 | +local Callbacks = {} |
2 | 2 | local CallbackHandler = {}
|
3 | 3 |
|
4 |
| -AddEventHandler('onResourceStop', function(resource) |
5 |
| - if CallbackHandler[resource] then |
6 |
| - for k, handler in pairs(CallbackHandler[resource]) do |
7 |
| - RemoveEventHandler(handler) |
8 |
| - end |
| 4 | +local GenerateCallbackHandlerKey = function() |
| 5 | + local requestId = math.random(1, 999999999) |
| 6 | + |
| 7 | + if not CallbackHandler[requestId] then |
| 8 | + return tostring(requestId) |
| 9 | + else |
| 10 | + GenerateCallbackHandlerKey() |
9 | 11 | end
|
10 |
| -end) |
| 12 | +end |
11 | 13 |
|
| 14 | +---------------------------------------------------------------- |
12 | 15 | -- NEW Method for Client Callbacks
|
13 |
| -MSK.RegisterClientCallback = function(eventName, cb) |
14 |
| - local handler = RegisterNetEvent(('events-request-%s'):format(eventName), function (ticket, ...) |
15 |
| - TriggerServerEvent(('events-resolve-%s-%s'):format(eventName, ticket), cb(...)) |
16 |
| - end) |
17 |
| - |
18 |
| - local script = GetInvokingResource() |
19 |
| - if script then |
20 |
| - if CallbackHandler[script] then |
21 |
| - table.insert(CallbackHandler[script], handler) |
22 |
| - else |
23 |
| - CallbackHandler[script] = {} |
24 |
| - table.insert(CallbackHandler[script], handler) |
25 |
| - end |
26 |
| - end |
| 16 | +---------------------------------------------------------------- |
| 17 | +MSK.Register = function(eventName, cb) |
| 18 | + Callbacks[eventName] = cb |
27 | 19 | end
|
28 |
| -MSK.Register = MSK.RegisterClientCallback |
29 |
| -exports('RegisterClientCallback', MSK.RegisterClientCallback) |
| 20 | +MSK.RegisterCallback = MSK.Register |
| 21 | +MSK.RegisterClientCallback = MSK.Register |
| 22 | +exports('Register', MSK.Register) |
| 23 | +exports('RegisterCallback', MSK.Register) |
| 24 | +exports('RegisterServerCallback', MSK.Register) |
| 25 | + |
| 26 | +RegisterNetEvent('msk_core:client:triggerClientCallback', function(playerId, eventName, requestId, ...) |
| 27 | + if not Callbacks[eventName] then |
| 28 | + TriggerServerEvent('msk_core:server:callbackNotFound', requestId) |
| 29 | + return |
| 30 | + end |
| 31 | + |
| 32 | + TriggerServerEvent("msk_core:server:callbackResponse", requestId, Callbacks[eventName](playerId, ...)) |
| 33 | +end) |
30 | 34 |
|
| 35 | +---------------------------------------------------------------- |
31 | 36 | -- NEW Method for Server Callbacks
|
| 37 | +---------------------------------------------------------------- |
32 | 38 | MSK.Trigger = function(eventName, ...)
|
| 39 | + local requestId = GenerateCallbackHandlerKey() |
33 | 40 | local p = promise.new()
|
34 |
| - local ticket = tostring(GetGameTimer() .. GetPlayerServerId(PlayerId())) |
| 41 | + CallbackHandler[requestId] = 'request' |
35 | 42 |
|
36 | 43 | SetTimeout(5000, function()
|
37 |
| - p:reject("Request Timed Out (408)") |
| 44 | + CallbackHandler[requestId] = nil |
| 45 | + p:reject(('Request Timed Out: [%s] [%s]'):format(eventName, requestId)) |
38 | 46 | end)
|
39 | 47 |
|
40 |
| - local handler = RegisterNetEvent(('events-resolve-%s-%s'):format(eventName, ticket), function(...) |
41 |
| - p:resolve({...}) |
42 |
| - end) |
| 48 | + TriggerServerEvent('msk_core:server:triggerServerCallback', eventName, requestId, ...) |
43 | 49 |
|
44 |
| - TriggerServerEvent(('events-request-%s'):format(eventName), ticket, ...) |
| 50 | + while CallbackHandler[requestId] == 'request' do Wait(0) end |
| 51 | + if not CallbackHandler[requestId] then return end |
| 52 | + |
| 53 | + p:resolve(CallbackHandler[requestId]) |
| 54 | + CallbackHandler[requestId] = nil |
45 | 55 |
|
46 | 56 | local result = Citizen.Await(p)
|
47 |
| - RemoveEventHandler(handler) |
48 | 57 | return table.unpack(result)
|
49 | 58 | end
|
| 59 | +exports('Trigger', MSK.Trigger) |
| 60 | + |
| 61 | +RegisterNetEvent("msk_core:client:callbackResponse", function(requestId, ...) |
| 62 | + if not CallbackHandler[requestId] then return end |
| 63 | + CallbackHandler[requestId] = {...} |
| 64 | +end) |
| 65 | + |
| 66 | +RegisterNetEvent("msk_core:client:callbackNotFound", function(requestId) |
| 67 | + if not CallbackHandler[requestId] then return end |
| 68 | + CallbackHandler[requestId] = nil |
| 69 | +end) |
| 70 | + |
| 71 | +---------------------------------------------------------------- |
| 72 | +-- OLD Method for Server Callbacks [OUTDATED - Do not use this!] |
| 73 | +---------------------------------------------------------------- |
| 74 | +local callbackRequest = {} |
| 75 | + |
| 76 | +local GenerateRequestKey = function() |
| 77 | + local requestId = math.random(1, 999999999) |
| 78 | + |
| 79 | + if not callbackRequest[requestId] then |
| 80 | + return tostring(requestId) |
| 81 | + else |
| 82 | + GenerateRequestKey() |
| 83 | + end |
| 84 | +end |
50 | 85 |
|
51 |
| --- OLD Method for Server Callbacks |
52 | 86 | MSK.TriggerServerCallback = function(name, ...)
|
53 |
| - local requestId = GenerateRequestKey(callbackRequest) |
| 87 | + local requestId = GenerateRequestKey() |
54 | 88 | local response
|
55 | 89 |
|
56 | 90 | callbackRequest[requestId] = function(...)
|
|
66 | 100 | MSK.TriggerCallback = MSK.TriggerServerCallback
|
67 | 101 | exports('TriggerServerCallback', MSK.TriggerServerCallback)
|
68 | 102 |
|
69 |
| -GenerateRequestKey = function(tbl) |
70 |
| - local id = string.upper(MSK.GetRandomString(3)) .. math.random(000, 999) .. string.upper(MSK.GetRandomString(2)) .. math.random(00, 99) |
71 |
| - |
72 |
| - if not tbl[id] then |
73 |
| - return tostring(id) |
74 |
| - else |
75 |
| - GenerateRequestKey(tbl) |
76 |
| - end |
77 |
| -end |
78 |
| - |
79 | 103 | RegisterNetEvent("msk_core:responseCallback")
|
80 | 104 | AddEventHandler("msk_core:responseCallback", function(requestId, ...)
|
81 | 105 | if callbackRequest[requestId] then
|
|
0 commit comments