diff --git a/Warp.rbxm b/Warp.rbxm
index d9a10c2..8acdfa8 100644
Binary files a/Warp.rbxm and b/Warp.rbxm differ
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