fix(unreal): Replace FTickableGameObject with FTSTicker and add compressed message buffering #4006
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: