HelloMsg
Carries the hello protocol message.
Nebula · Packages/com.1by3.nebula/Runtime/Protocol/Messages.cspublic struct HelloMsgCarries the hello protocol message.
Fields
ProtocolVersion
public const ushort ProtocolVersion = 30;The wire protocol version used by this build.
MinProtocolVersion
public const ushort MinProtocolVersion = 29;The oldest client protocol the gateway accepts: 29, one behind (the window is N and N-1, docs/compatibility-policy.md D1). Protocol 30 (motion fidelity on the identity stream) is additive: an EntityStateEntry gains a byte of TransformFieldsExt after its field mask, an angular velocity, and 15-bit smallest-three rotations, which a gateway writes only to clients that negotiated 30 (MotionFidelityVersion); a client of 29 is sent the entries it always was. Clients of 28 and older are refused. Protocol 29 (tick-stamped server events on predicted entities, the Prediction guide) is additive: OwnerStateMsg gains a trailing events section that a gateway writes only to clients that negotiated 29 (ServerEventsVersion), so a client of 28 is sent exactly the bytes it was and predicts without the events. Protocol 28 (portals, docs/portals.md D45, D46) closes the window: its new messages (MsgId.Portals, MsgId.PortalLinks, MsgId.PortalWarm) are additive bytes, but their meaning is not. A client of 27 would be sent replicas of scopes it believes hidden, would never draw them posed, and would predict its pawn into an aperture it does not know is solid. Clients of 27 and older are refused with JoinRejectReason.ProtocolUnsupported and must be rebuilt. Protocol 27 (an instance's pose against its host, docs/scope-frames.md D12) and 26 (the far relevance tier, docs/interest-management.md §16) were additive; 25 (driven vehicles, docs/driven-vehicles.md) added a message a client sends only while it drives something (MsgId.DriveInput). Gateway-to-worker and worker-to-worker connections require ProtocolVersion exactly.
MotionFidelityVersion
public const ushort MotionFidelityVersion = 30;The first protocol whose clients are sent EntityStateEntry extensions (TransformFieldsExt).
ServerEventsVersion
public const ushort ServerEventsVersion = 29;The first protocol whose clients are sent the server events trailing OwnerStateMsg.
FarEntitiesVersion
public const ushort FarEntitiesVersion = 26;The first protocol whose clients are sent MsgId.FarEntities.
Role
public PeerRole Role;Id
public string Id;Index
public uint Index;Flags
public HelloFlags Flags;Token
public string Token;Client only: the token that says who the player is. An OpenID Connect ID token from a provider the mesh trusts (NebulaConfig.AuthIssuers), the token a gateway issued in an earlier WelcomeMsg, or empty to ask for a new anonymous identity. For a gateway or worker peer it is the infrastructure credential instead (MeshPeerAuth), proving the peer holds the mesh token.
Session
public string Session;Client only: the session token from the last WelcomeMsg, presented when reconnecting so the gateway (any gateway of the mesh) reclaims the same session and the worker keeps the pawn. Empty on a first connection.
Incarnation
public uint Incarnation;Gateway and worker peers: a number that changes every time the process starts, so a peer that sees the same id twice can tell a restart from a reconnect. Clients send 0.
ScopeKey
public string ScopeKey;Client only: the simulation scope to be placed in, as an opaque key (EntityLocation.ScopeKey). Empty selects the public world. The gateway spawns the player only into containers of that scope, and holds the join while the scope is not ready (docs/scope-activation.md §5). It does not activate the scope: whoever sent the player to the key is the one that called IControlPlane.ActivateScope.
Version
public ushort Version;The protocol version the peer announces. Write substitutes ProtocolVersion when this value is zero.
GameContentVersion
public uint GameContentVersion;The client's game content version, set by NebulaConfig.GameContentVersion. The gateway checks it against its configured range unless the gateway's content version is zero. An incompatible value is refused with JoinRejectReason.ContentVersionMismatch.
Methods
Write
public void Write(NetworkWriter w);Read
public static HelloMsg Read(NetworkReader r);