quake2ts 0.0.301 → 0.0.302

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.
Files changed (32) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +8 -8
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +180 -36
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +180 -36
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/engine/dist/browser/index.global.js +9 -9
  10. package/packages/engine/dist/browser/index.global.js.map +1 -1
  11. package/packages/engine/dist/cjs/index.cjs +90 -18
  12. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  13. package/packages/engine/dist/esm/index.js +90 -18
  14. package/packages/engine/dist/esm/index.js.map +1 -1
  15. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  16. package/packages/game/dist/browser/index.global.js +4 -4
  17. package/packages/game/dist/browser/index.global.js.map +1 -1
  18. package/packages/game/dist/cjs/index.cjs +90 -18
  19. package/packages/game/dist/cjs/index.cjs.map +1 -1
  20. package/packages/game/dist/esm/index.js +90 -18
  21. package/packages/game/dist/esm/index.js.map +1 -1
  22. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  23. package/packages/shared/dist/browser/index.global.js +1 -1
  24. package/packages/shared/dist/browser/index.global.js.map +1 -1
  25. package/packages/shared/dist/cjs/index.cjs +97 -19
  26. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  27. package/packages/shared/dist/esm/index.js +97 -19
  28. package/packages/shared/dist/esm/index.js.map +1 -1
  29. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  30. package/packages/shared/dist/types/net/netchan.d.ts +5 -0
  31. package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
  32. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -1443,10 +1443,14 @@ var init_esm = __esm({
1443
1443
  this.incomingReliableSequence = 0;
1444
1444
  this.outgoingReliableSequence = 0;
1445
1445
  this.reliableLength = 0;
1446
+ this.fragmentSendOffset = 0;
1447
+ this.fragmentBuffer = null;
1448
+ this.fragmentLength = 0;
1449
+ this.fragmentReceived = 0;
1446
1450
  this.lastReceived = 0;
1447
1451
  this.lastSent = 0;
1448
1452
  this.remoteAddress = null;
1449
- this.reliableMessage = new BinaryWriter(_NetChan2.MAX_MSGLEN);
1453
+ this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
1450
1454
  const now = Date.now();
1451
1455
  this.lastReceived = now;
1452
1456
  this.lastSent = now;
@@ -1472,6 +1476,10 @@ var init_esm = __esm({
1472
1476
  this.outgoingReliableSequence = 0;
1473
1477
  this.reliableLength = 0;
1474
1478
  this.reliableMessage.reset();
1479
+ this.fragmentSendOffset = 0;
1480
+ this.fragmentBuffer = null;
1481
+ this.fragmentLength = 0;
1482
+ this.fragmentReceived = 0;
1475
1483
  this.lastReceived = Date.now();
1476
1484
  this.lastSent = Date.now();
1477
1485
  }
@@ -1481,18 +1489,38 @@ var init_esm = __esm({
1481
1489
  transmit(unreliableData) {
1482
1490
  this.outgoingSequence++;
1483
1491
  this.lastSent = Date.now();
1492
+ let sendReliableLength = 0;
1493
+ let isFragment = false;
1494
+ let fragmentStart = 0;
1495
+ if (this.reliableLength > 0) {
1496
+ if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
1497
+ isFragment = true;
1498
+ if (this.fragmentSendOffset >= this.reliableLength) {
1499
+ this.fragmentSendOffset = 0;
1500
+ }
1501
+ const remaining = this.reliableLength - this.fragmentSendOffset;
1502
+ sendReliableLength = remaining;
1503
+ if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
1504
+ sendReliableLength = _NetChan2.FRAGMENT_SIZE;
1505
+ }
1506
+ fragmentStart = this.fragmentSendOffset;
1507
+ this.fragmentSendOffset += sendReliableLength;
1508
+ } else {
1509
+ sendReliableLength = this.reliableLength;
1510
+ }
1511
+ }
1484
1512
  const headerSize = _NetChan2.PACKET_HEADER;
1485
- const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
1513
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
1486
1514
  let unreliableSize = unreliableData ? unreliableData.length : 0;
1487
- if (headerSize + reliableSize + unreliableSize > _NetChan2.MAX_MSGLEN) {
1488
- unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableSize;
1515
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
1516
+ unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
1489
1517
  if (unreliableSize < 0) unreliableSize = 0;
1490
1518
  }
1491
- const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
1519
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
1492
1520
  const view = new DataView(buffer);
1493
1521
  const result = new Uint8Array(buffer);
1494
1522
  let sequence = this.outgoingSequence;
1495
- if (this.reliableLength > 0) {
1523
+ if (sendReliableLength > 0) {
1496
1524
  sequence |= 2147483648;
1497
1525
  if ((this.outgoingReliableSequence & 1) !== 0) {
1498
1526
  sequence |= 1073741824;
@@ -1506,13 +1534,23 @@ var init_esm = __esm({
1506
1534
  view.setUint32(4, ack, true);
1507
1535
  view.setUint16(8, this.qport, true);
1508
1536
  let offset = headerSize;
1509
- if (this.reliableLength > 0) {
1510
- view.setUint16(offset, this.reliableLength, true);
1537
+ if (sendReliableLength > 0) {
1538
+ let lengthField = sendReliableLength;
1539
+ if (isFragment) {
1540
+ lengthField |= 32768;
1541
+ }
1542
+ view.setUint16(offset, lengthField, true);
1511
1543
  offset += 2;
1544
+ if (isFragment) {
1545
+ view.setUint32(offset, fragmentStart, true);
1546
+ offset += 4;
1547
+ view.setUint32(offset, this.reliableLength, true);
1548
+ offset += 4;
1549
+ }
1512
1550
  const reliableBuffer = this.reliableMessage.getBuffer();
1513
- const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
1551
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
1514
1552
  result.set(reliableBytes, offset);
1515
- offset += this.reliableLength;
1553
+ offset += sendReliableLength;
1516
1554
  }
1517
1555
  if (unreliableData && unreliableSize > 0) {
1518
1556
  const chunk = unreliableData.slice(0, unreliableSize);
@@ -1553,6 +1591,7 @@ var init_esm = __esm({
1553
1591
  this.reliableLength = 0;
1554
1592
  this.reliableMessage.reset();
1555
1593
  this.outgoingReliableSequence ^= 1;
1594
+ this.fragmentSendOffset = 0;
1556
1595
  }
1557
1596
  }
1558
1597
  const hasReliableData = (sequence & 2147483648) !== 0;
@@ -1561,13 +1600,45 @@ var init_esm = __esm({
1561
1600
  let reliableData = null;
1562
1601
  if (hasReliableData) {
1563
1602
  if (payloadOffset + 2 > packet.byteLength) return null;
1564
- const reliableLen = view.getUint16(payloadOffset, true);
1603
+ let reliableLen = view.getUint16(payloadOffset, true);
1565
1604
  payloadOffset += 2;
1605
+ const isFragment = (reliableLen & 32768) !== 0;
1606
+ reliableLen &= 32767;
1566
1607
  const expectedBit = this.incomingReliableSequence & 1;
1567
1608
  if (reliableSeqBit === expectedBit) {
1568
- this.incomingReliableSequence++;
1569
- if (payloadOffset + reliableLen > packet.byteLength) return null;
1570
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1609
+ if (isFragment) {
1610
+ if (payloadOffset + 8 > packet.byteLength) return null;
1611
+ const fragStart = view.getUint32(payloadOffset, true);
1612
+ payloadOffset += 4;
1613
+ const fragTotal = view.getUint32(payloadOffset, true);
1614
+ payloadOffset += 4;
1615
+ if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
1616
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
1617
+ return null;
1618
+ }
1619
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
1620
+ this.fragmentBuffer = new Uint8Array(fragTotal);
1621
+ this.fragmentLength = fragTotal;
1622
+ this.fragmentReceived = 0;
1623
+ }
1624
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1625
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
1626
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
1627
+ this.fragmentBuffer.set(data, fragStart);
1628
+ this.fragmentReceived += reliableLen;
1629
+ if (this.fragmentReceived >= fragTotal) {
1630
+ reliableData = this.fragmentBuffer;
1631
+ this.incomingReliableSequence++;
1632
+ this.fragmentBuffer = null;
1633
+ this.fragmentLength = 0;
1634
+ this.fragmentReceived = 0;
1635
+ }
1636
+ }
1637
+ } else {
1638
+ this.incomingReliableSequence++;
1639
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1640
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1641
+ }
1571
1642
  }
1572
1643
  payloadOffset += reliableLen;
1573
1644
  }
@@ -1594,7 +1665,7 @@ var init_esm = __esm({
1594
1665
  * Writes a byte to the reliable message buffer
1595
1666
  */
1596
1667
  writeReliableByte(value) {
1597
- if (this.reliableLength + 1 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1668
+ if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
1598
1669
  throw new Error("NetChan reliable buffer overflow");
1599
1670
  }
1600
1671
  this.reliableMessage.writeByte(value);
@@ -1604,7 +1675,7 @@ var init_esm = __esm({
1604
1675
  * Writes a short to the reliable message buffer
1605
1676
  */
1606
1677
  writeReliableShort(value) {
1607
- if (this.reliableLength + 2 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1678
+ if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
1608
1679
  throw new Error("NetChan reliable buffer overflow");
1609
1680
  }
1610
1681
  this.reliableMessage.writeShort(value);
@@ -1614,7 +1685,7 @@ var init_esm = __esm({
1614
1685
  * Writes a long to the reliable message buffer
1615
1686
  */
1616
1687
  writeReliableLong(value) {
1617
- if (this.reliableLength + 4 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1688
+ if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
1618
1689
  throw new Error("NetChan reliable buffer overflow");
1619
1690
  }
1620
1691
  this.reliableMessage.writeLong(value);
@@ -1625,7 +1696,7 @@ var init_esm = __esm({
1625
1696
  */
1626
1697
  writeReliableString(value) {
1627
1698
  const len = value.length + 1;
1628
- if (this.reliableLength + len > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1699
+ if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
1629
1700
  throw new Error("NetChan reliable buffer overflow");
1630
1701
  }
1631
1702
  this.reliableMessage.writeString(value);
@@ -1658,6 +1729,7 @@ var init_esm = __esm({
1658
1729
  _NetChan.FRAGMENT_SIZE = 1024;
1659
1730
  _NetChan.PACKET_HEADER = 10;
1660
1731
  _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
1732
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
1661
1733
  WeaponId = /* @__PURE__ */ ((WeaponId22) => {
1662
1734
  WeaponId22["Blaster"] = "blaster";
1663
1735
  WeaponId22["Shotgun"] = "shotgun";