system

package
v0.12.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2026 License: LGPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HeartbeatSystem

func HeartbeatSystem(state *HeartbeatSystemState)

HeartbeatSystem processes heartbeat commands and removes stale players.

func InitSystem

func InitSystem(state *InitSystemState)

InitSystem creates singleton index entities. Runs once at tick 0.

func LobbySystem

func LobbySystem(state *LobbySystemState)

LobbySystem processes lobby commands.

func SetConfig

func SetConfig(config component.ConfigComponent)

SetConfig stores the configuration for the init system to use.

func SetProvider

func SetProvider(provider LobbyProvider)

SetProvider stores the provider for the system to use.

Types

type AssignShardCommand

type AssignShardCommand struct {
	LobbyID   string              `json:"lobby_id"`
	RequestID string              `json:"request_id"`
	GameWorld cardinal.OtherWorld `json:"game_world"`
	Reason    string              `json:"reason,omitempty"`
}

AssignShardCommand is sent by an external orchestrator to complete a session start that is waiting in SessionStateAwaitingAllocation. The lobby writes GameWorld directly onto the lobby component, transitions to SessionStateInSession, and dispatches NotifySessionStartCommand. The orchestrator is responsible for providing a complete GameWorld address (Region, Organization, Project, ShardID).

If GameWorld.ShardID is empty, the assignment is treated as a failure: the lobby returns to SessionStateIdle and a failure StartSessionResult is emitted with Reason as the failure message.

RequestID must equal the lobby's current Session.PendingRequestID (which the orchestrator reads from the LobbyComponent). Mismatched RequestIDs are rejected; this rejects late duplicate or stale commands that arrive after the original pending cycle has already been completed or cancelled.

func (AssignShardCommand) Name

func (AssignShardCommand) Name() string

Name returns the command name.

type CreateLobbyCommand

type CreateLobbyCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
	// Preset is the label of a server-registered team configuration.
	Preset string `json:"preset"`
	// PlayerPassthroughData is custom data for the creating player, forwarded to game shard.
	PlayerPassthroughData map[string]any `json:"player_passthrough_data,omitempty"`
	// SessionPassthroughData is custom data for the lobby session, forwarded to game shard.
	SessionPassthroughData map[string]any `json:"session_passthrough_data,omitempty"`
}

CreateLobbyCommand creates a new lobby with the sender as leader. The server resolves Preset against lobby.Config.LobbyPresets and rejects unknown or empty preset labels. Clients cannot supply arbitrary team configuration; the server is the source of truth.

The target game shard is not specified here: it is assigned later by an external orchestrator via AssignShardCommand when the session starts.

func (CreateLobbyCommand) Name

func (CreateLobbyCommand) Name() string

Name returns the command name.

type CreateLobbyResult

type CreateLobbyResult struct {
	RequestID string                    `json:"request_id"`
	IsSuccess bool                      `json:"is_success"`
	Message   string                    `json:"message"`
	Lobby     component.LobbyComponent  `json:"lobby,omitempty"`
	Player    component.PlayerComponent `json:"player,omitempty"`
}

CreateLobbyResult is sent back to the client after CreateLobbyCommand.

func (CreateLobbyResult) Name

func (r CreateLobbyResult) Name() string

Name returns the request-prefixed event name.

type DefaultProvider

type DefaultProvider struct{}

DefaultProvider provides default implementations.

func (DefaultProvider) GenerateInviteCode

func (DefaultProvider) GenerateInviteCode(lobby *component.LobbyComponent) string

GenerateInviteCode generates a 6-character invite code using Hash(LobbyID + Now()).

func (DefaultProvider) ValidateJoin

ValidateJoin accepts all joins by default. Games override this to enforce per-game requirements (version, region, level, etc.).

type GenerateInviteCodeCommand

type GenerateInviteCodeCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
}

GenerateInviteCodeCommand generates a new invite code (leader only).

func (GenerateInviteCodeCommand) Name

Name returns the command name.

type GenerateInviteCodeResult

