server

package
v0.12.2 Latest Latest
Warning

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

Go to latest
Published: Aug 29, 2025 License: GPL-3.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const ViceHTTPServerPort = 6502
View Source
const ViceRPCVersion = ViceSerializeVersion
View Source
const ViceSerializeVersion = 41

Version history 0-7 not explicitly recorded 8: STARSPane DCB improvements, added DCB font size control 9: correct STARSColors, so update brightness settings to compensate 10: stop being clever about JSON encoding Waypoint arrays to strings 11: expedite, intercept localizer, fix airspace serialization 12: set 0 DCB brightness to 50 (WAR not setting a default for it) 13: update departure handling for multi-controllers (and rename some members) 14: Aircraft ArrivalHandoffController -> WaypointHandoffController 15: audio engine rewrite 16: cleared/assigned alt for departures, minor nav changes 17: weather intensity default bool 18: STARS ATPA 19: runway waypoints now per-airport 20: "stars_config" and various scenario fields moved there, plus STARSFacilityAdaptation 21: STARS DCB drawing changes, so system list positions changed 22: draw points using triangles, remove some CommandBuffer commands 23: video map format update 24: packages, audio to platform, flight plan processing 25: remove ArrivalGroup/Index from Aircraft 26: make allow_long_scratchpad a single bool 27: rework prefs, videomaps 28: new departure flow 29: TFR cache 30: video map improvements 31: audio squelch for pilot readback 32: VFRs, custom spcs, pilot reported altitude, ... 33: VFRs v2 34: sim/server refactor, signon flow 35: VFRRunways in sim.State, METAR Wind struct changes 36: STARS center representation changes 37: rework STARS flight plan (et al) 38: rework STARS flight plan (et al) ongoing 39: speech v0.1 40: clean up what's transmitted server->client at initial connect/spawn, gob->msgpack 41: sim.State.SimStartTime

View Source
const ViceServerAddress = "vice.pharr.org"
View Source
const ViceServerPort = 8000 + ViceRPCVersion

Variables

View Source
var (
	ErrControllerAlreadySignedIn = errors.New("Controller with that callsign already signed in")
	ErrDuplicateSimName          = errors.New("A sim with that name already exists")
	ErrInvalidCommandSyntax      = errors.New("Invalid command syntax")
	ErrInvalidControllerToken    = errors.New("Invalid controller token")
	ErrInvalidPassword           = errors.New("Invalid password")
	ErrInvalidSSimConfiguration  = errors.New("Invalid SimConfiguration")
	ErrNoNamedSim                = errors.New("No Sim with that name")
	ErrNoSimForControllerToken   = errors.New("No Sim running for controller token")
	ErrRPCTimeout                = errors.New("RPC call timed out")
	ErrRPCVersionMismatch        = errors.New("Client and server RPC versions don't match")
	ErrServerDisconnected        = errors.New("Server disconnected")
)
View Source
var ErrMissingTTSCredentials = errors.New("VICE_GCS_CREDENTIALS not set")
View Source
var ErrTTSUnavailable = errors.New("TTS service unavailable")

Functions

func CreateLaunchConfig

func CreateLaunchConfig(scenario *scenario, scenarioGroup *scenarioGroup) sim.LaunchConfig

CreateLaunchConfig creates a properly initialized LaunchConfig from scenario data

func CreateNewSimConfiguration

func CreateNewSimConfiguration(config *Configuration, scenarioGroup *scenarioGroup, scenarioName string) (*sim.NewSimConfiguration, error)

CreateNewSimConfiguration creates a NewSimConfiguration from scenario components

func LaunchServer

func LaunchServer(config ServerLaunchConfig, lg *log.Logger)

func LaunchServerAsync

func LaunchServerAsync(config ServerLaunchConfig, lg *log.Logger) (int, util.ErrorLogger)

func ListAllScenarios

func ListAllScenarios(scenarioFilename, videoMapFilename string, lg *log.Logger) ([]string, error)

ListAllScenarios returns a sorted list of all available scenarios in TRACON/scenario format

func LoadScenarioGroups

