Nebula
Protocol

HelloMsg

Carries the hello protocol message.

generated from the sources
public struct HelloMsg

Carries 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);

On this page