type GenerateInviteCodeResult struct {
	RequestID  string `json:"request_id"`
	IsSuccess  bool   `json:"is_success"`
	Message    string `json:"message"`
	InviteCode string `json:"invite_code,omitempty"`
}

GenerateInviteCodeResult is sent back to the client after GenerateInviteCodeCommand.

func (GenerateInviteCodeResult) Name

Name returns the request-prefixed event name.

type GetAllPlayersCommand

type GetAllPlayersCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
}

GetAllPlayersCommand fetches all players in the caller's lobby.

func (GetAllPlayersCommand) Name

Name returns the command name.

type GetAllPlayersResult

type GetAllPlayersResult struct {
	RequestID string                      `json:"request_id"`
	IsSuccess bool                        `json:"is_success"`
	Message   string                      `json:"message"`
	Players   []component.PlayerComponent `json:"players,omitempty"`
}

GetAllPlayersResult is sent back to the client after GetAllPlayersCommand.

func (GetAllPlayersResult) Name

func (r GetAllPlayersResult) Name() string

Name returns the request-prefixed event name.

type GetLobbyCommand

type GetLobbyCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
}

GetLobbyCommand fetches the caller's current lobby snapshot. Used by reconnecting clients to restore their full view (teams, session state, assigned GameWorld, etc.) in a single round-trip.

func (GetLobbyCommand) Name

func (GetLobbyCommand) Name() string

Name returns the command name.

type GetLobbyResult

type GetLobbyResult struct {
	RequestID string                   `json:"request_id"`
	IsSuccess bool                     `json:"is_success"`
	Message   string                   `json:"message"`
	Lobby     component.LobbyComponent `json:"lobby,omitempty"`
}

GetLobbyResult is sent back to the client after GetLobbyCommand.

func (GetLobbyResult) Name

func (r GetLobbyResult) Name() string

Name returns the request-prefixed event name.

type GetPlayerCommand

type GetPlayerCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
	PlayerID  string `json:"player_id"`  // Target player ID (empty = self)
}

GetPlayerCommand fetches a specific player's component data.

func (GetPlayerCommand) Name

func (GetPlayerCommand) Name() string

Name returns the command name.

type GetPlayerResult

type GetPlayerResult struct {
	RequestID string                    `json:"request_id"`
	IsSuccess bool                      `json:"is_success"`
	Message   string                    `json:"message"`
	Player    component.PlayerComponent `json:"player,omitempty"`
}

GetPlayerResult is sent back to the client after GetPlayerCommand.

func (GetPlayerResult) Name

func (r GetPlayerResult) Name() string

Name returns the request-prefixed event name.

type HeartbeatCommand

type HeartbeatCommand struct {
}

HeartbeatCommand is sent periodically by clients to indicate they're still connected. Players who don't send heartbeats within the timeout period are automatically removed.

func (HeartbeatCommand) Name

func (HeartbeatCommand) Name() string

Name returns the command name.

type HeartbeatSystemState

type HeartbeatSystemState struct {
	cardinal.BaseSystemState

	// Commands
	HeartbeatCmds cardinal.WithCommand[HeartbeatCommand]

	// Entities
	Lobbies cardinal.Contains[struct {
		Lobby cardinal.Ref[component.LobbyComponent]
	}]

	Players cardinal.Contains[struct {
		Player cardinal.Ref[component.PlayerComponent]
	}]

	LobbyIndexes cardinal.Contains[struct {
		Index cardinal.Ref[component.LobbyIndexComponent]
	}]

	Configs cardinal.Contains[struct {
		Config cardinal.Ref[component.ConfigComponent]
	}]

	// Events
	PlayerTimedOutEvents cardinal.WithEvent[PlayerTimedOutEvent]
	LeaderChangedEvents  cardinal.WithEvent[LeaderChangedEvent]
	LobbyDeletedEvents   cardinal.WithEvent[LobbyDeletedEvent]
	StartSessionResults  cardinal.WithEvent[StartSessionResult]
}