func LoadScenarioGroups(multiControllerOnly bool, extraScenarioFilename string, extraVideoMapFilename string,
	e *util.ErrorLogger, lg *log.Logger) (map[string]map[string]*scenarioGroup, map[string]map[string]*Configuration, map[string]*sim.VideoMapManifest)

LoadScenarioGroups loads all of the available scenarios, both from the scenarios/ directory in the source code distribution as well as, optionally, a scenario file provided on the command line. It doesn't try to do any sort of meaningful error handling but it does try to continue on in the presence of errors; all errors will be printed and the program will exit if there are any. We'd rather force any errors due to invalid scenario definitions to be fixed...

func NewGoogleTTSProvider

func NewGoogleTTSProvider(lg *log.Logger) (sim.TTSProvider, error)

func PostDeserializeSTARSFacilityAdaptation

func PostDeserializeSTARSFacilityAdaptation(s *sim.STARSFacilityAdaptation, e *util.ErrorLogger, sg *scenarioGroup,
	manifest *sim.VideoMapManifest)

func TryDecodeError

func TryDecodeError(e error) error

func TryDecodeErrorString

func TryDecodeErrorString(s string) error

Types

type ACIDSpecifier

type ACIDSpecifier struct {
	ControllerToken string
	ACID            sim.ACID
}

type AcceptHandoffArgs

type AcceptHandoffArgs ACIDSpecifier

type ActivateFlightPlanArgs

type ActivateFlightPlanArgs struct {
	ControllerToken     string
	TrackCallsign       av.ADSBCallsign
	FpACID              sim.ACID
	FlightPlanSpecifier *sim.STARSFlightPlanSpecifier
}

type AircraftCommandsArgs

type AircraftCommandsArgs struct {
	ControllerToken string
	Callsign        av.ADSBCallsign
	Commands        string
}

type AircraftCommandsResult

type AircraftCommandsResult struct {
	ErrorMessage   string
	RemainingInput string
}

If an RPC call returns an error, then the result argument is not returned(!?). So we don't use the error type for syntax errors...

type AircraftSpecifier

type AircraftSpecifier struct {
	ControllerToken string
	Callsign        av.ADSBCallsign
}

type AssociateFlightPlanArgs

type AssociateFlightPlanArgs struct {
	ControllerToken     string
	Callsign            av.ADSBCallsign
	FlightPlanSpecifier sim.STARSFlightPlanSpecifier
}

type CancelHandoffArgs

type CancelHandoffArgs ACIDSpecifier

type ChangeControlPositionArgs

type ChangeControlPositionArgs struct {
	ControllerToken string
	TCP             string
	KeepTracks      bool
}

type Configuration

type Configuration struct {
	ScenarioConfigs  map[string]*SimScenarioConfiguration
	ControlPositions map[string]*av.Controller
	DefaultScenario  string
}

func LookupScenario

func LookupScenario(tracon, scenarioName string, scenarioGroups map[string]map[string]*scenarioGroup, configs map[string]map[string]*Configuration) (*Configuration, *scenarioGroup, error)

LookupScenario finds a scenario configuration by TRACON/scenario name

type ConnectResult

type ConnectResult struct {
	Configurations map[string]map[string]*Configuration
	RunningSims    map[string]*RemoteSim
	HaveTTS        bool
}

type CreateArrivalArgs

type CreateArrivalArgs struct {
	ControllerToken string
	Group           string
	Airport         string
}

type CreateDepartureArgs

type CreateDepartureArgs struct {
	ControllerToken string
	Airport         string
	Runway          string
	Category        string
	Rules           av.FlightRules
}

type CreateFlightPlanArgs

type CreateFlightPlanArgs struct {
	ControllerToken     string
	FlightPlanSpecifier sim.STARSFlightPlanSpecifier
}

type CreateOverflightArgs

type CreateOverflightArgs struct {
	ControllerToken string
	Group           string
}

type CreateRestrictionAreaResultArgs

type CreateRestrictionAreaResultArgs struct {
	Index       int
	StateUpdate sim.StateUpdate
}

type DeleteAircraftArgs

type DeleteAircraftArgs AircraftSpecifier

type DeleteAircraftListArgs

