A few library refreshes today, SimEthereal being the biggest one.
First we’ll talk about SimMath 1.4.0:
- Added an IntRange interface and default FixedIntRange implementation to
represent a range of ints.
- Added an IntRangeSet which is a Set (and effectively Set<int))
that is space-optimized for sets of integers that consist of packed ranges.
Next is SimEthereal 1.5.0 which leverages the new IntRangeSet among other things:
- Internally moved ZoneManager creation to the EtherealHost constructor
so that it could be accessed prior to EtherealHost service initialization.
- Refactored ZoneManager to allow different internal ZoneRange implementations.
Renamed the old internal ZoneRange to OctZoneRange to denote that it can
track a maximum of eight zones per object (2x2x2). This limited objects
to never be bigger than a zone.
- Modified ZoneManager to have a new internal DynamicZoneRange that can
support objects of virtually any size relative to zone size. (Subject
to positional bit resolution, etc.)
- Added a (hopefully temporary) ZoneManager.setSupportLargeObjects() that
defaults to false. When true this will use the new DynamicZoneRange.
This defaults to false because the older (uglier) ZoneRange code has
had a LOT more real world testing. Note: the new code is actually way
cleaner and more elegant.
- Modified the “received acks” watchdog in StateWriter to take message ID lag
into account. This should fix the cases where the exception would be
thrown for cases where client ACKs are just lagging by a wide margin.
- Upgraded to SimMath 1.4.0 to get the new IntRangeSet for receved acks tracking.
- Converted the tracked ACK message ID sets to IntRangeSets for efficient storage
and processing. (During normal processing, ACK IDs will almost always be
a single contiguous range so a good candidate for IntRangeSet: one entry)
- Fixed a bug in SentState message writing/receiving where more than 255 ACK
IDs was causing overflow and randomly lost acks. (Fixed by sending ranges
instead of every individual ACK set.) This also fixed a message size
Large object support being the other hidden gem in there… along with a bunch of stability bug fixes related to message ACKs.
Finally, a small bug fix release for Zay-ES-Net that didn’t warrant its own contrib/zay-es post:
- Refixed the HostedEntityData.getStringInfo() to send back a -1 if the ID doesn’t
exist so that the client side has the proper information to handle it as a
non-cacheable miss. (Previous fix still threw NPEs.)