HeartbeatSystemState is the state for the heartbeat system.

type InitSystemState

type InitSystemState struct {
	cardinal.BaseSystemState

	LobbyIndexes cardinal.Contains[struct {
		Index cardinal.Ref[component.LobbyIndexComponent]
	}]

	Configs cardinal.Contains[struct {
		Config cardinal.Ref[component.ConfigComponent]
	}]
}

InitSystemState is the state for the init system.

type InviteCodeGeneratedEvent

type InviteCodeGeneratedEvent struct {
	LobbyID    string `json:"lobby_id"`
	InviteCode string `json:"invite_code"`
}

InviteCodeGeneratedEvent is emitted when a new invite code is generated.

func (InviteCodeGeneratedEvent) Name

Name returns the event name.

type JoinLobbyCommand

type JoinLobbyCommand struct {
	RequestID  string `json:"request_id"`        // For matching request/response
	InviteCode string `json:"invite_code"`       // Required: invite code to join
	TeamID     string `json:"team_id,omitempty"` // Optional: team to join by ID (joins first available if empty)
	// PlayerPassthroughData is custom data for the joining player, forwarded to game shard.
	PlayerPassthroughData map[string]any `json:"player_passthrough_data,omitempty"`
}

JoinLobbyCommand joins an existing lobby via invite code.

func (JoinLobbyCommand) Name

func (JoinLobbyCommand) Name() string

Name returns the command name.

type JoinLobbyResult

type JoinLobbyResult struct {
	RequestID   string                      `json:"request_id"`
	IsSuccess   bool                        `json:"is_success"`
	Message     string                      `json:"message"`
	Lobby       component.LobbyComponent    `json:"lobby,omitempty"`
	PlayersList []component.PlayerComponent `json:"players_list,omitempty"`
}

JoinLobbyResult is sent back to the client after JoinLobbyCommand.

func (JoinLobbyResult) Name

func (r JoinLobbyResult) Name() string

Name returns the request-prefixed event name.

type JoinTeamCommand

type JoinTeamCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
	TeamID    string `json:"team_id"`
}

JoinTeamCommand moves a player to a different team.

func (JoinTeamCommand) Name

func (JoinTeamCommand) Name() string

Name returns the command name.

type JoinTeamResult

type JoinTeamResult struct {
	RequestID string                    `json:"request_id"`
	IsSuccess bool                      `json:"is_success"`
	Message   string                    `json:"message"`
	Player    component.PlayerComponent `json:"player,omitempty"`
}

JoinTeamResult is sent back to the client after JoinTeamCommand.

func (JoinTeamResult) Name

func (r JoinTeamResult) Name() string

Name returns the request-prefixed event name.

type KickPlayerCommand

type KickPlayerCommand struct {
	RequestID      string `json:"request_id"` // For matching request/response
	TargetPlayerID string `json:"target_player_id"`
}

KickPlayerCommand kicks a player from the lobby (leader only).

func (KickPlayerCommand) Name

func (KickPlayerCommand) Name() string

Name returns the command name.

type KickPlayerResult

type KickPlayerResult struct {
	RequestID string `json:"request_id"`
	IsSuccess bool   `json:"is_success"`
	Message   string `json:"message"`
}

KickPlayerResult is sent back to the client after KickPlayerCommand.

func (KickPlayerResult) Name

func (r KickPlayerResult) Name() string

Name returns the request-prefixed event name.

type LeaderChangedEvent

type LeaderChangedEvent struct {
	LobbyID     string `json:"lobby_id"`
	OldLeaderID string `json:"old_leader_id"`
	NewLeaderID string `json:"new_leader_id"`
}

LeaderChangedEvent is emitted when leadership is transferred.

func (LeaderChangedEvent) Name

func (LeaderChangedEvent) Name() string

Name returns the event name.

type LeaveLobbyCommand

type LeaveLobbyCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
}

LeaveLobbyCommand leaves the current lobby.

func (LeaveLobbyCommand) Name