type DeleteAircraftListArgs struct {
	ControllerToken string
	Aircraft        []sim.Aircraft
}

type DeleteFlightPlanArgs

type DeleteFlightPlanArgs ACIDSpecifier

type ForceQLArgs

type ForceQLArgs struct {
	ControllerToken string
	ACID            sim.ACID
	Controller      string
}

type GlobalMessageArgs

type GlobalMessageArgs struct {
	ControllerToken string
	Message         string
}

type GoogleTTSProvider

type GoogleTTSProvider struct {
	// contains filtered or unexported fields
}

GoogleTTSProvider implements sim.TTSProvider using Google Cloud TTS

func (*GoogleTTSProvider) GetAllVoices

func (g *GoogleTTSProvider) GetAllVoices() sim.TTSVoicesFuture

func (*GoogleTTSProvider) TextToSpeech

func (g *GoogleTTSProvider) TextToSpeech(voice sim.Voice, text string) sim.TTSSpeechFuture

type HandoffArgs

type HandoffArgs struct {
	ControllerToken string
	ACID            sim.ACID
	ToTCP           string
}

type HeldDepartureArgs

type HeldDepartureArgs AircraftSpecifier

type LaunchAircraftArgs

type LaunchAircraftArgs struct {
	ControllerToken string
	Aircraft        sim.Aircraft
	DepartureRunway string
}

type ModifyFlightPlanArgs

type ModifyFlightPlanArgs struct {
	ControllerToken     string
	FlightPlanSpecifier sim.STARSFlightPlanSpecifier
	ACID                sim.ACID
}

type NewSimConfiguration

type NewSimConfiguration struct {
	NewSimName   string
	GroupName    string
	ScenarioName string

	Scenario *SimScenarioConfiguration

	TFRs []av.TFR

	TRACONName      string
	RequirePassword bool
	Password        string

	EnforceUniqueCallsignSuffix bool

	AllowInstructorRPO  bool
	Instructor          bool
	DisableTextToSpeech bool
}

func MakeNewSimConfiguration

func MakeNewSimConfiguration() NewSimConfiguration

type NewSimResult

type NewSimResult struct {
	SimState        *sim.State
	ControllerToken string
	SpeechWSPort    int
}

func (*NewSimResult) PruneForClient

func (r *NewSimResult) PruneForClient()

PruneForClient tidies the NewSimResult, removing fields that are not used by client code in order to reduce the amount of bandwidth used to send the NewSimResult to the client.

type PointOutArgs

type PointOutArgs struct {
	ControllerToken string
	ACID            sim.ACID
	Controller      string
}

type RemoteSim

type RemoteSim struct {
	GroupName          string
	ScenarioName       string
	PrimaryController  string
	RequirePassword    bool
	AvailablePositions map[string]av.Controller
	CoveredPositions   map[string]av.Controller
}

type RemoteTTSProvider

type RemoteTTSProvider struct {
	// contains filtered or unexported fields
}

RemoteTTSProvider implements sim.TTSProvider by making RPC calls to a remote server

func NewRemoteTTSProvider

func NewRemoteTTSProvider(serverAddress string, lg *log.Logger) (*RemoteTTSProvider, error)

NewRemoteTTSProvider creates a new RemoteTTSProvider that connects to the specified server

func (*RemoteTTSProvider) GetAllVoices

func (r *RemoteTTSProvider) GetAllVoices() sim.TTSVoicesFuture

GetAllVoices returns all available voices from the remote server, cached after first call

func (*RemoteTTSProvider) TextToSpeech

func (r *RemoteTTSProvider) TextToSpeech(voice sim.Voice, text string) sim.TTSSpeechFuture

TextToSpeech converts text to speech using the remote server

type RepositionTrackArgs

type RepositionTrackArgs struct {
	ControllerToken string
	ACID            sim.ACID        // from
	Callsign        av.ADSBCallsign // to
	Position        math.Point2LL   // to
}

type RestrictionAreaArgs

type RestrictionAreaArgs struct {
	ControllerToken string
	Index           int
	RestrictionArea av.RestrictionArea
}

type ServerLaunchConfig

type ServerLaunchConfig struct {
	Port                int // if 0, finds an open one
	MultiControllerOnly bool
	ExtraScenario       string
	ExtraVideoMap       string
	ServerAddress       string // address to use for remote TTS provider
	IsLocal             bool
}

type SetLaunchConfigArgs

type SetLaunchConfigArgs struct {
	ControllerToken string
	Config          sim.LaunchConfig
}

type SetSimRateArgs

type SetSimRateArgs struct {
	ControllerToken string
	Rate            float32
}

type SimBroadcastMessage

type SimBroadcastMessage struct {
	Password string
	Message  string
}

type SimConnectionConfiguration

type SimConnectionConfiguration struct {
	RemoteSim           string
	Position            string
	Password            string
	Instructor          bool
	DisableTextToSpeech bool
}

type SimManager

type SimManager struct {
	// contains filtered or unexported fields
}

func NewSimManager

func NewSimManager(scenarioGroups map[string]map[string]*scenarioGroup,
	simConfigurations map[string]map[string]*Configuration, manifests map[string]*sim.VideoMapManifest,
	serverAddress string, isLocal bool, lg *log.Logger) *SimManager

func (*SimManager) Add

func (sm *SimManager) Add(as *activeSim, result *NewSimResult, initialTCP string, instructor bool, prespawn bool, disableTextToSpeech bool) error

func (*SimManager) AddLocal

func (sm *SimManager) AddLocal(sim *sim.Sim, result *NewSimResult) error

func (*SimManager) Broadcast

func (sm *SimManager) Broadcast(m *SimBroadcastMessage, _ *struct{}) error

func (*SimManager) Connect

func (sm *SimManager) Connect(version int, result *ConnectResult) error

func (*SimManager) ConnectToSim

func (sm *SimManager) ConnectToSim(config *SimConnectionConfiguration, result *NewSimResult) error

func (*SimManager) GetAllVoices

func (sm *SimManager) GetAllVoices(_ struct{}, voices *[]sim.Voice) error

GetAllVoices returns all available voices for TTS

func (*SimManager) GetRunningSims

func (sm *SimManager) GetRunningSims(_ int, result *map[string]*RemoteSim) error

func (*SimManager) GetSerializeSim

func (sm *SimManager) GetSerializeSim(token string, s *sim.Sim) error

func (*SimManager) GetSimStatus

func (sm *SimManager) GetSimStatus() []simStatus

func (*SimManager) GetStateUpdate

func (sm *SimManager) GetStateUpdate(token string, update *sim.StateUpdate) error

func (*SimManager) GetTTSStats

func (sm *SimManager) GetTTSStats() []ttsClientStats

func (*SimManager) LookupController

func (sm *SimManager) LookupController(token string) (*humanController, *sim.Sim, bool)

func (*SimManager) NewSim

func (sm *SimManager) NewSim(config *NewSimConfiguration, result *NewSimResult) error

func (*SimManager) SignOff

func (sm *SimManager) SignOff(token string) error

func (*SimManager) SimShouldExit

func (sm *SimManager) SimShouldExit(sim *sim.Sim) bool

func (*SimManager) TextToSpeech

func (sm *SimManager) TextToSpeech(req *TTSRequest, speechMp3 *[]byte) error

TextToSpeech converts text to speech and returns the audio data

func (*SimManager) UpdateTTSUsage

func (sm *SimManager) UpdateTTSUsage(ip, text string) error

type SimScenarioConfiguration

type SimScenarioConfiguration struct {
	SelectedController  string
	SelectedSplit       string
	SplitConfigurations av.SplitConfigurationSet
	PrimaryAirport      string

	AverageWind  wx.WindLayer
	LaunchConfig sim.LaunchConfig

	DepartureRunways []sim.DepartureRunway
	ArrivalRunways   []sim.ArrivalRunway
}

type TTSRequest

type TTSRequest struct {
	Voice    sim.Voice
	Text     string
	ClientIP string // Automatically populated by util.LoggingServerCodec
}

TTSRequest represents a text-to-speech request (shared between client and server)

type VideoMapsArgs

type VideoMapsArgs struct {
	ControllerToken string
	Filename        string
}

Jump to

Keyboard shortcuts

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