From 01c5533394bb0bd89a287e67e6d0417256050400 Mon Sep 17 00:00:00 2001 From: EternityDev Date: Sat, 16 Mar 2024 23:49:23 +0700 Subject: [PATCH] expanding buffer --- Warp.rbxm | Bin 12089 -> 12441 bytes default.project.json | 8 +++- docs/.vitepress/config.mts | 1 + docs/api/1.0/buffer.md | 3 ++ docs/api/1.0/client.md | 10 ++-- docs/api/1.0/server.md | 6 +-- src/Index/Client/Index.luau | 2 +- src/Index/Server/Index.luau | 2 +- src/Index/Util/Buffer/Dedicated.luau | 66 ++++++++++++++++++++++++--- src/Index/init.luau | 7 ++- src/init.luau | 2 + 11 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 docs/api/1.0/buffer.md diff --git a/Warp.rbxm b/Warp.rbxm index d9a10c227d531f82e7e549bbfe75ecf0d34d4f80..8acdfa8353cfb09447a0a2dce898f3fb17b32a9f 100644 GIT binary patch delta 7078 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�e5zrsRZZwiD{h?4 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 OZ;jLOX8rB%Xa67FB(E_5 diff --git a/default.project.json b/default.project.json index e585132..8ffe85b 100644 --- a/default.project.json +++ b/default.project.json @@ -1,6 +1,12 @@ { "name": "Warp", "tree": { - "$path": "src" + "$className": "DataModel", + "ReplicatedStorage": { + "$className": "ReplicatedStorage", + "Warp": { + "$path": "src" + } + } } } \ No newline at end of file diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index e99b142..96aaa7f 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -39,6 +39,7 @@ function side() { text: 'Utilities', items: [ { text: 'Signal', link: '/api/1.0/signal' }, + { text: 'Buffer', link: '/api/1.0/buffer' }, ] }, ] diff --git a/docs/api/1.0/buffer.md b/docs/api/1.0/buffer.md new file mode 100644 index 0000000..4b5f49a --- /dev/null +++ b/docs/api/1.0/buffer.md @@ -0,0 +1,3 @@ +# Buffer + +A Additional buffer. \ No newline at end of file diff --git a/docs/api/1.0/client.md b/docs/api/1.0/client.md index 4d1e83d..8ea0e9f 100644 --- a/docs/api/1.0/client.md +++ b/docs/api/1.0/client.md @@ -87,7 +87,7 @@ Disconnect the event connection. ```lua [Variable] ( key: string -) +): boolean ``` ```lua [Example] @@ -128,7 +128,7 @@ This function have rate limiting it self and configured from server. ## `:Invoke` -Semiliar to `:InvokeServer`, its for Invoke to a server. +Semiliar to `:InvokeServer`, but it have timeout system that not exists on `RemoteFunction.InvokeServer`. ::: code-group ```lua [Variable] @@ -139,7 +139,7 @@ Semiliar to `:InvokeServer`, its for Invoke to a server. ``` ```lua [Example] -local Request = Remote:Invoke(2, "Hello World!") +local Request = Remote:Invoke(2, "Hello World!") -- this yield until it response ``` ::: @@ -152,7 +152,7 @@ This function is yielded, once it timeout it will return nil. Wait the event being triggered. ```lua -Remote:Wait() +Remote:Wait() -- :Wait return number value ``` ::: warning @@ -161,7 +161,7 @@ This function is yielded, Invoke might also ping this one and also causing error ## `:Destroy` -Disconnect all connection of event and remove the event from Warp +Disconnect all connection of event and remove the event from Warp list ```lua Remote:Destroy() diff --git a/docs/api/1.0/server.md b/docs/api/1.0/server.md index 614d422..430ea1e 100644 --- a/docs/api/1.0/server.md +++ b/docs/api/1.0/server.md @@ -97,7 +97,7 @@ Disconnect the event connection. ```lua [Variable] ( key: string -) +): boolean ``` ```lua [Example] @@ -170,7 +170,7 @@ Remote:FireExcept(true, { Players.Eternity_Devs, Players.Player2 }, "Hello World ## `:Invoke` -Semiliar to `:InvokeClient`, its for Invoke to a client. +Semiliar to `:InvokeClient`, but it have timeout system that not exists on `RemoteFunction.InvokeClient`. ::: code-group ```lua [Variable] @@ -195,7 +195,7 @@ This function is yielded, once it timeout it will return nil. Wait the event being triggered. ```lua -Remote:Wait() +Remote:Wait() -- :Wait return number value ``` ::: warning diff --git a/src/Index/Client/Index.luau b/src/Index/Client/Index.luau index 0ee1b52..a5c3f7e 100644 --- a/src/Index/Client/Index.luau +++ b/src/Index/Client/Index.luau @@ -16,7 +16,7 @@ local Buffer = require(Util.Buffer) function Client.new(Identifier: string) local self = setmetatable({}, Client) self._buffer = Buffer.new() - self._buffer:writeu8(Serdes(Identifier)) + self._buffer:wu8(Serdes(Identifier)) self.id = Buffer.convert(self._buffer:build()) self.fn = {} self.IsConnected = false diff --git a/src/Index/Server/Index.luau b/src/Index/Server/Index.luau index 8945377..48785a0 100644 --- a/src/Index/Server/Index.luau +++ b/src/Index/Server/Index.luau @@ -17,7 +17,7 @@ local Buffer = require(Util.Buffer) function Server.new(Identifier: string, rateLimit: Type.rateLimitArg?) local self = setmetatable({}, Server) self._buffer = Buffer.new() - self._buffer:writeu8(Serdes(Identifier)) + self._buffer:wu8(Serdes(Identifier)) self.id = Buffer.convert(self._buffer:build()) self.fn = {} self.IsConnected = false diff --git a/src/Index/Util/Buffer/Dedicated.luau b/src/Index/Util/Buffer/Dedicated.luau index b81b4ec..377eb5a 100644 --- a/src/Index/Util/Buffer/Dedicated.luau +++ b/src/Index/Util/Buffer/Dedicated.luau @@ -6,12 +6,21 @@ DedicatedBuffer.__index = DedicatedBuffer local create = buffer.create local copy = buffer.copy +local writei8 = buffer.writei8 +local writei16 = buffer.writei16 +local writei32 = buffer.writei32 local writeu8 = buffer.writeu8 -local tostring = buffer.tostring +local writeu16 = buffer.writeu16 +local writeu32 = buffer.writeu32 +local writef32 = buffer.writef32 +local writef64 = buffer.writef64 +local writestring = buffer.writestring local default = { point = 0, - size = 256, + next = 0, + size = 128, + bufferSize = 128, } function DedicatedBuffer.alloc(self: any, byte: number) @@ -23,9 +32,13 @@ function DedicatedBuffer.alloc(self: any, byte: number) end local newBuffer: buffer = create(size) + DedicatedBuffer.copy(self, 0, newBuffer) copy(newBuffer, 0, b) b = newBuffer + + self.point = self.next + self.next += byte end function DedicatedBuffer.build(self: any): buffer @@ -36,23 +49,64 @@ function DedicatedBuffer.build(self: any): buffer return build end -function DedicatedBuffer.writeu8(self: any, val: number) +function DedicatedBuffer.wi8(self: any, val: number) + DedicatedBuffer.alloc(self, 1) + writei8(self.buffer, self.point, val) +end + +function DedicatedBuffer.wi16(self: any, val: number) + DedicatedBuffer.alloc(self, 2) + writei16(self.buffer, self.point, val) +end + +function DedicatedBuffer.wi32(self: any, val: number) + DedicatedBuffer.alloc(self, 4) + writei32(self.buffer, self.point, val) +end + +function DedicatedBuffer.wu8(self: any, val: number) DedicatedBuffer.alloc(self, 1) writeu8(self.buffer, self.point, val) - self.point += 1 +end + +function DedicatedBuffer.wu16(self: any, val: number) + DedicatedBuffer.alloc(self, 2) + writeu16(self.buffer, self.point, val) +end + +function DedicatedBuffer.wu32(self: any, val: number) + DedicatedBuffer.alloc(self, 4) + writeu32(self.buffer, self.point, val) +end + +function DedicatedBuffer.wf32(self: any, val: number) + DedicatedBuffer.alloc(self, 4) + writef32(self.buffer, self.point, val) +end + +function DedicatedBuffer.wf64(self: any, val: number) + DedicatedBuffer.alloc(self, 8) + writef64(self.buffer, self.point, val) +end + +function DedicatedBuffer.wstring(self: any, val: string) + DedicatedBuffer.alloc(self, #val) + writestring(self.buffer, self.point, val) end function DedicatedBuffer.flush(self: any) self.point = default.point + self.next = default.next self.size = default.size - self.buffer = create(256) + self.buffer = create(default.bufferSize) end function DedicatedBuffer.new() return setmetatable({ point = default.point, + next = default.next, size = default.size, - buffer = create(256) + buffer = create(default.bufferSize) }, DedicatedBuffer) end diff --git a/src/Index/init.luau b/src/Index/init.luau index c8319ed..35ced65 100644 --- a/src/Index/init.luau +++ b/src/Index/init.luau @@ -12,6 +12,7 @@ local Client = script.Client local Type = require(script.Type) local Assert = require(Util.Assert) local Signal = require(script.Signal) +local Buffer = require(Util.Buffer) if IsServer then require(Server.ServerProcess).start() @@ -64,7 +65,11 @@ function Index.fromSignalArray(arrays: { any }) for _, identifier: string in arrays do copy[identifier] = Index.Signal(identifier) end - return copy :: typeof(copy) + return table.freeze(copy) :: typeof(copy) +end + +function Index.buffer() + return Buffer.new() end return table.freeze(Index) :: typeof(Index) \ No newline at end of file diff --git a/src/init.luau b/src/init.luau index 231f605..fbaec6f 100644 --- a/src/init.luau +++ b/src/init.luau @@ -13,4 +13,6 @@ return { Signal = Index.Signal, fromSignalArray = Index.fromSignalArray, + + buffer = Index.buffer, } \ No newline at end of file