func (LeaveLobbyCommand) Name() string

Name returns the command name.

type LeaveLobbyResult

type LeaveLobbyResult struct {
	RequestID string `json:"request_id"`
	IsSuccess bool   `json:"is_success"`
	Message   string `json:"message"`
}

LeaveLobbyResult is sent back to the client after LeaveLobbyCommand.

func (LeaveLobbyResult) Name

func (r LeaveLobbyResult) Name() string

Name returns the request-prefixed event name.

type LobbyCreatedEvent

type LobbyCreatedEvent struct {
	LobbyID    string `json:"lobby_id"`
	LeaderID   string `json:"leader_id"`
	InviteCode string `json:"invite_code"`
}

LobbyCreatedEvent is emitted when a lobby is created.

func (LobbyCreatedEvent) Name

func (LobbyCreatedEvent) Name() string

Name returns the event name.

type LobbyDeletedEvent

type LobbyDeletedEvent struct {
	LobbyID string `json:"lobby_id"`
}

LobbyDeletedEvent is emitted when a lobby is deleted.

func (LobbyDeletedEvent) Name

func (LobbyDeletedEvent) Name() string

Name returns the event name.

type LobbyProvider

type LobbyProvider interface {
	// GenerateInviteCode generates a custom invite code for the lobby.
	GenerateInviteCode(lobby *component.LobbyComponent) string

	// ValidateJoin runs game-specific guards on a JoinLobbyCommand after
	// the generic guards (already-in-lobby, invalid code, in-session)
	// pass and before team selection. Return ok=false with a non-empty
	// reason to reject the join; the plugin emits a JoinLobbyResult
	// failure carrying that reason. Return ok=true to allow.
	ValidateJoin(lobby *component.LobbyComponent, cmd JoinLobbyCommand) (ok bool, reason string)
}

LobbyProvider defines customizable behavior for the lobby system.

type LobbySystemState

