Skip to content

Releases: Simsilica/SimEthereal

SimEthereal version 1.8.0

27 Jan 01:40
Compare
Choose a tag to compare

This is a major bug fix release as previous releases somehow had UDP turned off. This release also fixes a long-standing "warping" issue where clients would lose sync if they moved far enough to skip completely out of their zone range.

Change log:

  • fixed ObjectStateMessages to actually be UDP.
  • fixed a bug in how the ping time was calculated by modifying ClientStateMessage.resetReceivedTime() to take a timestamp instead of getting it directly from System.nanoTime().
  • Converted a println() in ZoneManager to a log.warn() related to exceeding history size watchdog threshold.
  • Fixed a long-standing bug related to objects moving so far that none of their old zones are valid anymore. This left the old StateListener stranded if the object was what gave the state listener its 'center'.
  • Added StateListener.objectWarped() and the NetworkStateListener.objectWarped() implementation to fix the bug mentioned above. This is a breaking change for any apps implementing their own StateListener.

SimEthereal version 1.7.0

06 Apr 00:03
Compare
Choose a tag to compare

Maintenance release with one bug fix and an upgrade to work with gradle 7.4.2. Publishing was also migrated to maven central.

Change log:

  • fixed an ID comparison bug in some watchdog code
  • Upgraded the build to use gradle 7.4.2
  • Migrated publishing to maven central instead of jcenter

SimEthereal version 1.6.0

31 Mar 17:20
Compare
Choose a tag to compare

Incremental release with some bug fixes and new parent+child support.

Version change log:

  • Added parent/child relationships between network shared objects.
  • Fixed a bug in the assertion logic in BufferedHashSet's thread check.

SimEthereal version 1.5.0

27 Apr 21:02
Compare
Choose a tag to compare

Bug fixes and some overhauls of internal processing.

Change log:

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

SimEthereal version 1.4.0

14 Feb 08:39
Compare
Choose a tag to compare

Some minor internal improvements.

Change log:

  • Fixed zone ID calculation for non-uniform grids. See PR #2.
  • Modified ZoneManager to automatically send "no-change" updates for objects it is managing but didn't receive updates for. See PR #5
    (Note: this could seem like a 'breaking change' to any apps relying on objects to auto-expire in this way... just know that doing so was leaving extra garbage around and so not really a solution.)
  • Added a thread-safe BufferedHashSet for creating "one writer, many readers" fast thread safe hash sets.
  • Added a double-buffered thread safe active IDs set to the NetworkStateListener.
  • Added an error log message when updating an object with a bounds bigger than supported by the current grid settings.

SimEthereal version 1.3.0

20 Nov 01:10
Compare
Choose a tag to compare

Bug fix release including several community patches.

Change log:

  • Fixed a bug where the newer state messages would fail if the game hadn't
    already registered Vec3d as a serializable class.
  • Fixed NetworkStateListener to properly pay attention to zone extents.
  • Fixed EtherealHost to pass the specified client zone extents on to the
    NetworkStateListener.
  • Added additional trace logging to NetworkStateListener.
  • Fixed an issue where raw nanoTime() was being used to timestamp messages.
    Now applications can specify their own TimeSource on the server.
    See issue #4.
  • Refactored the TimeSource interface to be just a time provider and added
    a SynchedTimeSource interface to provide the extra drift/offset methods
    that it previously had. RemoteTimeSource now implements SynchedTimeSource.
  • Upgraded to sim-math 1.2.0
  • Set sourceCompatibility to 1.7

SimEtheral 1.2.1

22 Nov 10:24
Compare
Choose a tag to compare
SimEtheral 1.2.1 Pre-release
Pre-release

Mostly incremental improvements but I expanded the API a bit, so it gets a version bump. It also has some different default behavior.

Changes in this version:

  • Added EtherealHost.setStateCollectionInterval() to configure how often
    state is retrieved from the ZoneManager and sent to the clients.
  • Added TimeSource.set/getOffset() to make it easier for clients to configure
    how far in history they'd like time to represent. Defaults to -100 ms.
  • Expanded ZoneManager's javadoc.
  • Made StateCollector's idle sleep time configurable and exposed it as
    an EtherealHost property.
  • Flipped the StateCollector's update loop to sleep when idle instead of
    only after a valid state collection was made.
  • Added a ConnectionStats object to the NetworkStateListener that currently collects
    the average ping time, percentage of missed ACKs, and the average message size.
  • Modified the StateReceiver to add message size stats to a Statistics tracker. This
    let's clients see the average and total message sizes.
  • Modified the build.gradle to replace the JME version with a specific
    version instead of letting it float. I think alpha4 is generally
    the minimum accepted 3.1 version at this point.
    Did the same for all of the floating version references.

SimEtheral 1.1.1 - Bug fixes and small improvements

15 Aug 07:02
Compare
Choose a tag to compare

This is a small patch release over 1.0.1 that includes a fix for the message splitting bug along with more control over when messages split. There were also several improvements to exception messages.

Release includes:

  • Added an EtherealHost.setConnectionObject() to make it easier
    to set the connections object ID and initial position. The older
    way required some tighter coupling to Ethereal internals.
    Old way to start hosting on a connection:
    getService(EtherealHost.class).startHostingOnConnection(conn);
    getService(EtherealHost.class).getStateListener(conn).setSelf(ship.getId(), new Vec3d());
    New way:
    getService(EtherealHost.class).startHostingOnConnection(conn);
    getService(EtherealHost.class).setConnectionObject(conn, ship.getId(), new Vec3d())
  • Improved an exception message on LocalZoneIndex's out of bounds checking.
  • Improved an exception message in FrameStat's split() regarding a failure to split. The message
    now includes the caller specified limit so we can see if it's even a sane value in these
    error cases.
  • Attempted fix for a message split bug (untested). Based on the logic, there were some
    book-keeping items not properly updated which could lead to exactly the error cases
    reported. Hopefully fixing those calculations fixes the problem but I've also left
    a ton of comments in place.
  • Added a StateWriter.get/setMaxMessageSize() method(s) for controlling the MTU size used
    to calculate when messages are split. So even if the above fix doesn't work then callers
    can effectively turn off the split behavior by setting a huge max message size.
  • Exposed get/setMaxMessageSize() at the NetworkStateListener level so that application code
    might set this value on its own, or even dynamically, based on application-specific
    requirements.

Initial public release.

07 Aug 23:40
Compare
Choose a tag to compare
Pre-release

This is the initial public release of SimEthereal. It has a couple known bugs that will be worked out in v1.0.2 but I wanted to get an initial release out there to coincide with the jcenter upload.