Some new Sim-tools releases: SimMath, SimEthereal, Zay-ES-Net

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.

On github: Release SimMath version 1.4.0 · Simsilica/SimMath · GitHub
And bintray: Package sim-math - simsilica

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
    overflow issue.

Large object support being the other hidden gem in there… along with a bunch of stability bug fixes related to message ACKs.

Github: Release SimEthereal version 1.5.0 · Simsilica/SimEthereal · GitHub
Bintray: Package sim-ethereal - simsilica

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.)

Github: Release Zay-ES-Net release 1.4.1 · jMonkeyEngine-Contributions/zay-es · GitHub
Bintray: Package zay-es-net - simsilica