type LobbySystemState struct {
	cardinal.BaseSystemState

	// Commands
	CreateLobbyCmds              cardinal.WithCommand[CreateLobbyCommand]
	JoinLobbyCmds                cardinal.WithCommand[JoinLobbyCommand]
	JoinTeamCmds                 cardinal.WithCommand[JoinTeamCommand]
	LeaveLobbyCmds               cardinal.WithCommand[LeaveLobbyCommand]
	SetReadyCmds                 cardinal.WithCommand[SetReadyCommand]
	KickPlayerCmds               cardinal.WithCommand[KickPlayerCommand]
	TransferLeaderCmds           cardinal.WithCommand[TransferLeaderCommand]
	StartSessionCmds             cardinal.WithCommand[StartSessionCommand]
	NotifySessionEndCmds         cardinal.WithCommand[NotifySessionEndCommand]
	AssignShardCmds              cardinal.WithCommand[AssignShardCommand]
	GenerateInviteCodeCmds       cardinal.WithCommand[GenerateInviteCodeCommand]
	UpdateSessionPassthroughCmds cardinal.WithCommand[UpdateSessionPassthroughCommand]
	UpdatePlayerPassthroughCmds  cardinal.WithCommand[UpdatePlayerPassthroughCommand]
	GetPlayerCmds                cardinal.WithCommand[GetPlayerCommand]
	GetAllPlayersCmds            cardinal.WithCommand[GetAllPlayersCommand]
	GetLobbyCmds                 cardinal.WithCommand[GetLobbyCommand]

	// Entities
	Lobbies cardinal.Contains[struct {
		Lobby cardinal.Ref[component.LobbyComponent]
	}]

	Players cardinal.Contains[struct {
		Player cardinal.Ref[component.PlayerComponent]
	}]

	LobbyIndexes cardinal.Contains[struct {
		Index cardinal.Ref[component.LobbyIndexComponent]
	}]

	Configs cardinal.Contains[struct {
		Config cardinal.Ref[component.ConfigComponent]
	}]

	// Events (Broadcast)
	LobbyCreatedEvents              cardinal.WithEvent[LobbyCreatedEvent]
	PlayerJoinedEvents              cardinal.WithEvent[PlayerJoinedEvent]
	PlayerLeftEvents                cardinal.WithEvent[PlayerLeftEvent]
	PlayerKickedEvents              cardinal.WithEvent[PlayerKickedEvent]
	PlayerReadyEvents               cardinal.WithEvent[PlayerReadyEvent]
	PlayerChangedTeamEvents         cardinal.WithEvent[PlayerChangedTeamEvent]
	LeaderChangedEvents             cardinal.WithEvent[LeaderChangedEvent]
	SessionStartedEvents            cardinal.WithEvent[SessionStartedEvent]
	SessionAwaitingAllocationEvents cardinal.WithEvent[SessionAwaitingAllocationEvent]
	SessionEndedEvents              cardinal.WithEvent[SessionEndedEvent]
	InviteCodeGeneratedEvents       cardinal.WithEvent[InviteCodeGeneratedEvent]
	LobbyDeletedEvents              cardinal.WithEvent[LobbyDeletedEvent]
	SessionPassthroughUpdatedEvents cardinal.WithEvent[SessionPassthroughUpdatedEvent]
	PlayerPassthroughUpdatedEvents  cardinal.WithEvent[PlayerPassthroughUpdatedEvent]

	// CommandResult (request-prefixed responses)
	CreateLobbyResults              cardinal.WithEvent[CreateLobbyResult]
	JoinLobbyResults                cardinal.WithEvent[JoinLobbyResult]
	JoinTeamResults                 cardinal.WithEvent[JoinTeamResult]
	LeaveLobbyResults               cardinal.WithEvent[LeaveLobbyResult]
	SetReadyResults                 cardinal.WithEvent[SetReadyResult]
	KickPlayerResults               cardinal.WithEvent[KickPlayerResult]
	TransferLeaderResults           cardinal.WithEvent[TransferLeaderResult]
	StartSessionResults             cardinal.WithEvent[StartSessionResult]
	GenerateInviteCodeResults       cardinal.WithEvent[GenerateInviteCodeResult]
	UpdateSessionPassthroughResults cardinal.WithEvent[UpdateSessionPassthroughResult]
	UpdatePlayerPassthroughResults  cardinal.WithEvent[UpdatePlayerPassthroughResult]
	GetPlayerResults                cardinal.WithEvent[GetPlayerResult]
	GetAllPlayersResults            cardinal.WithEvent[GetAllPlayersResult]
	GetLobbyResults                 cardinal.WithEvent[GetLobbyResult]
}

LobbySystemState is the state for the lobby system.

type NotifySessionEndCommand

type NotifySessionEndCommand struct {
	LobbyID string `json:"lobby_id"`
}

NotifySessionEndCommand is sent from game shard to lobby when session ends.

func (NotifySessionEndCommand) Name

Name returns the command name.

type NotifySessionStartCommand

type NotifySessionStartCommand struct {
	Lobby      component.LobbyComponent    `json:"lobby"`
	LobbyWorld cardinal.OtherWorld         `json:"lobby_world"`
	Players    []component.PlayerComponent `json:"players"`
}

NotifySessionStartCommand is sent to game shard when a session starts.

func (NotifySessionStartCommand) Name

Name returns the command name.

type PlayerChangedTeamEvent

type PlayerChangedTeamEvent struct {
	LobbyID   string                    `json:"lobby_id"`
	OldTeamID string                    `json:"old_team_id"`
	NewTeamID string                    `json:"new_team_id"`
	Player    component.PlayerComponent `json:"player"`
}

PlayerChangedTeamEvent is emitted when a player changes team.

func (PlayerChangedTeamEvent) Name

Name returns the event name.

type PlayerJoinedEvent

type PlayerJoinedEvent struct {
	LobbyID string                    `json:"lobby_id"`
	TeamID  string                    `json:"team_id"`
	Player  component.PlayerComponent `json:"player"`
}

