@rbxts/tether 1.2.9 → 1.3.0

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.
@@ -262,16 +262,16 @@ do
262
262
  self.serverEvents = remotes:createServer({}, {
263
263
  incomingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
264
264
  incoming = {
265
- sendServerMessage = { { t.interface({
265
+ sendServerMessage = { { t.array(t.interface({
266
266
  messageBuffer = t.typeof("buffer"),
267
267
  buffer = t.typeof("buffer"),
268
268
  blobs = t.array(t.any),
269
- }) }, nil },
270
- sendUnreliableServerMessage = { { t.interface({
269
+ })) }, nil },
270
+ sendUnreliableServerMessage = { { t.array(t.interface({
271
271
  messageBuffer = t.typeof("buffer"),
272
272
  buffer = t.typeof("buffer"),
273
273
  blobs = t.array(t.any),
274
- }) }, nil },
274
+ })) }, nil },
275
275
  },
276
276
  incomingUnreliable = {
277
277
  sendUnreliableServerMessage = true,
@@ -287,16 +287,16 @@ do
287
287
  self.clientEvents = remotes:createClient({}, {
288
288
  incomingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
289
289
  incoming = {
290
- sendClientMessage = { { t.interface({
290
+ sendClientMessage = { { t.array(t.interface({
291
291
  messageBuffer = t.typeof("buffer"),
292
292
  buffer = t.typeof("buffer"),
293
293
  blobs = t.array(t.any),
294
- }) }, nil },
295
- sendUnreliableClientMessage = { { t.interface({
294
+ })) }, nil },
295
+ sendUnreliableClientMessage = { { t.array(t.interface({
296
296
  messageBuffer = t.typeof("buffer"),
297
297
  buffer = t.typeof("buffer"),
298
298
  blobs = t.array(t.any),
299
- }) }, nil },
299
+ })) }, nil },
300
300
  },
301
301
  incomingUnreliable = {
302
302
  sendUnreliableClientMessage = true,
@@ -361,31 +361,235 @@ do
361
361
  return self
362
362
  end
363
363
  function MessageEmitter:update()
364
+ local getPacket = function(info)
365
+ return info.packet
366
+ end
367
+ if RunService:IsClient() then
368
+ if #self.serverQueue == 0 then
369
+ return nil
370
+ end
371
+ local _exp = self.serverQueue
372
+ -- ▼ ReadonlyArray.map ▼
373
+ local _newValue = table.create(#_exp)
374
+ local _callback = function(_param)
375
+ local message = _param[1]
376
+ local data = _param[2]
377
+ local unreliable = _param[3]
378
+ local packet = self:getPacket(message, data)
379
+ return {
380
+ packet = packet,
381
+ unreliable = unreliable,
382
+ }
383
+ end
384
+ for _k, _v in _exp do
385
+ _newValue[_k] = _callback(_v, _k - 1, _exp)
386
+ end
387
+ -- ▲ ReadonlyArray.map ▲
388
+ local serverPacketInfos = _newValue
389
+ -- ▼ ReadonlyArray.filter ▼
390
+ local _newValue_1 = {}
391
+ local _callback_1 = function(info)
392
+ return info.unreliable
393
+ end
394
+ local _length = 0
395
+ for _k, _v in serverPacketInfos do
396
+ if _callback_1(_v, _k - 1, serverPacketInfos) == true then
397
+ _length += 1
398
+ _newValue_1[_length] = _v
399
+ end
400
+ end
401
+ -- ▲ ReadonlyArray.filter ▲
402
+ -- ▼ ReadonlyArray.map ▼
403
+ local _newValue_2 = table.create(#_newValue_1)
404
+ for _k, _v in _newValue_1 do
405
+ _newValue_2[_k] = getPacket(_v, _k - 1, _newValue_1)
406
+ end
407
+ -- ▲ ReadonlyArray.map ▲
408
+ local unreliableServerPackets = _newValue_2
409
+ -- ▼ ReadonlyArray.filter ▼
410
+ local _newValue_3 = {}
411
+ local _callback_2 = function(info)
412
+ return not info.unreliable
413
+ end
414
+ local _length_1 = 0
415
+ for _k, _v in serverPacketInfos do
416
+ if _callback_2(_v, _k - 1, serverPacketInfos) == true then
417
+ _length_1 += 1
418
+ _newValue_3[_length_1] = _v
419
+ end
420
+ end
421
+ -- ▲ ReadonlyArray.filter ▲
422
+ -- ▼ ReadonlyArray.map ▼
423
+ local _newValue_4 = table.create(#_newValue_3)
424
+ for _k, _v in _newValue_3 do
425
+ _newValue_4[_k] = getPacket(_v, _k - 1, _newValue_3)
426
+ end
427
+ -- ▲ ReadonlyArray.map ▲
428
+ local serverPackets = _newValue_4
429
+ if not (#unreliableServerPackets == 0) then
430
+ self.clientEvents.sendUnreliableServerMessage(unreliableServerPackets)
431
+ end
432
+ if not (#serverPackets == 0) then
433
+ self.clientEvents.sendServerMessage(serverPackets)
434
+ end
435
+ self.serverQueue = {}
436
+ return nil
437
+ end
438
+ local clientPackets = {}
439
+ local addClientPacket = function(player, packetInfo)
440
+ local _player = player
441
+ local _condition = clientPackets[_player]
442
+ if _condition == nil then
443
+ _condition = {}
444
+ end
445
+ local packetList = _condition
446
+ local _packetInfo = packetInfo
447
+ table.insert(packetList, _packetInfo)
448
+ local _player_1 = player
449
+ clientPackets[_player_1] = packetList
450
+ end
364
451
  for _, _binding in self.clientQueue do
365
452
  local player = _binding[1]
366
453
  local message = _binding[2]
367
454
  local data = _binding[3]
368
455
  local unreliable = _binding[4]
369
- local remote = if unreliable then self.serverEvents.sendUnreliableClientMessage else self.serverEvents.sendClientMessage
370
- remote(player, self:getPacket(message, data))
456
+ local packet = self:getPacket(message, data)
457
+ local info = {
458
+ packet = packet,
459
+ unreliable = unreliable,
460
+ }
461
+ if typeof(player) == "Instance" then
462
+ addClientPacket(player, info)
463
+ else
464
+ for _1, p in player do
465
+ addClientPacket(p, info)
466
+ end
467
+ end
371
468
  end
372
- self.clientQueue = {}
373
- for _, _binding in self.clientBroadcastQueue do
374
- local message = _binding[1]
375
- local data = _binding[2]
376
- local unreliable = _binding[3]
377
- local remote = if unreliable then self.serverEvents.sendUnreliableClientMessage else self.serverEvents.sendClientMessage
378
- remote:broadcast(self:getPacket(message, data))
469
+ if not (#self.clientBroadcastQueue == 0) then
470
+ local _exp = self.clientBroadcastQueue
471
+ -- ReadonlyArray.map
472
+ local _newValue = table.create(#_exp)
473
+ local _callback = function(_param)
474
+ local message = _param[1]
475
+ local data = _param[2]
476
+ local unreliable = _param[3]
477
+ local packet = self:getPacket(message, data)
478
+ return {
479
+ packet = packet,
480
+ unreliable = unreliable,
481
+ }
482
+ end
483
+ for _k, _v in _exp do
484
+ _newValue[_k] = _callback(_v, _k - 1, _exp)
485
+ end
486
+ -- ▲ ReadonlyArray.map ▲
487
+ local clientBroadcastPackets = _newValue
488
+ -- ▼ ReadonlyArray.filter ▼
489
+ local _newValue_1 = {}
490
+ local _callback_1 = function(info)
491
+ return info.unreliable
492
+ end
493
+ local _length = 0
494
+ for _k, _v in clientBroadcastPackets do
495
+ if _callback_1(_v, _k - 1, clientBroadcastPackets) == true then
496
+ _length += 1
497
+ _newValue_1[_length] = _v
498
+ end
499
+ end
500
+ -- ▲ ReadonlyArray.filter ▲
501
+ -- ▼ ReadonlyArray.map ▼
502
+ local _newValue_2 = table.create(#_newValue_1)
503
+ for _k, _v in _newValue_1 do
504
+ _newValue_2[_k] = getPacket(_v, _k - 1, _newValue_1)
505
+ end
506
+ -- ▲ ReadonlyArray.map ▲
507
+ local unreliableBroadcastPackets = _newValue_2
508
+ -- ▼ ReadonlyArray.filter ▼
509
+ local _newValue_3 = {}
510
+ local _callback_2 = function(info)
511
+ return not info.unreliable
512
+ end
513
+ local _length_1 = 0
514
+ for _k, _v in clientBroadcastPackets do
515
+ if _callback_2(_v, _k - 1, clientBroadcastPackets) == true then
516
+ _length_1 += 1
517
+ _newValue_3[_length_1] = _v
518
+ end
519
+ end
520
+ -- ▲ ReadonlyArray.filter ▲
521
+ -- ▼ ReadonlyArray.map ▼
522
+ local _newValue_4 = table.create(#_newValue_3)
523
+ for _k, _v in _newValue_3 do
524
+ _newValue_4[_k] = getPacket(_v, _k - 1, _newValue_3)
525
+ end
526
+ -- ▲ ReadonlyArray.map ▲
527
+ local broadcastPackets = _newValue_4
528
+ if not (#unreliableBroadcastPackets == 0) then
529
+ self.serverEvents.sendUnreliableClientMessage:broadcast(unreliableBroadcastPackets)
530
+ end
531
+ if not (#broadcastPackets == 0) then
532
+ self.serverEvents.sendClientMessage:broadcast(broadcastPackets)
533
+ end
534
+ self.clientBroadcastQueue = {}
379
535
  end
380
- self.clientBroadcastQueue = {}
381
- for _, _binding in self.serverQueue do
382
- local message = _binding[1]
383
- local data = _binding[2]
384
- local unreliable = _binding[3]
385
- local remote = if unreliable then self.clientEvents.sendUnreliableServerMessage else self.clientEvents.sendServerMessage
386
- remote(self:getPacket(message, data))
536
+ if not (#self.clientQueue == 0) then
537
+ for player, packetInfo in clientPackets do
538
+ if #packetInfo == 0 then
539
+ continue
540
+ end
541
+ if #packetInfo == 0 then
542
+ continue
543
+ end
544
+ -- ▼ ReadonlyArray.filter ▼
545
+ local _newValue = {}
546
+ local _callback = function(info)
547
+ return info.unreliable
548
+ end
549
+ local _length = 0
550
+ for _k, _v in packetInfo do
551
+ if _callback(_v, _k - 1, packetInfo) == true then
552
+ _length += 1
553
+ _newValue[_length] = _v
554
+ end
555
+ end
556
+ -- ▲ ReadonlyArray.filter ▲
557
+ -- ▼ ReadonlyArray.map ▼
558
+ local _newValue_1 = table.create(#_newValue)
559
+ for _k, _v in _newValue do
560
+ _newValue_1[_k] = getPacket(_v, _k - 1, _newValue)
561
+ end
562
+ -- ▲ ReadonlyArray.map ▲
563
+ local unreliablePackets = _newValue_1
564
+ -- ▼ ReadonlyArray.filter ▼
565
+ local _newValue_2 = {}
566
+ local _callback_1 = function(info)
567
+ return not info.unreliable
568
+ end
569
+ local _length_1 = 0
570
+ for _k, _v in packetInfo do
571
+ if _callback_1(_v, _k - 1, packetInfo) == true then
572
+ _length_1 += 1
573
+ _newValue_2[_length_1] = _v
574
+ end
575
+ end
576
+ -- ▲ ReadonlyArray.filter ▲
577
+ -- ▼ ReadonlyArray.map ▼
578
+ local _newValue_3 = table.create(#_newValue_2)
579
+ for _k, _v in _newValue_2 do
580
+ _newValue_3[_k] = getPacket(_v, _k - 1, _newValue_2)
581
+ end
582
+ -- ▲ ReadonlyArray.map ▲
583
+ local packets = _newValue_3
584
+ if not (#unreliablePackets == 0) then
585
+ self.serverEvents.sendUnreliableClientMessage(player, unreliablePackets)
586
+ end
587
+ if not (#packets == 0) then
588
+ self.serverEvents.sendClientMessage(player, packets)
589
+ end
590
+ end
591
+ self.clientQueue = {}
387
592
  end
388
- self.serverQueue = {}
389
593
  end
390
594
  function MessageEmitter:runClientMiddlewares(message, data, player)
391
595
  if not self:validateData(message, data) then
@@ -482,13 +686,15 @@ do
482
686
  end
483
687
  return guardPassed
484
688
  end
485
- function MessageEmitter:onRemoteFire(serializedPacket, player)
486
- if buffer.len(serializedPacket.messageBuffer) > 1 then
487
- return warn("[@rbxts/tether]: Rejected message because message buffer was larger than one byte")
689
+ function MessageEmitter:onRemoteFire(serializedPackets, player)
690
+ for _, packet in serializedPackets do
691
+ if buffer.len(packet.messageBuffer) > 1 then
692
+ return warn("[@rbxts/tether]: Rejected packet because message buffer was larger than one byte")
693
+ end
694
+ local message = buffer.readu8(packet.messageBuffer, 0)
695
+ self:executeEventCallbacks(message, packet, player)
696
+ self:executeFunctions(message, packet)
488
697
  end
489
- local message = buffer.readu8(serializedPacket.messageBuffer, 0)
490
- self:executeEventCallbacks(message, serializedPacket, player)
491
- self:executeFunctions(message, serializedPacket)
492
698
  end
493
699
  function MessageEmitter:executeFunctions(message, serializedPacket)
494
700
  local isServer = RunService:IsServer()
package/out/structs.d.ts CHANGED
@@ -7,20 +7,24 @@ export type ClientMessageFunctionCallback<T = unknown, R = unknown> = (data: T)
7
7
  export type ServerMessageCallback<T = unknown> = (player: Player, data: T) => void;
8
8
  export type ServerMessageFunctionCallback<T = unknown, R = unknown> = (player: Player, data: T) => R;
9
9
  export type BaseMessage = number;
10
+ export interface PacketInfo {
11
+ readonly packet: SerializedPacket;
12
+ readonly unreliable: boolean;
13
+ }
10
14
  export interface SerializedPacket {
11
15
  readonly messageBuffer: buffer;
12
16
  readonly buffer: buffer;
13
17
  readonly blobs: defined[];
14
18
  }
15
- export type MessageEvent = (packet: SerializedPacket) => void;
19
+ export type MessageEvent = (packets: SerializedPacket[]) => void;
16
20
  export type UnreliableMessageEvent = Networking.Unreliable<MessageEvent>;
17
21
  export interface ServerEvents {
18
- sendServerMessage: MessageEvent;
19
- sendUnreliableServerMessage: UnreliableMessageEvent;
22
+ readonly sendServerMessage: MessageEvent;
23
+ readonly sendUnreliableServerMessage: UnreliableMessageEvent;
20
24
  }
21
25
  export interface ClientEvents {
22
- sendClientMessage: MessageEvent;
23
- sendUnreliableClientMessage: UnreliableMessageEvent;
26
+ readonly sendClientMessage: MessageEvent;
27
+ readonly sendUnreliableClientMessage: UnreliableMessageEvent;
24
28
  }
25
29
  export interface MessageMetadata<MessageData, Kind extends keyof MessageData> {
26
30
  readonly guard: Modding.Generic<MessageData[Kind], "guard">;
@@ -28,5 +32,5 @@ export interface MessageMetadata<MessageData, Kind extends keyof MessageData> {
28
32
  }
29
33
  export type Guard<T = unknown> = (value: unknown) => value is T;
30
34
  export type MessageEmitterMetadata<MessageData> = {
31
- [Kind in keyof MessageData]: MessageMetadata<MessageData, Kind>;
35
+ readonly [Kind in keyof MessageData]: MessageMetadata<MessageData, Kind>;
32
36
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/tether",
3
- "version": "1.2.9",
3
+ "version": "1.3.0",
4
4
  "main": "out/init.lua",
5
5
  "scripts": {
6
6
  "build": "rbxtsc",