@z0mt3c/f1-telemetry-client
Version:
[](https://github.com/z0mt3c/f1-telemetry-client/actions/workflows/node.js.yml) [ • 7.3 kB
JavaScript
"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;