PlayerJoinedEvent is emitted when a player joins a lobby.

func (PlayerJoinedEvent) Name

func (PlayerJoinedEvent) Name() string

Name returns the event name.

type PlayerKickedEvent

type PlayerKickedEvent struct {
	LobbyID  string `json:"lobby_id"`
	PlayerID string `json:"player_id"`
	KickerID string `json:"kicker_id"`
}

PlayerKickedEvent is emitted when a player is kicked.

func (PlayerKickedEvent) Name

func (PlayerKickedEvent) Name() string

Name returns the event name.

type PlayerLeftEvent

type PlayerLeftEvent struct {
	LobbyID  string `json:"lobby_id"`
	PlayerID string `json:"player_id"`
}

PlayerLeftEvent is emitted when a player leaves a lobby.

func (PlayerLeftEvent) Name

func (PlayerLeftEvent) Name() string

Name returns the event name.

type PlayerPassthroughUpdatedEvent

type PlayerPassthroughUpdatedEvent struct {
	LobbyID string                    `json:"lobby_id"`
	Player  component.PlayerComponent `json:"player"`
}

PlayerPassthroughUpdatedEvent is emitted when a player's passthrough data is updated.

func (PlayerPassthroughUpdatedEvent) Name

Name returns the event name.

type PlayerReadyEvent

type PlayerReadyEvent struct {
	LobbyID string                    `json:"lobby_id"`
	Player  component.PlayerComponent `json:"player"`
}

PlayerReadyEvent is emitted when a player changes ready status.

func (PlayerReadyEvent) Name

func (PlayerReadyEvent) Name() string

Name returns the event name.

type PlayerTimedOutEvent

type PlayerTimedOutEvent struct {
	LobbyID  string `json:"lobby_id"`
	PlayerID string `json:"player_id"`
}

PlayerTimedOutEvent is emitted when a player is removed due to missed heartbeats.

func (PlayerTimedOutEvent) Name

func (PlayerTimedOutEvent) Name() string

Name returns the event name.

type SessionAwaitingAllocationEvent

type SessionAwaitingAllocationEvent struct {
	LobbyID string `json:"lobby_id"`
}

SessionAwaitingAllocationEvent is emitted when a session is awaiting shard assignment. External orchestrators listen for this event and respond with an AssignShardCommand to complete the session start.

func (SessionAwaitingAllocationEvent) Name

Name returns the event name.

type SessionEndedEvent

type SessionEndedEvent struct {
	LobbyID string `json:"lobby_id"`
}

SessionEndedEvent is emitted when a session ends.

func (SessionEndedEvent) Name

func (SessionEndedEvent) Name() string

Name returns the event name.

type SessionPassthroughUpdatedEvent

type SessionPassthroughUpdatedEvent struct {
	LobbyID         string         `json:"lobby_id"`
	PassthroughData map[string]any `json:"passthrough_data"`
}

SessionPassthroughUpdatedEvent is emitted when session passthrough data is updated.

func (SessionPassthroughUpdatedEvent) Name

Name returns the event name.

type SessionStartedEvent

type SessionStartedEvent struct {
	LobbyID   string              `json:"lobby_id"`
	GameWorld cardinal.OtherWorld `json:"game_world"`
}

SessionStartedEvent is emitted when a session starts. Carries the assigned game shard address so every player in the lobby (not just the session starter) learns which gameplay shard to connect to without a follow-up query.

func (SessionStartedEvent) Name

func (SessionStartedEvent) Name() string

Name returns the event name.

type SetReadyCommand

type SetReadyCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
	IsReady   bool   `json:"is_ready"`
}

SetReadyCommand sets the player's ready status.

func (SetReadyCommand) Name

func (SetReadyCommand) Name() string

Name returns the command name.

type SetReadyResult

type SetReadyResult struct {
	RequestID string                    `json:"request_id"`
	IsSuccess bool                      `json:"is_success"`
	Message   string                    `json:"message"`
	Player    component.PlayerComponent `json:"player,omitempty"`
}

