@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.
- package/out/message-emitter.luau +237 -31
- package/out/structs.d.ts +10 -6
- package/package.json +1 -1
package/out/message-emitter.luau
CHANGED
|
@@ -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
|
|
370
|
-
|
|
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.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
local
|
|
376
|
-
local
|
|
377
|
-
|
|
378
|
-
|
|
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.
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
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(
|
|
486
|
-
|
|
487
|
-
|
|
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 = (
|
|
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
|
};
|