Skip to content
Brass Orrery

Orrery Terrain · OrreryTerrainCore module · struct

Native::

FJoinHead

Experimental

What the join stream's first frame says: the position S, the checkpoint there, and where the save's parts lie.

Declaration

struct FJoinHead
Header
#include "Native/Net/NetJoin.h"
Module
PublicDependencyModuleNames.Add("OrreryTerrainCore"); in your module’s Build.cs.
Stability
Experimental: supported, may change in a minor version, with a changelog line.

Description

The joiner checks StateHash and SyncHash right after its load, so a wrong snapshot is found before any record applies.

Properties

NameTypeDefaultMeaning
SeqFNetSeq0

S: the newest record the snapshot includes; the joiner's replica expects S + 1 next.

SyncHashuint64_t0

FTerrainWorld::SyncHash at S.

SculptDigestuint64_t0

The authority's FSculptReplayer::Digest at S (the joiner's seed).

NextFeatureIdFFeatureId0

At S, burnt ids included.

StateHashuint64_t0

FTerrainSerialization::StateHash at S.

FileSizeuint64_t0

Bytes of the save.

FileHashuint64_t0

The save's trailer (FTerrainSaveInfo::FileHash).

CodeAreaOffsetuint64_t0

Where the sculpt codes start in the save; the rest is the load set.

CodeAreaSizeuint64_t0—
PageTilesuint8_t0

The joiner page edge the codes were ordered by (FJoinStreamConfig::PageTiles, at most 255). A paged joiner with another refuses the join (EJoinLoad::PageTilesMismatch).

Strokesstd::vector<FJoinOpenStroke>—

Every stroke open at S, several authors' at once, ascending (Author, Stroke): the order is canonical, so two writers at the same S send the same head.

Empty when none is open.

Masksstd::vector<FJoinMaskRef>—

The brush masks the stream's mask frames carry, ascending hash, at most kJoinMaxMaskBytes in all: the masks the session announced at or before S that the joiner does not hold, as FJoinStreamConfig::Masks names them.

LimitsFSculptLimits—

The authority's sculpt limits at S.

The joiner's replica checks and replays every record under these, never under its own settings: a record the authority accepted applies the same everywhere, KeepOutMargin_mm included, so a client configured with other limits cannot desync (StartJoinReplica).

CacheUseEJoinCacheUseEJoinCacheUse::None

How this stream uses the save the joiner holds.