Retrieve the current subslot number.
Retrieve the current subslot number.
Increment the subslot
for the next time it is needed.
a 16u
number starting at 0
Transform data into a container packet and re-submit that container to the process that handles the packet.
Transform data into a container packet and re-submit that container to the process that handles the packet.
the packet data
an explanation of the input data
Accept ByteVector
data and package it into a SlottedMetaPacket
.
Accept ByteVector
data and package it into a SlottedMetaPacket
.
Send it (towards the network) upon successful encoding.
an encoded packet
Accept a Vector
of encoded packets and re-package them.
Accept a Vector
of encoded packets and re-package them.
The normal order is to package the elements of the vector into a MultiPacketEx
.
If the vector only has one element, it will get packaged by itself in a SlottedMetaPacket
.
If that one element risks being too big for the MTU, however, it will be handled off to be split.
Splitting should preserve Subslot
ordering with the rest of the bundling.
a specific number of byte streams
Accept a List
of packets and sequentially re-package the elements from the list into multiple container packets.
The original packets are encoded then paired with their encoding lengths plus extra space to prefix the length.
Accept a List
of packets and sequentially re-package the elements from the list into multiple container packets.
The original packets are encoded then paired with their encoding lengths plus extra space to prefix the length.
Encodings from these pairs are drawn from the list until into buckets that fit a maximum byte stream length.
The size limitation on any bucket is the MTU limit.
less by the base sizes of MultiPacketEx
(2) and of SlottedMetaPacket
(4).
the packets to be bundled
Process a control packet or determine that it does not need to be processed at this level.
Process a control packet or determine that it does not need to be processed at this level.
Primarily, if the packet is of a type that contains another packet that needs be be unmarshalled,
that/those packet must be unwound.
The subslot information is used to identify these nested packets after arriving at their destination,
to establish order for sequential packets and relation between divided packets.
the original container packet
the packet that was extracted from the container
Sort and redirect a container packet bound for the server by type of contents.
Sort and redirect a container packet bound for the server by type of contents.
GamePacket
objects can just onwards without issue.
ControlPacket
objects may need to be dequeued.
All other container types are invalid.
the container packet
Accept ByteVector
data, representing a ControlPacket
, and split it into chunks.
Accept ByteVector
data, representing a ControlPacket
, and split it into chunks.
The chunks should not be blocked by the MTU.
Send each chunk (towards the network) as it is converted.
ByteVector
data to be split
Transform a ControlPacket
into ByteVector
data for splitting.
Transform a ControlPacket
into ByteVector
data for splitting.
the original ControlPacket
Check that an outbound packet is not too big to get stuck by the MTU.
Check that an outbound packet is not too big to get stuck by the MTU. If it is larger than the MTU, divide it up and re-package the sections. Otherwise, send the data out like normal.
the encoded packet data
Encoded sequence of data going towards the network.
Encoded sequence of data going towards the network.
the data
Decoded packet going towards the simulation.
Decoded packet going towards the simulation.
the packet
In between the network side and the higher functioning side of the simulation: accept packets and transform them into a sequence of data (encoding), and accept a sequence of data and transform it into s packet (decoding).
Following the standardization of the
SessionRouter
pipeline, the throughput of thisActor
has directionality. The "network," where the encoded data comes and goes, is assumed to beleftRef
. The "simulation", where the decoded packets come and go, is assumed to berightRef
.rightRef
can accept a sequence that looks like encoded data but it will merely pass out the same sequence. Likewise,leftRef
accepts decoded packets but merely ejects the same packets without doing any work on them. The former functionality is anticipated. The latter functionality is deprecated.Encoded data leaving the
Actor
(leftRef
) is limited by an upper bound capacity. Sequences can not be larger than that bound or else they will be dropped. This maximum transmission unit (MTU) is used to divide the encoded sequence into chunks of encoded data, re-packaged into nestedControlPacket
units, and each unit encoded. The outer packaging is numerically consistent with asubslot
that starts counting once the simulation starts. The client is very specific about thesubslot
number and will reject out-of-order packets. It resets to 0 each time thisActor
starts up and the client reflects this functionality.