RakLib Versions Save

RakNet server implementation written in PHP

1.1.1

2 months ago

Changes since 1.1.0

  • SendReliabilityLayer will now retransmit packets unacked for longer than 2 seconds.
    • Previously, packets might wait for acknowledgement for up to 9 seconds, causing major connection pauses.
    • This timeout will be replaced by a better mechanism in an upcoming release.

1.1.0

2 months ago

Changes since 1.0.0

  • SendReliabilityLayer is now aware of, and respects, the remote reliable window.
    • This is necessary because the client will drop packets if they aren't within its reliable window (without ACK or NAK), causing long resend delays.
    • Packets outside this window are buffered until the window has shifted enough to allow the client to accept them.
    • A new parameter $reliableWindowSize has been added to SendReliabilityLayer::__construct(), with a default of 512 (matching the official RakNet default as seen here).
  • SendReliabilityLayer no longer drops the resend queue under any circumstances.
    • This had the potential to cause a breakdown of reliable packet transmission, causing sessions to get stuck.
    • Thanks to the introduction of sending reliability window, the resend queue size should never exceed the reliable window size (512 packets) anyway.

1.0.0

2 months ago

This release is mostly the same as 0.15.x. Despite what the version may suggest, this is not a complete RakNet implementation. Staying on 0.x for so long was a mistake that needed to be corrected.

Changes since 0.15.x

  • Introduce parameterization for max split packet part count and concurrent split packet handling.
  • Improved header size calculation for connected packets when checking whether to split packets. It now calculates the exact header size instead of assuming a hard 60-byte cutoff (this was too much for most packets, causing unnecessary packet splitting, and also didn't handle reliable-sequenced correctly).
  • Fixed ack receipts not working when a packet was split into multiple parts.

0.15.0

1 year ago

Changes since 0.14.x

This release modernizes the code to PHP 8.0 standards, and improves some internal structure to open the gates for future extension. No significant changes have been made, and the API is mostly the same as 0.14.

API

  • Use typed properties and promoted properties wherever possible
  • Extracted generic session logic into raklib\generic\Session
  • raklib\server\Session is replaced by a much smaller raklib\server\ServerSession - it inherits most of its logic from generic\Session
  • Added specialized client\ClientSocket and server\ServerSocket with different functionality for each use case
  • isTemporal renamed to isTemporary wherever appropriate
  • Added DisconnectReason constants. All disconnect APIs now use these instead of hardcoded string messages.

Tools

  • Added new scripts:
    • tools/scan.php to scan for servers on a given broadcast address
    • tools/proxy.php to set up a simple tunnel between a client and server (useful for getting a Windows Minecraft client onto a WSL BDS instance)

0.14.4

2 years ago

Changes since 0.14.3

  • Fixed memory leak in ReceiveReliabilityLayer when processing reliable-ordered packets.
  • Handling reliable-sequenced and reliable-ordered packets on the same channel should now work correctly.

0.14.3

2 years ago

Changes since 0.14.2

  • Datagram sequence numbers are now never reused.
  • Server->__construct() now checks that the passed MTU size is bigger than Session::MIN_MTU_SIZE.
  • Dropped support for PreProcessor.
  • Now analysed using PHPStan level 9.

0.12.12

2 years ago

Changes since 0.12.11

  • Accept pthreads ~3.2.0 || ^4.0.

0.14.2

2 years ago

Changes since 0.14.1

  • Fixed immediate-send not working.
  • Reintroduced delayed disconnect mechanism from 0.12, which waits for all pending packets to go out and be ACKed before sending ID_DISCONNECTION_NOTIFICATION. This fixes various MCPE-specific issues, such as transfers and disconnection screens not working correctly.

0.14.1

2 years ago

Changes since 0.14.0

  • Fixed non-RakNet packet passthru (this broke Query for PocketMine-MP servers on 0.14.0).

0.14.0

2 years ago

Changes since 0.13.x

  • PHP 8.0 is now required as a minimum.
  • Implemented #105 - new connecting sessions can replace a session in "disconnecting" state from the same IP/port - typically useful in client crash situations
  • Fixed custom disconnect messages sometimes not arriving on shutdown (race condition in channel handling #102)
  • Negative ping values are no longer reported to the server event listener. (This could happen if the client sent a pong with a timestamp in the future relative to server time.)