@rbxts/tether 1.2.6 → 1.2.7
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.
|
@@ -2,7 +2,6 @@ import { Modding } from "@flamework/core";
|
|
|
2
2
|
import type { SerializerMetadata } from "@rbxts/flamework-binary-serializer";
|
|
3
3
|
import type { Any } from "ts-toolbelt";
|
|
4
4
|
import { type SharedMiddleware } from "./middleware";
|
|
5
|
-
import type { TetherPacket } from "./structs";
|
|
6
5
|
export declare namespace BuiltinMiddlewares {
|
|
7
6
|
/**
|
|
8
7
|
* Creates a shared middleware that will simulate a ping of the given amount when a message is sent
|
|
@@ -39,5 +38,5 @@ export declare namespace BuiltinMiddlewares {
|
|
|
39
38
|
* @returns A shared middleware that will log a message whenever a message is sent.
|
|
40
39
|
* @metadata macro
|
|
41
40
|
*/
|
|
42
|
-
function debug<T>(schema?: Modding.Many<Any.Equals<T, unknown> extends 1 ? undefined : SerializerMetadata<
|
|
41
|
+
function debug<T>(schema?: Modding.Many<Any.Equals<T, unknown> extends 1 ? undefined : SerializerMetadata<T>>): SharedMiddleware<T>;
|
|
43
42
|
}
|
|
@@ -93,7 +93,7 @@ do
|
|
|
93
93
|
local rawData = getRawData()
|
|
94
94
|
local bufferSize = buffer.len(rawData.buffer)
|
|
95
95
|
local blobsSize = #rawData.blobs * BLOB_SIZE
|
|
96
|
-
local schemaString = if schema ~= nil then " " .. table.concat(string.split(repr(schema[
|
|
96
|
+
local schemaString = if schema ~= nil then " " .. table.concat(string.split(repr(schema[1], {
|
|
97
97
|
pretty = true,
|
|
98
98
|
}), "\n"), "\n ") else "unknown"
|
|
99
99
|
local text = { "\n", horizontalLine, "\n", "Packet sent to ", (if RunService:IsServer() then "client" else "server"), "!\n", " - Message: ", message, "\n", " - Data: ", repr(data, {
|
package/out/message-emitter.luau
CHANGED
|
@@ -12,7 +12,6 @@ local _middleware = TS.import(script, script.Parent, "middleware")
|
|
|
12
12
|
local DropRequest = _middleware.DropRequest
|
|
13
13
|
local MiddlewareProvider = _middleware.MiddlewareProvider
|
|
14
14
|
-- TODO: error when trying to do something like server.emit() from the server
|
|
15
|
-
local messageSerializer = createBinarySerializer({ "object_raw", { { "message", { "u8" } }, { "data", { "literal", {}, -1 } } } })
|
|
16
15
|
local remotes = Networking.createEvent("@rbxts/tether:message-emitter@remotes")
|
|
17
16
|
local metaGenerationFailed = "[@rbxts/tether]: Failed to generate message metadata - make sure you have the Flamework transformer and are using Flamework macro-friendly types in your schemas"
|
|
18
17
|
local guardFailed = function(message, data)
|
|
@@ -301,10 +300,12 @@ do
|
|
|
301
300
|
incomingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
|
|
302
301
|
incoming = {
|
|
303
302
|
sendServerMessage = { { t.interface({
|
|
303
|
+
messageBuffer = t.typeof("buffer"),
|
|
304
304
|
buffer = t.typeof("buffer"),
|
|
305
305
|
blobs = t.array(t.any),
|
|
306
306
|
}) }, nil },
|
|
307
307
|
sendUnreliableServerMessage = { { t.interface({
|
|
308
|
+
messageBuffer = t.typeof("buffer"),
|
|
308
309
|
buffer = t.typeof("buffer"),
|
|
309
310
|
blobs = t.array(t.any),
|
|
310
311
|
}) }, nil },
|
|
@@ -324,10 +325,12 @@ do
|
|
|
324
325
|
incomingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
|
|
325
326
|
incoming = {
|
|
326
327
|
sendClientMessage = { { t.interface({
|
|
328
|
+
messageBuffer = t.typeof("buffer"),
|
|
327
329
|
buffer = t.typeof("buffer"),
|
|
328
330
|
blobs = t.array(t.any),
|
|
329
331
|
}) }, nil },
|
|
330
332
|
sendUnreliableClientMessage = { { t.interface({
|
|
333
|
+
messageBuffer = t.typeof("buffer"),
|
|
331
334
|
buffer = t.typeof("buffer"),
|
|
332
335
|
blobs = t.array(t.any),
|
|
333
336
|
}) }, nil },
|
|
@@ -356,7 +359,6 @@ do
|
|
|
356
359
|
local numberKind = tonumber(kind)
|
|
357
360
|
emitter.guards[numberKind] = guard
|
|
358
361
|
if serializerMetadata == nil then
|
|
359
|
-
emitter.serializers[numberKind] = messageSerializer
|
|
360
362
|
continue
|
|
361
363
|
end
|
|
362
364
|
emitter:addSerializer(numberKind, serializerMetadata)
|
|
@@ -392,7 +394,10 @@ do
|
|
|
392
394
|
return self
|
|
393
395
|
end
|
|
394
396
|
function MessageEmitter:onRemoteFire(serializedPacket, player)
|
|
395
|
-
|
|
397
|
+
if buffer.len(serializedPacket.messageBuffer) > 1 then
|
|
398
|
+
return warn("[@rbxts/tether]: Rejected message because message buffer was larger than one byte")
|
|
399
|
+
end
|
|
400
|
+
local message = buffer.readu8(serializedPacket.messageBuffer, 0)
|
|
396
401
|
self:executeEventCallbacks(message, serializedPacket, player)
|
|
397
402
|
self:executeFunctions(message, serializedPacket)
|
|
398
403
|
end
|
|
@@ -411,11 +416,7 @@ do
|
|
|
411
416
|
end
|
|
412
417
|
local packet = _packet
|
|
413
418
|
for callback in functions do
|
|
414
|
-
|
|
415
|
-
if _result ~= nil then
|
|
416
|
-
_result = _result.data
|
|
417
|
-
end
|
|
418
|
-
callback(_result)
|
|
419
|
+
callback(packet)
|
|
419
420
|
end
|
|
420
421
|
end
|
|
421
422
|
function MessageEmitter:executeEventCallbacks(message, serializedPacket, player)
|
|
@@ -434,18 +435,9 @@ do
|
|
|
434
435
|
local packet = _packet
|
|
435
436
|
for callback in callbacks do
|
|
436
437
|
if isServer then
|
|
437
|
-
|
|
438
|
-
local _result = packet
|
|
439
|
-
if _result ~= nil then
|
|
440
|
-
_result = _result.data
|
|
441
|
-
end
|
|
442
|
-
callback(_exp, _result)
|
|
438
|
+
callback(player, packet)
|
|
443
439
|
else
|
|
444
|
-
|
|
445
|
-
if _result ~= nil then
|
|
446
|
-
_result = _result.data
|
|
447
|
-
end
|
|
448
|
-
callback(_result)
|
|
440
|
+
callback(packet)
|
|
449
441
|
end
|
|
450
442
|
end
|
|
451
443
|
end
|
|
@@ -484,17 +476,22 @@ do
|
|
|
484
476
|
end
|
|
485
477
|
function MessageEmitter:getPacket(message, data)
|
|
486
478
|
local serializer = self:getSerializer(message)
|
|
479
|
+
local messageBuffer = buffer.create(1)
|
|
480
|
+
buffer.writeu8(messageBuffer, 0, message)
|
|
487
481
|
if serializer == nil then
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
482
|
+
return {
|
|
483
|
+
messageBuffer = messageBuffer,
|
|
484
|
+
buffer = buffer.create(0),
|
|
485
|
+
blobs = {},
|
|
486
|
+
}
|
|
487
|
+
end
|
|
488
|
+
local _object = {
|
|
489
|
+
messageBuffer = messageBuffer,
|
|
490
|
+
}
|
|
491
|
+
for _k, _v in serializer.serialize(data) do
|
|
492
|
+
_object[_k] = _v
|
|
493
493
|
end
|
|
494
|
-
return
|
|
495
|
-
message = message,
|
|
496
|
-
data = data,
|
|
497
|
-
})
|
|
494
|
+
return _object
|
|
498
495
|
end
|
|
499
496
|
function MessageEmitter:addSerializer(message, meta)
|
|
500
497
|
self.serializers[message] = self:createMessageSerializer(meta)
|
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 {
|
|
3
|
+
import type { SerializerMetadata } from "@rbxts/flamework-binary-serializer";
|
|
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;
|
|
@@ -8,13 +8,10 @@ export type ServerMessageCallback<T = unknown> = (player: Player, data: T) => vo
|
|
|
8
8
|
export type ServerMessageFunctionCallback<T = unknown, R = unknown> = (player: Player, data: T) => R;
|
|
9
9
|
export type BaseMessage = number;
|
|
10
10
|
export interface SerializedPacket {
|
|
11
|
+
readonly messageBuffer: buffer;
|
|
11
12
|
readonly buffer: buffer;
|
|
12
13
|
readonly blobs: defined[];
|
|
13
14
|
}
|
|
14
|
-
export interface TetherPacket<Data> {
|
|
15
|
-
readonly message: DataType.u8;
|
|
16
|
-
readonly data: Data;
|
|
17
|
-
}
|
|
18
15
|
export type MessageEvent = (packet: SerializedPacket) => void;
|
|
19
16
|
export type UnreliableMessageEvent = Networking.Unreliable<MessageEvent>;
|
|
20
17
|
export interface ServerEvents {
|
|
@@ -27,7 +24,7 @@ export interface ClientEvents {
|
|
|
27
24
|
}
|
|
28
25
|
export interface MessageMetadata<MessageData, Kind extends keyof MessageData> {
|
|
29
26
|
readonly guard: Modding.Generic<MessageData[Kind], "guard">;
|
|
30
|
-
readonly serializerMetadata: MessageData[Kind] extends undefined ? undefined : Modding.Many<SerializerMetadata<
|
|
27
|
+
readonly serializerMetadata: MessageData[Kind] extends undefined ? undefined : Modding.Many<SerializerMetadata<MessageData[Kind]>>;
|
|
31
28
|
}
|
|
32
29
|
export type Guard<T = unknown> = (value: unknown) => value is T;
|
|
33
30
|
export type MessageEmitterMetadata<MessageData> = {
|