UNPKG

@z0mt3c/f1-telemetry-client

Version:

[![Node.js CI](https://github.com/z0mt3c/f1-telemetry-client/actions/workflows/node.js.yml/badge.svg)](https://github.com/z0mt3c/f1-telemetry-client/actions/workflows/node.js.yml) [![NPM Release](https://img.shields.io/npm/v/@z0mt3c/f1-telemetry-client.sv

170 lines (169 loc) 7.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PacketEventDataParser = exports.PenaltyParser = exports.SpeedTrapParser = exports.StopGoParser = exports.RetirementParser = exports.DRSDisabledParser = exports.OvertakeParser = exports.ButtonsParser = exports.StartLightsParser = exports.CollisionParser = exports.SafetyCarParser = exports.FlashbackParser = exports.FastestLapParser = exports.VehicleEventParser = void 0; const binary_parser_1 = require("binary-parser"); const F1Parser_1 = require("../F1Parser"); const PacketHeaderParser_1 = require("./PacketHeaderParser"); const types_1 = require("../../types"); class VehicleEventParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('vehicleIdx'); } } exports.VehicleEventParser = VehicleEventParser; VehicleEventParser.VEHICLE_EVENT_CODES = [types_1.EventCode.Retirement, types_1.EventCode.TeamMateInPits, types_1.EventCode.RaceWinner, types_1.EventCode.DriveThroughServed, types_1.EventCode.StopGoServed]; class FastestLapParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('vehicleIdx').floatle('lapTime'); } } exports.FastestLapParser = FastestLapParser; class FlashbackParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint32le('flashbackFrameIdentifier').floatle('flashbackSessionTime'); } } exports.FlashbackParser = FlashbackParser; class SafetyCarParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('safetyCarType').uint8('eventType'); } } exports.SafetyCarParser = SafetyCarParser; class CollisionParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('vehicle1Idx').uint8('vehicle2Idx'); } } exports.CollisionParser = CollisionParser; class StartLightsParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('numLights'); } } exports.StartLightsParser = StartLightsParser; class ButtonsParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint32le('buttonStatus'); } } exports.ButtonsParser = ButtonsParser; class OvertakeParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('overtakingVehicleIdx').uint8('beingOvertakenVehicleIdx'); } } exports.OvertakeParser = OvertakeParser; class DRSDisabledParser extends F1Parser_1.F1Parser { constructor(format) { super(); this.endianess('little').uint8('reason'); } } exports.DRSDisabledParser = DRSDisabledParser; class RetirementParser extends F1Parser_1.F1Parser { constructor(format) { super(); this.endianess('little').uint8('vehicleIdx').uint8('reason'); } } exports.RetirementParser = RetirementParser; class StopGoParser extends F1Parser_1.F1Parser { constructor(format) { super(); this.endianess('little').uint8('vehicleIdx').floatle('stopTime'); } } exports.StopGoParser = StopGoParser; class SpeedTrapParser extends F1Parser_1.F1Parser { constructor(packetFormat) { super(); this.endianess('little').uint8('vehicleIdx').floatle('speed'); if (packetFormat === 2021) { this.uint8('overallFastestInSession').uint8('driverFastestInSession'); } if (packetFormat >= 2022) { this.uint8('isOverallFastestInSession').uint8('isDriverFastestInSession').uint8('fastestVehicleIdxInSession').floatle('fastestSpeedInSession'); } } } exports.SpeedTrapParser = SpeedTrapParser; class PenaltyParser extends F1Parser_1.F1Parser { constructor() { super(); this.endianess('little').uint8('penaltyType').uint8('infringementType').uint8('vehicleIdx').uint8('otherVehicleIdx').uint8('time').uint8('lapNum').uint8('placesGained'); } } exports.PenaltyParser = PenaltyParser; class PacketEventDataParser extends F1Parser_1.F1Parser { constructor(buffer, packetFormat, bigintEnabled) { super(); this.getEventStringCode = (buffer, packetFormat, bigintEnabled) => { const headerParser = new binary_parser_1.Parser() .endianess('little') .nest('m_header', { type: new PacketHeaderParser_1.PacketHeaderParser(packetFormat, bigintEnabled), }) .string('m_eventStringCode', { length: 4 }); const { m_eventStringCode } = headerParser.parse(buffer); return m_eventStringCode; }; this.endianess('little').nest('m_header', { type: new PacketHeaderParser_1.PacketHeaderParser(packetFormat, bigintEnabled), }); this.string('m_eventStringCode', { length: 4 }); const eventStringCode = this.getEventStringCode(buffer, packetFormat, bigintEnabled); if (eventStringCode === types_1.EventCode.FastestLap) { this.nest('m_eventDetails', { type: new FastestLapParser() }); } else if (eventStringCode === types_1.EventCode.SpeedTrap) { this.nest('m_eventDetails', { type: new SpeedTrapParser(packetFormat) }); } else if (eventStringCode === types_1.EventCode.Penalty) { this.nest('m_eventDetails', { type: new PenaltyParser() }); } else if (eventStringCode === types_1.EventCode.Flashback) { this.nest('m_eventDetails', { type: new FlashbackParser() }); } else if (eventStringCode === types_1.EventCode.StartLights) { this.nest('m_eventDetails', { type: new StartLightsParser() }); } else if (eventStringCode === types_1.EventCode.ButtonStatus) { this.nest('m_eventDetails', { type: new ButtonsParser() }); } else if (eventStringCode === types_1.EventCode.Overtake) { this.nest('m_eventDetails', { type: new OvertakeParser() }); } else if (eventStringCode === types_1.EventCode.Retirement) { if (packetFormat >= 2025) this.nest('m_eventDetails', { type: new RetirementParser(packetFormat) }); } else if (eventStringCode === types_1.EventCode.DRSDisabled) { if (packetFormat >= 2025) this.nest('m_eventDetails', { type: new DRSDisabledParser(packetFormat) }); } else if (eventStringCode === types_1.EventCode.StopGoServed) { if (packetFormat >= 2025) this.nest('m_eventDetails', { type: new StopGoParser(packetFormat) }); } else if (eventStringCode === types_1.EventCode.SafetyCar) { this.nest('m_eventDetails', { type: new SafetyCarParser() }); } else if (eventStringCode === types_1.EventCode.Collision) { this.nest('m_eventDetails', { type: new CollisionParser() }); } else if (VehicleEventParser.VEHICLE_EVENT_CODES.includes(eventStringCode)) { this.nest('m_eventDetails', { type: new VehicleEventParser() }); } this.data = this.fromBuffer(buffer); } } exports.PacketEventDataParser = PacketEventDataParser;