fix(unreal): Replace FTickableGameObject with FTSTicker and add compressed message buffering#4006
Closed
brougkr wants to merge 1 commit intoclockworklabs:masterfrom
Closed
Conversation
…essed message buffering - Replaced FTickableGameObject with FTSTicker to fix initialization order issues - Added CompressedBufferMutex and buffering for fragmented WebSocket messages - Enhanced gzip validation to detect incomplete data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 task
3 tasks
Contributor
pull Bot
pushed a commit
to soitun/SpacetimeDB
that referenced
this pull request
Apr 23, 2026
…ckworklabs#4835) # Description of Changes This is a copy of clockworklabs#4006 with only the updates to the way Unreal handles ticks. As per @brougkr findings: - **FTickableGameObject initialization order bug** - Replaced with FTSTicker for reliable tick registration: - Removed FTickableGameObject inheritance - Added FTSTicker::FDelegateHandle for manual tick registration - Added destructor to clean up ticker registration - Added OnTickerTick() method ### Issue FTickableGameObject registers itself in its constructor BEFORE UDbConnectionBase's constructor body runs. Even with ETickableTickType::Never, UE's GENERATED_BODY() macro can interfere with base class initialization order, causing the default constructor to be called instead. # API and ABI breaking changes - Refactor of an underlying component of the SDK and non-breaking. # Expected complexity level and risk 2 - This changes the structure of how the database tooling can auto-tick, but is invisible to the developer # Testing As this changes a core feature I tested all aspects: - [x] Reproduced the bug and confirmed against `master` and this branch to see the fix working - [x] Ran full suite of Unreal tests - [x] Manually tested Unreal Blackholio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes two issues in the Unreal SDK:
Problem
Issue 1: FTickableGameObject
FTickableGameObject registers itself in its constructor BEFORE UDbConnectionBase's constructor body runs. Even with ETickableTickType::Never, UE's GENERATED_BODY() macro can interfere with base class initialization order, causing the default constructor to be called instead.
Issue 2: Fragmented Messages
Large compressed messages from SpacetimeDB can arrive fragmented across multiple WebSocket frames. The current implementation assumes complete messages arrive in single frames, causing decompression failures.
Solution
FTSTicker Replacement
Compressed Message Buffering
Changes
Public/Connection/DbConnectionBase.h- Class declaration changes, new membersPrivate/Connection/DbConnectionBase.cpp- Implementation of buffering and ticker systemTesting
Tested in production Unreal 5.7 project with SpacetimeDB backend. Fixes previously observed: