Documentation
¶
Index ¶
- Variables
- type HitPart
- type KillEvent
- type MarkerMove
- type Parser
- func (p *Parser) ParseAce3DeathEvent(data []string) (core.Ace3DeathEvent, error)
- func (p *Parser) ParseAce3UnconsciousEvent(data []string) (core.Ace3UnconsciousEvent, error)
- func (p *Parser) ParseChatEvent(data []string) (core.ChatEvent, error)
- func (p *Parser) ParseGeneralEvent(data []string) (core.GeneralEvent, error)
- func (p *Parser) ParseKillEvent(data []string) (KillEvent, error)
- func (p *Parser) ParseMarkerCreate(data []string) (core.Marker, error)
- func (p *Parser) ParseMarkerDelete(data []string) (*core.DeleteMarker, error)
- func (p *Parser) ParseMarkerMove(data []string) (MarkerMove, error)
- func (p *Parser) ParseMission(data []string) (core.Mission, core.World, error)
- func (p *Parser) ParsePlacedObject(data []string) (core.PlacedObject, error)
- func (p *Parser) ParsePlacedObjectEvent(data []string) (core.PlacedObjectEvent, error)
- func (p *Parser) ParseProjectileEvent(data []string) (ProjectileEvent, error)
- func (p *Parser) ParseRadioEvent(data []string) (core.RadioEvent, error)
- func (p *Parser) ParseSoldier(data []string) (core.Soldier, error)
- func (p *Parser) ParseSoldierState(data []string) (core.SoldierState, error)
- func (p *Parser) ParseTelemetryEvent(data []string) (core.TelemetryEvent, error)
- func (p *Parser) ParseTimeState(data []string) (core.TimeState, error)
- func (p *Parser) ParseVehicle(data []string) (core.Vehicle, error)
- func (p *Parser) ParseVehicleState(data []string) (core.VehicleState, error)
- type ProjectileEvent
- type Service
Constants ¶
This section is empty.
Variables ¶
var ChatChannels = map[int]string{
0: "Global",
1: "Side",
2: "Command",
3: "Group",
4: "Vehicle",
5: "Direct",
16: "System",
}
ChatChannels maps ArmA 3 channel numbers to human-readable names.
Functions ¶
This section is empty.
Types ¶
type HitPart ¶
type HitPart struct {
EntityID uint16
ComponentsHit []string
CaptureFrame core.Frame
Position core.Position3D
}
HitPart represents a single hit from a projectile as parsed from ArmA data. EntityID is a raw ArmA object ID that the worker classifies as soldier or vehicle.
type KillEvent ¶
type KillEvent struct {
Time time.Time
CaptureFrame core.Frame
VictimID uint16
KillerID uint16
WeaponVehicle string
WeaponName string
WeaponMagazine string
EventText string
Distance float32
}
KillEvent represents a kill event as parsed from ArmA data. VictimID and KillerID are raw ArmA object IDs that the worker classifies as soldier or vehicle.
type MarkerMove ¶
type MarkerMove struct {
MarkerName string
CaptureFrame core.Frame
Position core.Position3D
Direction float32
Alpha float32
Time time.Time
}
MarkerMove represents a marker position update as parsed from ArmA data. MarkerName needs resolution to a MarkerID via MarkerCache by the worker.
type Parser ¶
type Parser struct {
// contains filtered or unexported fields
}
Parser provides pure []string -> model struct conversion. It has zero external dependencies beyond a logger.
func (*Parser) ParseAce3DeathEvent ¶
func (p *Parser) ParseAce3DeathEvent(data []string) (core.Ace3DeathEvent, error)
ParseAce3DeathEvent parses ACE3 death event data and returns a core Ace3DeathEvent. SoldierID and LastDamageSourceID are set directly (no cache validation).
func (*Parser) ParseAce3UnconsciousEvent ¶
func (p *Parser) ParseAce3UnconsciousEvent(data []string) (core.Ace3UnconsciousEvent, error)
ParseAce3UnconsciousEvent parses ACE3 unconscious event data and returns a core Ace3UnconsciousEvent. SoldierID is set directly (no cache validation - worker validates).
func (*Parser) ParseChatEvent ¶
ParseChatEvent parses chat event data and returns a core ChatEvent. SoldierID is set directly (no cache validation - worker validates).
func (*Parser) ParseGeneralEvent ¶
func (p *Parser) ParseGeneralEvent(data []string) (core.GeneralEvent, error)
ParseGeneralEvent parses general event data and returns a core GeneralEvent
func (*Parser) ParseKillEvent ¶
ParseKillEvent parses kill event data into a KillEvent. Raw victim/killer IDs are returned for the worker to classify as soldier vs vehicle.
func (*Parser) ParseMarkerCreate ¶
ParseMarkerCreate parses marker create data and returns a core Marker
func (*Parser) ParseMarkerDelete ¶
func (p *Parser) ParseMarkerDelete(data []string) (*core.DeleteMarker, error)
ParseMarkerDelete parses marker delete data and returns a DeleteMarker
func (*Parser) ParseMarkerMove ¶
func (p *Parser) ParseMarkerMove(data []string) (MarkerMove, error)
ParseMarkerMove parses marker move data into a MarkerMove. The MarkerName is returned for the worker to resolve to a MarkerID via MarkerCache.
func (*Parser) ParseMission ¶
ParseMission parses mission and world data from raw args. Returns parsed mission + world. NO DB operations, NO cache resets, NO callbacks.
func (*Parser) ParsePlacedObject ¶
func (p *Parser) ParsePlacedObject(data []string) (core.PlacedObject, error)
ParsePlacedObject parses placed object data into a core PlacedObject. Args: [frame, id, className, displayName, "x,y,z", ownerOcapId, side, weapon, magazineIcon]
func (*Parser) ParsePlacedObjectEvent ¶
func (p *Parser) ParsePlacedObjectEvent(data []string) (core.PlacedObjectEvent, error)
ParsePlacedObjectEvent parses placed object event data into a core PlacedObjectEvent. Args: [frame, id, eventType, "x,y,z", hitEntityOcapId?]
func (*Parser) ParseProjectileEvent ¶
func (p *Parser) ParseProjectileEvent(data []string) (ProjectileEvent, error)
ParseProjectileEvent parses projectile event data into a ProjectileEvent. Hit parts are returned as HitPart for the worker to classify as soldier/vehicle.
func (*Parser) ParseRadioEvent ¶
func (p *Parser) ParseRadioEvent(data []string) (core.RadioEvent, error)
ParseRadioEvent parses radio event data and returns a core RadioEvent. SoldierID is set directly (no cache validation - worker validates).
func (*Parser) ParseSoldier ¶
ParseSoldier parses soldier data and returns a core Soldier
func (*Parser) ParseSoldierState ¶
func (p *Parser) ParseSoldierState(data []string) (core.SoldierState, error)
ParseSoldierState parses soldier state data and returns a core SoldierState. Sets SoldierID directly from the parsed ocapID (no cache lookup). If groupID/side fields are not in the data (len < 17), they are left empty for the worker layer to fill from cache.
func (*Parser) ParseTelemetryEvent ¶
func (p *Parser) ParseTelemetryEvent(data []string) (core.TelemetryEvent, error)
ParseTelemetryEvent parses a unified telemetry snapshot sent every ~10 seconds. Replaces the old :FPS: and :METRIC: commands.
ArmA's callExtension flattens the top-level SQF array into 7 separate string args:
data[0] — Frame number (OCAP_recorder_captureFrameNo). Plain integer string.
Example: "134"
data[1] — Server FPS: [diag_fps, diag_fpsmin].
Example: "[43.3604,4.36681]"
data[2] — Per-side entity counts. Array[4] in order [east, west, independent, civilian].
Each side: [[server_local], [remote]].
Each locality: [units_total, units_alive, units_dead, groups_total,
vehicles_total, vehicles_weaponholder].
Note: units_total ≈ units_alive (allUnits typically only contains living units;
they may diverge with ACE unconscious units).
Example: "[[[1,1,0,1,0,0],[0,0,0,0,0,0]],[[10,10,0,8,0,0],[0,0,0,0,0,0]],...]"
data[3] — Global entity counts: [units_alive, units_dead, groups_total, vehicles_total,
vehicles_weaponholder, players_alive, players_dead, players_connected].
Example: "[22,12,15,28,0,1,0,1]"
data[4] — Running scripts: [spawn, execVM, exec, execFSM, pfh].
Indices 0–3 from diag_activeScripts; index 4 is CBA per-frame handler count.
Example: "[28,4,0,4,2]"
data[5] — Weather snapshot (12 floats): [fog, overcast, rain, humidity, waves,
windDir (0–360°), windStr, gusts, lightnings, moonIntensity,
moonPhase (0=new, 0.5=full, 1=new), sunOrMoon (0=night, 1=day)].
Example: "[0.2,0.25,0,0,0.1,160.864,0.25,0.175,0.003153,0.441581,0.421672,1]"
data[6] — Player network data. Variable-length array, one entry per connected human player
(excludes headless clients). Each entry: [playerUID, playerName, avgPing,
avgBandwidth, desync]. Empty when no players: "[]".
Note: avgBandwidth may use scientific notation (e.g. 1.67772e+07).
Example: "[["76561198000074241","info",100,28,0]]"
func (*Parser) ParseTimeState ¶
ParseTimeState parses time state data and returns a core TimeState Args: [frameNo, systemTimeUTC, missionDateTime, timeMultiplier, missionTime]
func (*Parser) ParseVehicle ¶
ParseVehicle parses vehicle data and returns a core Vehicle
func (*Parser) ParseVehicleState ¶
func (p *Parser) ParseVehicleState(data []string) (core.VehicleState, error)
ParseVehicleState parses vehicle state data and returns a core VehicleState. Sets VehicleID directly from the parsed ocapID (no cache lookup).
type ProjectileEvent ¶
type ProjectileEvent struct {
CaptureFrame core.Frame
FirerObjectID uint16
VehicleObjectID *uint16
WeaponDisplay string
MagazineDisplay string
MuzzleDisplay string
SimulationType string
MagazineIcon string
Trajectory []core.TrajectoryPoint
HitParts []HitPart
}
ProjectileEvent represents a projectile event as parsed from ArmA data. HitParts contain raw entity IDs that need classification by the worker.
type Service ¶
type Service interface {
ParseMission(args []string) (core.Mission, core.World, error)
ParseSoldier(args []string) (core.Soldier, error)
ParseVehicle(args []string) (core.Vehicle, error)
ParseSoldierState(args []string) (core.SoldierState, error)
ParseVehicleState(args []string) (core.VehicleState, error)
ParseProjectileEvent(args []string) (ProjectileEvent, error)
ParseGeneralEvent(args []string) (core.GeneralEvent, error)
ParseKillEvent(args []string) (KillEvent, error)
ParseChatEvent(args []string) (core.ChatEvent, error)
ParseRadioEvent(args []string) (core.RadioEvent, error)
ParseTimeState(args []string) (core.TimeState, error)
ParseAce3DeathEvent(args []string) (core.Ace3DeathEvent, error)
ParseAce3UnconsciousEvent(args []string) (core.Ace3UnconsciousEvent, error)
ParseMarkerCreate(args []string) (core.Marker, error)
ParseMarkerMove(args []string) (MarkerMove, error)
ParseMarkerDelete(args []string) (*core.DeleteMarker, error)
ParseTelemetryEvent(args []string) (core.TelemetryEvent, error)
ParsePlacedObject(args []string) (core.PlacedObject, error)
ParsePlacedObjectEvent(args []string) (core.PlacedObjectEvent, error)
}
Service defines the interface for parsing ArmA 3 extension arguments into model structs.