SetReadyResult is sent back to the client after SetReadyCommand.

func (SetReadyResult) Name

func (r SetReadyResult) Name() string

Name returns the request-prefixed event name.

type StartSessionCommand

type StartSessionCommand struct {
	RequestID string `json:"request_id"` // For matching request/response
}

StartSessionCommand starts the session (leader only). The corresponding StartSessionResult is emitted asynchronously, typically several ticks after this command is accepted, once an orchestrator responds with AssignShardCommand. Clients must not set short timeouts on StartSessionResult.

func (StartSessionCommand) Name

func (StartSessionCommand) Name() string

Name returns the command name.

type StartSessionPayload

type StartSessionPayload = NotifySessionStartCommand

StartSessionPayload is an alias for NotifySessionStartCommand for documentation clarity.

type StartSessionResult

type StartSessionResult struct {
	RequestID string              `json:"request_id"`
	IsSuccess bool                `json:"is_success"`
	Message   string              `json:"message"`
	GameWorld cardinal.OtherWorld `json:"game_world,omitempty"`
}

StartSessionResult is sent back to the client after StartSessionCommand. Emitted asynchronously — may arrive several ticks after the command, once the orchestrator assigns a game shard via AssignShardCommand. On success, GameWorld holds the assigned shard address so the client can connect without an extra query. Zero-valued on failure.

func (StartSessionResult) Name

func (r StartSessionResult) Name() string

Name returns the request-prefixed event name.

type TeamConfig

type TeamConfig = component.TeamConfig

TeamConfig is an alias for component.TeamConfig to preserve the existing external type path (lobby.TeamConfig).

type TransferLeaderCommand

type TransferLeaderCommand struct {
	RequestID      string `json:"request_id"` // For matching request/response
	TargetPlayerID string `json:"target_player_id"`
}

TransferLeaderCommand transfers leadership to another player.

func (TransferLeaderCommand) Name

Name returns the command name.

type TransferLeaderResult

type TransferLeaderResult struct {
	RequestID string `json:"request_id"`
	IsSuccess bool   `json:"is_success"`
	Message   string `json:"message"`
}

TransferLeaderResult is sent back to the client after TransferLeaderCommand.

func (TransferLeaderResult) Name

func (r TransferLeaderResult) Name() string

Name returns the request-prefixed event name.

type UpdatePlayerPassthroughCommand

type UpdatePlayerPassthroughCommand struct {
	RequestID       string         `json:"request_id"` // For matching request/response
	PassthroughData map[string]any `json:"passthrough_data"`
}

UpdatePlayerPassthroughCommand updates the player's own passthrough data.

func (UpdatePlayerPassthroughCommand) Name

Name returns the command name.

type UpdatePlayerPassthroughResult

type UpdatePlayerPassthroughResult struct {
	RequestID string                    `json:"request_id"`
	IsSuccess bool                      `json:"is_success"`
	Message   string                    `json:"message"`
	Player    component.PlayerComponent `json:"player,omitempty"`
}

UpdatePlayerPassthroughResult is sent back to the client after UpdatePlayerPassthroughCommand.

func (UpdatePlayerPassthroughResult) Name

Name returns the request-prefixed event name.

type UpdateSessionPassthroughCommand

type UpdateSessionPassthroughCommand struct {
	RequestID       string         `json:"request_id"` // For matching request/response
	PassthroughData map[string]any `json:"passthrough_data"`
}

UpdateSessionPassthroughCommand updates the session passthrough data (leader only).

func (UpdateSessionPassthroughCommand) Name

Name returns the command name.

type UpdateSessionPassthroughResult

type UpdateSessionPassthroughResult struct {
	RequestID string `json:"request_id"`
	IsSuccess bool   `json:"is_success"`
	Message   string `json:"message"`
}

UpdateSessionPassthroughResult is sent back to the client after UpdateSessionPassthroughCommand.

func (UpdateSessionPassthroughResult) Name

Name returns the request-prefixed event name.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL