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
SessionRouterpipeline, the throughput of thisActorhas 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.rightRefcan accept a sequence that looks like encoded data but it will merely pass out the same sequence. Likewise,leftRefaccepts 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 nestedControlPacketunits, and each unit encoded. The outer packaging is numerically consistent with asubslotthat starts counting once the simulation starts. The client is very specific about thesubslotnumber and will reject out-of-order packets. It resets to 0 each time thisActorstarts up and the client reflects this functionality.