@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<TetherPacket<T>>>): SharedMiddleware<T>;
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[2], {
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, {
@@ -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
- local message = buffer.readu8(serializedPacket.buffer, 0)
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
- local _result = packet
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
- local _exp = player
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
- local _result = packet
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
- warn(`[@rbxts/tether]: Failed to get packet for message '{message}', no serializer was found`)
489
- return messageSerializer.serialize({
490
- message = message,
491
- data = nil,
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 serializer.serialize({
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 { DataType, SerializerMetadata } from "@rbxts/flamework-binary-serializer";
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<TetherPacket<MessageData[Kind]>>>;
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> = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/tether",
3
- "version": "1.2.6",
3
+ "version": "1.2.7",
4
4
  "main": "out/init.lua",
5
5
  "scripts": {
6
6
  "build": "rbxtsc",