Warp/src/Index/Util/Serdes.luau

30 lines
1 KiB
Lua
Raw Normal View History

2024-01-05 12:14:38 +00:00
--!strict
local RunService = game:GetService("RunService")
local SerInt = 0
local Event = require(script.Parent.Parent.Event).Reliable
local Assert = require(script.Parent.Assert)
2024-04-02 06:10:21 +00:00
return function(Identifier: string, timeout: number?): number
2024-01-05 12:14:38 +00:00
Assert(typeof(Identifier) == "string", "Identifier must be a string type.")
Assert(SerInt < 255, "reached max 255 identifiers.")
if RunService:IsServer() then
if not Event:GetAttribute(Identifier) then
SerInt += 1
2024-03-13 01:01:27 +00:00
Event:SetAttribute(Identifier, SerInt)
2024-04-02 06:10:21 +00:00
--Event:SetAttribute(Identifier, string.pack("I1", SerInt)) -- I1 -> 255 max, I2 -> ~ 6.5e4 max. (SerInt), removed/disabled for buffer migration.
2024-01-05 12:14:38 +00:00
end
else
2024-04-02 06:10:21 +00:00
local retreived = false
task.delay(timeout or 10, function()
if retreived then return end
retreived = true
error(`Serdes: {Identifier} is taking too long to retrieve, seems like not replicated on server.`, 2)
end)
while (not retreived) and (not Event:GetAttribute(Identifier)) do
2024-01-05 12:14:38 +00:00
task.wait(0.5)
end
2024-04-02 06:10:21 +00:00
retreived = true
2024-01-05 12:14:38 +00:00
end
return Event:GetAttribute(Identifier)
end