@rbxts/tether 1.2.4 → 1.2.6

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.
@@ -3,6 +3,7 @@ local TS = _G[script]
3
3
  local RunService = TS.import(script, TS.getModule(script, "@rbxts", "services")).RunService
4
4
  local repr = TS.import(script, TS.getModule(script, "@rbxts", "repr").out)
5
5
  local DropRequest = TS.import(script, script.Parent, "middleware").DropRequest
6
+ local bufferToString = TS.import(script, script.Parent, "utility").bufferToString
6
7
  local BLOB_SIZE = 5
7
8
  local BuiltinMiddlewares = {}
8
9
  do
@@ -68,31 +69,6 @@ do
68
69
  end
69
70
  end
70
71
  _container.rateLimit = rateLimit
71
- local function bufferToString(buf)
72
- local s = { "{ " }
73
- do
74
- local i = 0
75
- local _shouldIncrement = false
76
- while true do
77
- if _shouldIncrement then
78
- i += 1
79
- else
80
- _shouldIncrement = true
81
- end
82
- if not (i < buffer.len(buf)) then
83
- break
84
- end
85
- local byte = buffer.readu8(buf, i)
86
- local _arg0 = tostring(byte)
87
- table.insert(s, _arg0)
88
- if i < buffer.len(buf) - 1 then
89
- table.insert(s, ", ")
90
- end
91
- end
92
- end
93
- table.insert(s, " }")
94
- return table.concat(s, "")
95
- end
96
72
  local horizontalLine = "------------------------------------"
97
73
  --[[
98
74
  *
@@ -120,17 +96,13 @@ do
120
96
  local schemaString = if schema ~= nil then " " .. table.concat(string.split(repr(schema[2], {
121
97
  pretty = true,
122
98
  }), "\n"), "\n ") else "unknown"
123
- local text = { "\n", horizontalLine, "\n", "Packet sent to ", (if RunService:IsServer() then "client" else "server"), "!\n", " - Message: ", message, "\n", " - Data: ", if data == nil then "undefined" else data, "\n", " - Raw data:\n", " - Buffer: ", bufferToString(rawData.buffer), "\n", " - Blobs: ", repr(rawData.blobs, {
99
+ local text = { "\n", horizontalLine, "\n", "Packet sent to ", (if RunService:IsServer() then "client" else "server"), "!\n", " - Message: ", message, "\n", " - Data: ", repr(data, {
100
+ pretty = true,
101
+ }), "\n", " - Raw data:\n", " - Buffer: ", bufferToString(rawData.buffer), "\n", " - Blobs: ", repr(rawData.blobs, {
124
102
  pretty = false,
125
103
  robloxClassName = true,
126
104
  }), "\n", " - Packet size: ", bufferSize + blobsSize, " bytes\n", " - Buffer: ", bufferSize, " bytes\n", " - Blobs: ", blobsSize, " bytes\n", " - Schema: ", schemaString, "\n", horizontalLine, "\n" }
127
- -- ▼ ReadonlyArray.join
128
- local _result = table.create(#text)
129
- for _k, _v in text do
130
- _result[_k] = tostring(_v)
131
- end
132
- -- ▲ ReadonlyArray.join ▲
133
- print(table.concat(_result, ""))
105
+ print(table.concat(text, ""))
134
106
  end
135
107
  end
136
108
  end
@@ -104,7 +104,6 @@ export declare class MessageEmitter<MessageData> extends Destroyable {
104
104
  private validateData;
105
105
  private initialize;
106
106
  private onRemoteFire;
107
- private readMessageFromPacket;
108
107
  private executeFunctions;
109
108
  private executeEventCallbacks;
110
109
  private once;
@@ -7,14 +7,16 @@ local _services = TS.import(script, TS.getModule(script, "@rbxts", "services"))
7
7
  local Players = _services.Players
8
8
  local RunService = _services.RunService
9
9
  local Destroyable = TS.import(script, TS.getModule(script, "@rbxts", "destroyable").out).default
10
+ local repr = TS.import(script, TS.getModule(script, "@rbxts", "repr").out)
10
11
  local _middleware = TS.import(script, script.Parent, "middleware")
11
12
  local DropRequest = _middleware.DropRequest
12
13
  local MiddlewareProvider = _middleware.MiddlewareProvider
13
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 } } } })
14
16
  local remotes = Networking.createEvent("@rbxts/tether:message-emitter@remotes")
15
- local metaGenerationFailed = "[@rbxts/tether]: Failed to generate message metadata - make sure you are using Flamework macro-friendly types in your schemas"
16
- local guardFailed = function(message)
17
- return `[@rbxts/tether]: Type validation guard failed for message '{message}' - check your sent data`
17
+ 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
+ local guardFailed = function(message, data)
19
+ return `[@rbxts/tether]: Type validation guard failed for message '{message}' - check your sent data\nSent data: {repr(data)}`
18
20
  end
19
21
  local MessageEmitter
20
22
  do
@@ -225,8 +227,9 @@ do
225
227
  updateData = updateData,
226
228
  getRawData = getPacket,
227
229
  }
230
+ local players = Players:GetPlayers()
228
231
  for _, globalMiddleware in self.middleware:getClientGlobal() do
229
- for _1, player in Players:GetPlayers() do
232
+ for _1, player in players do
230
233
  if not self:validateData(message, data) then
231
234
  return nil
232
235
  end
@@ -237,7 +240,7 @@ do
237
240
  end
238
241
  end
239
242
  for _, middleware in self.middleware:getClient(message) do
240
- for _1, player in Players:GetPlayers() do
243
+ for _1, player in players do
241
244
  if not self:validateData(message, data) then
242
245
  return nil
243
246
  end
@@ -353,6 +356,7 @@ do
353
356
  local numberKind = tonumber(kind)
354
357
  emitter.guards[numberKind] = guard
355
358
  if serializerMetadata == nil then
359
+ emitter.serializers[numberKind] = messageSerializer
356
360
  continue
357
361
  end
358
362
  emitter:addSerializer(numberKind, serializerMetadata)
@@ -365,7 +369,7 @@ do
365
369
  local guard = _guards[_message]
366
370
  local guardPassed = guard(data)
367
371
  if not guardPassed then
368
- warn(guardFailed(message))
372
+ warn(guardFailed(message, data))
369
373
  end
370
374
  return guardPassed
371
375
  end
@@ -388,12 +392,9 @@ do
388
392
  return self
389
393
  end
390
394
  function MessageEmitter:onRemoteFire(serializedPacket, player)
391
- local sentMessage = self:readMessageFromPacket(serializedPacket)
392
- self:executeEventCallbacks(sentMessage, serializedPacket, player)
393
- self:executeFunctions(sentMessage, serializedPacket)
394
- end
395
- function MessageEmitter:readMessageFromPacket(serializedPacket)
396
- return buffer.readu8(serializedPacket.buffer, 0)
395
+ local message = buffer.readu8(serializedPacket.buffer, 0)
396
+ self:executeEventCallbacks(message, serializedPacket, player)
397
+ self:executeFunctions(message, serializedPacket)
397
398
  end
398
399
  function MessageEmitter:executeFunctions(message, serializedPacket)
399
400
  local isServer = RunService:IsServer()
@@ -483,18 +484,17 @@ do
483
484
  end
484
485
  function MessageEmitter:getPacket(message, data)
485
486
  local serializer = self:getSerializer(message)
486
- if serializer ~= nil and data ~= nil then
487
- return serializer.serialize({
487
+ if serializer == nil then
488
+ warn(`[@rbxts/tether]: Failed to get packet for message '{message}', no serializer was found`)
489
+ return messageSerializer.serialize({
488
490
  message = message,
489
- data = data,
491
+ data = nil,
490
492
  })
491
493
  end
492
- local buf = buffer.create(1)
493
- buffer.writeu8(buf, 0, message)
494
- return {
495
- buffer = buf,
496
- blobs = {},
497
- }
494
+ return serializer.serialize({
495
+ message = message,
496
+ data = data,
497
+ })
498
498
  end
499
499
  function MessageEmitter:addSerializer(message, meta)
500
500
  self.serializers[message] = self:createMessageSerializer(meta)
@@ -0,0 +1 @@
1
+ export declare function bufferToString(buf: buffer): string;
@@ -0,0 +1,29 @@
1
+ -- Compiled with roblox-ts v3.0.0
2
+ local function bufferToString(buf)
3
+ local s = { "{ " }
4
+ do
5
+ local i = 0
6
+ local _shouldIncrement = false
7
+ while true do
8
+ if _shouldIncrement then
9
+ i += 1
10
+ else
11
+ _shouldIncrement = true
12
+ end
13
+ if not (i < buffer.len(buf)) then
14
+ break
15
+ end
16
+ local byte = buffer.readu8(buf, i)
17
+ local _arg0 = tostring(byte)
18
+ table.insert(s, _arg0)
19
+ if i < buffer.len(buf) - 1 then
20
+ table.insert(s, ", ")
21
+ end
22
+ end
23
+ end
24
+ table.insert(s, " }")
25
+ return table.concat(s, "")
26
+ end
27
+ return {
28
+ bufferToString = bufferToString,
29
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/tether",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "main": "out/init.lua",
5
5
  "scripts": {
6
6
  "build": "rbxtsc",