@rbxts/tether 1.2.3 → 1.2.5

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
  *
@@ -103,7 +103,7 @@ export declare class MessageEmitter<MessageData> extends Destroyable {
103
103
  };
104
104
  private validateData;
105
105
  private initialize;
106
- private readMessageFromPacket;
106
+ private onRemoteFire;
107
107
  private executeFunctions;
108
108
  private executeEventCallbacks;
109
109
  private once;
@@ -11,8 +11,9 @@ local _middleware = TS.import(script, script.Parent, "middleware")
11
11
  local DropRequest = _middleware.DropRequest
12
12
  local MiddlewareProvider = _middleware.MiddlewareProvider
13
13
  -- TODO: error when trying to do something like server.emit() from the server
14
+ local messageSerializer = createBinarySerializer({ "object_raw", { { "message", { "u8" } }, { "data", { "literal", {}, -1 } } } })
14
15
  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 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"
16
17
  local guardFailed = function(message)
17
18
  return `[@rbxts/tether]: Type validation guard failed for message '{message}' - check your sent data`
18
19
  end
@@ -225,8 +226,9 @@ do
225
226
  updateData = updateData,
226
227
  getRawData = getPacket,
227
228
  }
229
+ local players = Players:GetPlayers()
228
230
  for _, globalMiddleware in self.middleware:getClientGlobal() do
229
- for _1, player in Players:GetPlayers() do
231
+ for _1, player in players do
230
232
  if not self:validateData(message, data) then
231
233
  return nil
232
234
  end
@@ -237,7 +239,7 @@ do
237
239
  end
238
240
  end
239
241
  for _, middleware in self.middleware:getClient(message) do
240
- for _1, player in Players:GetPlayers() do
242
+ for _1, player in players do
241
243
  if not self:validateData(message, data) then
242
244
  return nil
243
245
  end
@@ -353,6 +355,7 @@ do
353
355
  local numberKind = tonumber(kind)
354
356
  emitter.guards[numberKind] = guard
355
357
  if serializerMetadata == nil then
358
+ emitter.serializers[numberKind] = messageSerializer
356
359
  continue
357
360
  end
358
361
  emitter:addSerializer(numberKind, serializerMetadata)
@@ -372,21 +375,26 @@ do
372
375
  function MessageEmitter:initialize()
373
376
  if RunService:IsClient() then
374
377
  self.janitor:Add(self.clientEvents.sendClientMessage:connect(function(serializedPacket)
375
- local sentMessage = self:readMessageFromPacket(serializedPacket)
376
- self:executeEventCallbacks(sentMessage, serializedPacket)
377
- self:executeFunctions(sentMessage, serializedPacket)
378
+ return self:onRemoteFire(serializedPacket)
379
+ end))
380
+ self.janitor:Add(self.clientEvents.sendUnreliableClientMessage:connect(function(serializedPacket)
381
+ return self:onRemoteFire(serializedPacket)
378
382
  end))
379
383
  else
380
384
  self.janitor:Add(self.serverEvents.sendServerMessage:connect(function(player, serializedPacket)
381
- local sentMessage = self:readMessageFromPacket(serializedPacket)
382
- self:executeEventCallbacks(sentMessage, serializedPacket, player)
383
- self:executeFunctions(sentMessage, serializedPacket)
385
+ return self:onRemoteFire(serializedPacket, player)
386
+ end))
387
+ self.janitor:Add(self.serverEvents.sendUnreliableServerMessage:connect(function(player, serializedPacket)
388
+ return self:onRemoteFire(serializedPacket, player)
384
389
  end))
385
390
  end
386
391
  return self
387
392
  end
388
- function MessageEmitter:readMessageFromPacket(serializedPacket)
389
- return buffer.readu8(serializedPacket.buffer, 0)
393
+ function MessageEmitter:onRemoteFire(serializedPacket, player)
394
+ local _binding = messageSerializer.deserialize(serializedPacket.buffer, serializedPacket.blobs)
395
+ local message = _binding.message
396
+ self:executeEventCallbacks(message, serializedPacket, player)
397
+ self:executeFunctions(message, serializedPacket)
390
398
  end
391
399
  function MessageEmitter:executeFunctions(message, serializedPacket)
392
400
  local isServer = RunService:IsServer()
@@ -476,18 +484,17 @@ do
476
484
  end
477
485
  function MessageEmitter:getPacket(message, data)
478
486
  local serializer = self:getSerializer(message)
479
- if serializer ~= nil and data ~= nil then
480
- 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({
481
490
  message = message,
482
- data = data,
491
+ data = nil,
483
492
  })
484
493
  end
485
- local buf = buffer.create(1)
486
- buffer.writeu8(buf, 0, message)
487
- return {
488
- buffer = buf,
489
- blobs = {},
490
- }
494
+ return serializer.serialize({
495
+ message = message,
496
+ data = data,
497
+ })
491
498
  end
492
499
  function MessageEmitter:addSerializer(message, meta)
493
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.3",
3
+ "version": "1.2.5",
4
4
  "main": "out/init.lua",
5
5
  "scripts": {
6
6
  "build": "rbxtsc",