@rbxts/tether 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/builtin-middlewares.d.ts +1 -1
- package/out/builtin-middlewares.luau +12 -6
- package/out/message-emitter.luau +23 -23
- package/out/structs.d.ts +11 -6
- package/out/utility.d.ts +1 -1
- package/out/utility.luau +19 -18
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Modding } from "@flamework/core";
|
|
2
|
-
import type { SerializerMetadata } from "@rbxts/
|
|
2
|
+
import type { SerializerMetadata } from "@rbxts/serio";
|
|
3
3
|
import type { Any } from "ts-toolbelt";
|
|
4
4
|
import { type SharedMiddleware } from "./middleware";
|
|
5
5
|
export declare namespace BuiltinMiddlewares {
|
|
@@ -37,8 +37,12 @@ do
|
|
|
37
37
|
throwError = true
|
|
38
38
|
end
|
|
39
39
|
return function(ctx)
|
|
40
|
-
local
|
|
41
|
-
local
|
|
40
|
+
local _binding = ctx.getRawData()
|
|
41
|
+
local buf = _binding.buf
|
|
42
|
+
local blobs = _binding.blobs
|
|
43
|
+
local bufferSize = if buf == nil then 0 else buffer.len(buf)
|
|
44
|
+
local blobsSize = if blobs == nil then 0 else #blobs * BLOB_SIZE
|
|
45
|
+
local totalSize = bufferSize + blobsSize
|
|
42
46
|
if totalSize > maxBytes then
|
|
43
47
|
return if throwError then error(`[@rbxts/tether]: Message '{ctx.message}' exceeded maximum packet size of {maxBytes} bytes`) else DropRequest
|
|
44
48
|
end
|
|
@@ -84,15 +88,17 @@ do
|
|
|
84
88
|
local message = _param.message
|
|
85
89
|
local data = _param.data
|
|
86
90
|
local getRawData = _param.getRawData
|
|
87
|
-
local
|
|
88
|
-
local
|
|
89
|
-
local
|
|
91
|
+
local _binding = getRawData()
|
|
92
|
+
local buf = _binding.buf
|
|
93
|
+
local blobs = _binding.blobs
|
|
94
|
+
local bufferSize = if buf == nil then 0 else buffer.len(buf)
|
|
95
|
+
local blobsSize = if blobs == nil then 0 else #blobs * BLOB_SIZE
|
|
90
96
|
local schemaString = if schema ~= nil then " " .. table.concat(string.split(repr(schema[1], {
|
|
91
97
|
pretty = true,
|
|
92
98
|
}), "\n"), "\n ") else "unknown"
|
|
93
99
|
local text = { "\n", horizontalLine, "\n", "Packet sent to ", (if RunService:IsServer() then "client" else "server"), "!\n", " - Message: ", message, "\n", " - Data: ", repr(data, {
|
|
94
100
|
pretty = true,
|
|
95
|
-
}), "\n", " - Raw data:\n", " - Buffer: ", bufferToString(
|
|
101
|
+
}), "\n", " - Raw data:\n", " - Buffer: ", bufferToString(buf), "\n", " - Blobs: ", repr(blobs, {
|
|
96
102
|
pretty = false,
|
|
97
103
|
robloxClassName = true,
|
|
98
104
|
}), "\n", " - Packet size: ", bufferSize + blobsSize, " bytes\n", " - Buffer: ", bufferSize, " bytes\n", " - Blobs: ", blobsSize, " bytes\n", " - Schema: ", schemaString, "\n", horizontalLine, "\n" }
|
package/out/message-emitter.luau
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
local TS = _G[script]
|
|
3
3
|
local t = TS.import(script, TS.getModule(script, "@rbxts", "t").lib.ts).t
|
|
4
4
|
local Networking = TS.import(script, TS.getModule(script, "@flamework", "networking").out).Networking
|
|
5
|
-
local createBinarySerializer = TS.import(script, TS.getModule(script, "@rbxts", "flamework-binary-serializer").out).createBinarySerializer
|
|
6
5
|
local _services = TS.import(script, TS.getModule(script, "@rbxts", "services"))
|
|
7
6
|
local Players = _services.Players
|
|
8
7
|
local RunService = _services.RunService
|
|
9
8
|
local Destroyable = TS.import(script, TS.getModule(script, "@rbxts", "destroyable").out).default
|
|
9
|
+
local Object = TS.import(script, TS.getModule(script, "@rbxts", "object-utils"))
|
|
10
|
+
local createSerializer = TS.import(script, TS.getModule(script, "@rbxts", "serio").out).default
|
|
10
11
|
local repr = TS.import(script, TS.getModule(script, "@rbxts", "repr").out)
|
|
11
12
|
local _middleware = TS.import(script, script.Parent, "middleware")
|
|
12
13
|
local DropRequest = _middleware.DropRequest
|
|
13
14
|
local MiddlewareProvider = _middleware.MiddlewareProvider
|
|
14
|
-
local Object = TS.import(script, TS.getModule(script, "@rbxts", "object-utils"))
|
|
15
15
|
local remotes = Networking.createEvent("@rbxts/tether:message-emitter@remotes")
|
|
16
16
|
local noServerListen = "[@rbxts/tether]: Cannot listen to server message from client"
|
|
17
17
|
local noClientListen = "[@rbxts/tether]: Cannot listen to client message from server"
|
|
@@ -263,14 +263,14 @@ do
|
|
|
263
263
|
incomingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
|
|
264
264
|
incoming = {
|
|
265
265
|
sendServerMessage = { { t.array(t.interface({
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
blobs = t.array(t.any),
|
|
266
|
+
messageBuf = t.typeof("buffer"),
|
|
267
|
+
buf = t.optional(t.typeof("buffer")),
|
|
268
|
+
blobs = t.optional(t.array(t.any)),
|
|
269
269
|
})) }, nil },
|
|
270
270
|
sendUnreliableServerMessage = { { t.array(t.interface({
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
blobs = t.array(t.any),
|
|
271
|
+
messageBuf = t.typeof("buffer"),
|
|
272
|
+
buf = t.optional(t.typeof("buffer")),
|
|
273
|
+
blobs = t.optional(t.array(t.any)),
|
|
274
274
|
})) }, nil },
|
|
275
275
|
},
|
|
276
276
|
incomingUnreliable = {
|
|
@@ -288,14 +288,14 @@ do
|
|
|
288
288
|
incomingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
|
|
289
289
|
incoming = {
|
|
290
290
|
sendClientMessage = { { t.array(t.interface({
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
blobs = t.array(t.any),
|
|
291
|
+
messageBuf = t.typeof("buffer"),
|
|
292
|
+
buf = t.optional(t.typeof("buffer")),
|
|
293
|
+
blobs = t.optional(t.array(t.any)),
|
|
294
294
|
})) }, nil },
|
|
295
295
|
sendUnreliableClientMessage = { { t.array(t.interface({
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
blobs = t.array(t.any),
|
|
296
|
+
messageBuf = t.typeof("buffer"),
|
|
297
|
+
buf = t.optional(t.typeof("buffer")),
|
|
298
|
+
blobs = t.optional(t.array(t.any)),
|
|
299
299
|
})) }, nil },
|
|
300
300
|
},
|
|
301
301
|
incomingUnreliable = {
|
|
@@ -688,10 +688,10 @@ do
|
|
|
688
688
|
end
|
|
689
689
|
function MessageEmitter:onRemoteFire(serializedPackets, player)
|
|
690
690
|
for _, packet in serializedPackets do
|
|
691
|
-
if buffer.len(packet.
|
|
691
|
+
if buffer.len(packet.messageBuf) > 1 then
|
|
692
692
|
return warn("[@rbxts/tether]: Rejected packet because message buffer was larger than one byte")
|
|
693
693
|
end
|
|
694
|
-
local message = buffer.readu8(packet.
|
|
694
|
+
local message = buffer.readu8(packet.messageBuf, 0)
|
|
695
695
|
self:executeEventCallbacks(message, packet, player)
|
|
696
696
|
self:executeFunctions(message, packet)
|
|
697
697
|
end
|
|
@@ -730,7 +730,7 @@ do
|
|
|
730
730
|
local serializer = self:getSerializer(message)
|
|
731
731
|
local _packet = serializer
|
|
732
732
|
if _packet ~= nil then
|
|
733
|
-
_packet = _packet.deserialize(serializedPacket
|
|
733
|
+
_packet = _packet.deserialize(serializedPacket)
|
|
734
734
|
end
|
|
735
735
|
local packet = _packet
|
|
736
736
|
self:validateData(message, packet)
|
|
@@ -771,17 +771,17 @@ do
|
|
|
771
771
|
end
|
|
772
772
|
function MessageEmitter:getPacket(message, data)
|
|
773
773
|
local serializer = self:getSerializer(message)
|
|
774
|
-
local
|
|
775
|
-
buffer.writeu8(
|
|
774
|
+
local messageBuf = buffer.create(1)
|
|
775
|
+
buffer.writeu8(messageBuf, 0, message)
|
|
776
776
|
if serializer == nil then
|
|
777
777
|
return {
|
|
778
|
-
|
|
779
|
-
|
|
778
|
+
messageBuf = messageBuf,
|
|
779
|
+
buf = buffer.create(0),
|
|
780
780
|
blobs = {},
|
|
781
781
|
}
|
|
782
782
|
end
|
|
783
783
|
local _object = {
|
|
784
|
-
|
|
784
|
+
messageBuf = messageBuf,
|
|
785
785
|
}
|
|
786
786
|
for _k, _v in serializer.serialize(data) do
|
|
787
787
|
_object[_k] = _v
|
|
@@ -792,7 +792,7 @@ do
|
|
|
792
792
|
self.serializers[message] = self:createMessageSerializer(meta)
|
|
793
793
|
end
|
|
794
794
|
function MessageEmitter:createMessageSerializer(meta)
|
|
795
|
-
return
|
|
795
|
+
return createSerializer(meta)
|
|
796
796
|
end
|
|
797
797
|
function MessageEmitter:getSerializer(message)
|
|
798
798
|
return self.serializers[message]
|
package/out/structs.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Modding } from "@flamework/core";
|
|
2
2
|
import type { Networking } from "@flamework/networking";
|
|
3
|
-
import type { SerializerMetadata } from "@rbxts/
|
|
3
|
+
import type { SerializerMetadata, SerializedData, Transform, Vector, String, u8, u16, u32, i8, i16, i32, f16, f24, f32, f64 } from "@rbxts/serio";
|
|
4
4
|
export type MessageCallback<T = unknown> = ServerMessageCallback<T> | ClientMessageCallback<T>;
|
|
5
5
|
export type ClientMessageCallback<T = unknown> = (data: T) => void;
|
|
6
6
|
export type ClientMessageFunctionCallback<T = unknown, R = unknown> = (data: T) => R;
|
|
@@ -11,10 +11,8 @@ export interface PacketInfo {
|
|
|
11
11
|
readonly packet: SerializedPacket;
|
|
12
12
|
readonly unreliable: boolean;
|
|
13
13
|
}
|
|
14
|
-
export interface SerializedPacket {
|
|
15
|
-
readonly
|
|
16
|
-
readonly buffer: buffer;
|
|
17
|
-
readonly blobs: defined[];
|
|
14
|
+
export interface SerializedPacket extends SerializedData {
|
|
15
|
+
readonly messageBuf: buffer;
|
|
18
16
|
}
|
|
19
17
|
export type MessageEvent = (packets: SerializedPacket[]) => void;
|
|
20
18
|
export type UnreliableMessageEvent = Networking.Unreliable<MessageEvent>;
|
|
@@ -26,11 +24,18 @@ export interface ClientEvents {
|
|
|
26
24
|
readonly sendClientMessage: MessageEvent;
|
|
27
25
|
readonly sendUnreliableClientMessage: UnreliableMessageEvent;
|
|
28
26
|
}
|
|
27
|
+
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
|
28
|
+
type ReplaceByMapWithDepth<T, Depth extends number = 11> = [
|
|
29
|
+
Depth
|
|
30
|
+
] extends [never] ? T : T extends Vector ? Vector3 : T extends Transform ? CFrame : T extends String ? string : T extends u8 | u16 | u32 | i8 | i16 | i32 | f16 | f24 | f32 | f64 ? number : T extends any[] ? ReplaceByMapWithDepth<T[number], Prev[Depth]>[] : T extends object ? {
|
|
31
|
+
[K in keyof T]: ReplaceByMapWithDepth<T[K], Prev[Depth]>;
|
|
32
|
+
} : T;
|
|
29
33
|
export interface MessageMetadata<MessageData, Kind extends keyof MessageData> {
|
|
30
|
-
readonly guard: Modding.Generic<MessageData[Kind]
|
|
34
|
+
readonly guard: Modding.Generic<ReplaceByMapWithDepth<MessageData[Kind]>, "guard">;
|
|
31
35
|
readonly serializerMetadata: MessageData[Kind] extends undefined ? undefined : Modding.Many<SerializerMetadata<MessageData[Kind]>>;
|
|
32
36
|
}
|
|
33
37
|
export type Guard<T = unknown> = (value: unknown) => value is T;
|
|
34
38
|
export type MessageEmitterMetadata<MessageData> = {
|
|
35
39
|
readonly [Kind in keyof MessageData]: MessageMetadata<MessageData, Kind>;
|
|
36
40
|
};
|
|
41
|
+
export {};
|
package/out/utility.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function bufferToString(buf
|
|
1
|
+
export declare function bufferToString(buf?: buffer): string;
|
package/out/utility.luau
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
-- Compiled with roblox-ts v3.0.0
|
|
2
2
|
local function bufferToString(buf)
|
|
3
3
|
local s = { "{ " }
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
4
|
+
if buf ~= nil then
|
|
5
|
+
do
|
|
6
|
+
local i = 0
|
|
7
|
+
local _shouldIncrement = false
|
|
8
|
+
while true do
|
|
9
|
+
if _shouldIncrement then
|
|
10
|
+
i += 1
|
|
11
|
+
else
|
|
12
|
+
_shouldIncrement = true
|
|
13
|
+
end
|
|
14
|
+
if not (i < buffer.len(buf)) then
|
|
15
|
+
break
|
|
16
|
+
end
|
|
17
|
+
local byte = buffer.readu8(buf, i)
|
|
18
|
+
local _arg0 = tostring(byte)
|
|
19
|
+
table.insert(s, _arg0)
|
|
20
|
+
local _arg0_1 = if i < buffer.len(buf) - 1 then ", " else ""
|
|
21
|
+
table.insert(s, _arg0_1)
|
|
21
22
|
end
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
|
-
table.insert(s, "
|
|
25
|
+
table.insert(s, "}")
|
|
25
26
|
return table.concat(s, "")
|
|
26
27
|
end
|
|
27
28
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rbxts/tether",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"main": "out/init.lua",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "rbxtsc",
|
|
@@ -32,15 +32,15 @@
|
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@rbxts/compiler-types": "^3.0.0-types.0",
|
|
34
34
|
"@rbxts/types": "^1.0.835",
|
|
35
|
-
"rbxts-transformer-flamework": "^1.
|
|
35
|
+
"rbxts-transformer-flamework": "^1.3.1",
|
|
36
36
|
"roblox-ts": "^3.0.0",
|
|
37
37
|
"typescript": "^5.5.3"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@flamework/core": "^1.
|
|
41
|
-
"@flamework/networking": "^1.
|
|
40
|
+
"@flamework/core": "^1.3.1",
|
|
41
|
+
"@flamework/networking": "^1.3.1",
|
|
42
42
|
"@rbxts/destroyable": "^1.0.1",
|
|
43
|
-
"@rbxts/
|
|
43
|
+
"@rbxts/serio": "^1.0.5",
|
|
44
44
|
"@rbxts/flamework-meta-utils": "^1.0.4",
|
|
45
45
|
"@rbxts/object-utils": "^1.0.4",
|
|
46
46
|
"@rbxts/repr": "^1.0.1",
|