mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-29 01:08:59 +00:00
87 lines
2.9 KiB
Lua
87 lines
2.9 KiB
Lua
local event_handlers = {}
|
|
local registered_event_handlers = {}
|
|
local registered_exports = {}
|
|
local sent_events = {}
|
|
local invoking_resource = nil
|
|
|
|
exports = setmetatable({}, {
|
|
__call = function(_, export_name, handler)
|
|
registered_exports[export_name] = handler
|
|
end,
|
|
})
|
|
|
|
function GetCurrentResourceName()
|
|
return "sky_phone"
|
|
end
|
|
|
|
function GetInvokingResource()
|
|
return invoking_resource
|
|
end
|
|
|
|
function GetGameTimer()
|
|
return 5000
|
|
end
|
|
|
|
function RegisterNetEvent(event_name, handler)
|
|
event_handlers[event_name] = handler
|
|
end
|
|
|
|
function AddEventHandler(event_name, handler)
|
|
local handlers = registered_event_handlers[event_name] or {}
|
|
handlers[#handlers + 1] = handler
|
|
registered_event_handlers[event_name] = handlers
|
|
end
|
|
|
|
function TriggerClientEvent(event_name, target, ...)
|
|
sent_events[#sent_events + 1] = {
|
|
arguments = { ... },
|
|
event_name = event_name,
|
|
target = target,
|
|
}
|
|
end
|
|
|
|
dofile("sky_phone/source/shared/custom_app_compat.lua")
|
|
dofile("sky_phone/source/server/custom_app_compat.lua")
|
|
|
|
local alias_handlers = registered_event_handlers["__cfx_export_high-phone_addApplication"]
|
|
assert(alias_handlers and #alias_handlers == 1, "Missing high-phone:addApplication export alias")
|
|
local high_add_application
|
|
local export_callback = setmetatable({
|
|
__cfx_functionReference = "test-export-callback",
|
|
}, {
|
|
__call = function(_, handler)
|
|
high_add_application = handler
|
|
end,
|
|
})
|
|
alias_handlers[1](export_callback)
|
|
assert(type(high_add_application) == "function", "Invalid high-phone:addApplication export alias")
|
|
|
|
invoking_resource = "high_server_app"
|
|
local add_success, add_error = high_add_application("bankingv2", {
|
|
externalUrl = "@high_server_app/ui/index.html",
|
|
}, {
|
|
en = {
|
|
label = "Banking",
|
|
description = "Banking app",
|
|
},
|
|
})
|
|
assert(add_success and add_error == nil, "High server addApplication must register")
|
|
assert(#sent_events == 1, "High server registration must broadcast an update")
|
|
assert(sent_events[1].event_name == "sky_phone:compat:high:client:syncApplication", "High sync event must be used")
|
|
assert(sent_events[1].arguments[1] == "high_server_app", "High sync must preserve the owner")
|
|
|
|
invoking_resource = "other_server_app"
|
|
local duplicate_success, duplicate_error = high_add_application("bankingv2", {
|
|
externalUrl = "@other_server_app/ui/index.html",
|
|
})
|
|
assert(not duplicate_success and duplicate_error == "duplicate_app_id", "High cross-owner replacement must fail")
|
|
|
|
source = 42
|
|
event_handlers["sky_phone:compat:high:server:requestSnapshot"]()
|
|
assert(#sent_events == 2, "High snapshot request must emit one response")
|
|
assert(sent_events[2].event_name == "sky_phone:compat:high:client:replaceSnapshot", "High snapshot event must be used")
|
|
assert(sent_events[2].target == 42, "High snapshot must target only the requester")
|
|
assert(#sent_events[2].arguments[1] == 1, "High snapshot must include the registered app")
|
|
|
|
print("Custom app compatibility server tests passed")
|