diff --git a/Warp.rbxm b/Warp.rbxm index 42a59e0..9e7c5aa 100644 Binary files a/Warp.rbxm and b/Warp.rbxm differ diff --git a/src/Index/Server/Index.luau b/src/Index/Server/Index.luau index cbe6171..4811d1f 100644 --- a/src/Index/Server/Index.luau +++ b/src/Index/Server/Index.luau @@ -1,5 +1,6 @@ --!strict --!native +--!optimize 2 local Server = {} Server.__index = Server @@ -11,12 +12,16 @@ local ServerProcess = require(script.Parent.ServerProcess) local Assert = require(Util.Assert) local Key = require(Util.Key) local Serdes = require(Util.Serdes) +local Buffer = require(Util.Buffer) function Server.new(Identifier: string, rateLimit: Type.rateLimitArg?) local self = setmetatable({}, Server) - self.id = Serdes(Identifier) + self._buffer = Buffer.new() + self._buffer:writeu8(Serdes(Identifier)) + self.id = Buffer.convert(self._buffer:build()) self.fn = {} ServerProcess.add(self.id, Identifier, rateLimit or { maxEntrance = 200, interval = 2 }) + self._buffer:remove() return self end diff --git a/src/Index/Signal/Dedicated.luau b/src/Index/Signal/Dedicated.luau index 02ca819..a4df234 100644 --- a/src/Index/Signal/Dedicated.luau +++ b/src/Index/Signal/Dedicated.luau @@ -1,5 +1,6 @@ --!strict --!native +--!optimize 2 local Dedicated = {} Dedicated.__index = Dedicated diff --git a/src/Index/Signal/init.luau b/src/Index/Signal/init.luau index 0951252..2e946e9 100644 --- a/src/Index/Signal/init.luau +++ b/src/Index/Signal/init.luau @@ -1,5 +1,6 @@ --!strict --!native +--!optimize 2 local Signal = {} Signal.__index = Signal diff --git a/src/Index/Util/Buffer/Dedicated.luau b/src/Index/Util/Buffer/Dedicated.luau new file mode 100644 index 0000000..b81b4ec --- /dev/null +++ b/src/Index/Util/Buffer/Dedicated.luau @@ -0,0 +1,64 @@ +--!strict +--!native +--!optimize 2 +local DedicatedBuffer = {} +DedicatedBuffer.__index = DedicatedBuffer + +local create = buffer.create +local copy = buffer.copy +local writeu8 = buffer.writeu8 +local tostring = buffer.tostring + +local default = { + point = 0, + size = 256, +} + +function DedicatedBuffer.alloc(self: any, byte: number) + local size: number = self.size + local b: buffer = self.buffer + + while self.point + byte >= size do + size = math.floor(size * 1.5) + end + + local newBuffer: buffer = create(size) + copy(newBuffer, 0, b) + + b = newBuffer +end + +function DedicatedBuffer.build(self: any): buffer + local p: number = self.point + local build: buffer = create(p) + + copy(build, 0, self.buffer, 0, p) + return build +end + +function DedicatedBuffer.writeu8(self: any, val: number) + DedicatedBuffer.alloc(self, 1) + writeu8(self.buffer, self.point, val) + self.point += 1 +end + +function DedicatedBuffer.flush(self: any) + self.point = default.point + self.size = default.size + self.buffer = create(256) +end + +function DedicatedBuffer.new() + return setmetatable({ + point = default.point, + size = default.size, + buffer = create(256) + }, DedicatedBuffer) +end + +function DedicatedBuffer.remove(self: any) + self:flush() + setmetatable(self, nil) +end + +return DedicatedBuffer.new :: typeof(DedicatedBuffer.new) \ No newline at end of file diff --git a/src/Index/Util/Buffer/init.luau b/src/Index/Util/Buffer/init.luau new file mode 100644 index 0000000..f8ced60 --- /dev/null +++ b/src/Index/Util/Buffer/init.luau @@ -0,0 +1,24 @@ +--!strict +--!native +--!optimize 2 +local Buffer = {} +Buffer.__index = Buffer + +local Dedicated = require(script.Dedicated) + +local tostring = buffer.tostring +local fromstring = buffer.fromstring + +function Buffer.new() + return Dedicated() +end + +function Buffer.convert(b: buffer): string + return tostring(b) +end + +function Buffer.revert(s: string): buffer + return fromstring(s) +end + +return Buffer :: typeof(Buffer) \ No newline at end of file diff --git a/src/Index/Util/Serdes.luau b/src/Index/Util/Serdes.luau index 2664c3d..2b5db61 100644 --- a/src/Index/Util/Serdes.luau +++ b/src/Index/Util/Serdes.luau @@ -11,7 +11,8 @@ return function(Identifier: string): string if RunService:IsServer() then if not Event:GetAttribute(Identifier) then SerInt += 1 - Event:SetAttribute(Identifier, string.pack("I1", SerInt)) -- I1 -> 255 max, I2 -> ~ 6.5e4 max. (SerInt) + Event:SetAttribute(Identifier, SerInt) + --Event:SetAttribute(Identifier, string.pack("I1", SerInt)) -- I1 -> 255 max, I2 -> ~ 6.5e4 max. (SerInt) end else while not Event:GetAttribute(Identifier) do diff --git a/src/Index/Util/Spawn.luau b/src/Index/Util/Spawn.luau index a6701b1..9281b82 100644 --- a/src/Index/Util/Spawn.luau +++ b/src/Index/Util/Spawn.luau @@ -1,5 +1,6 @@ --!native --!strict +--!optimize 2 local thread: thread? = nil local function passer(fn, ...): () @@ -20,10 +21,10 @@ if not thread then coroutine.resume(thread :: any, thread) end -return function(fn: (...any) -> (), ...: any): () +return function(fn: (...any) -> (...any?), ...: any): () if not thread then thread = coroutine.create(yield) coroutine.resume(thread :: any, thread) end task.spawn(thread :: thread, fn, ...) -end +end \ No newline at end of file diff --git a/wally.toml b/wally.toml index 5a23841..fda93f9 100644 --- a/wally.toml +++ b/wally.toml @@ -1,6 +1,6 @@ [package] name = "imezx/warp" -version = "1.0.5" +version = "1.0.7" registry = "https://github.com/UpliftGames/wally-index" realm = "shared" license = "MIT"