mirror of
https://github.com/gamedig/node-gamedig.git
synced 2024-11-14 07:51:12 +01:00
76 lines
2.6 KiB
JavaScript
76 lines
2.6 KiB
JavaScript
const Core = require('./core');
|
|
|
|
class Rfactor extends Core {
|
|
constructor() {
|
|
super();
|
|
//this.byteorder = 'be';
|
|
}
|
|
|
|
async run(state) {
|
|
const buffer = await this.udpSend('rF_S',b => b);
|
|
const reader = this.reader(buffer);
|
|
|
|
state.raw.gamename = this.readString(reader, 8);
|
|
state.raw.fullUpdate = reader.uint(1);
|
|
state.raw.region = reader.uint(2);
|
|
state.raw.ip = reader.part(4);
|
|
state.raw.size = reader.uint(2);
|
|
state.raw.version = reader.uint(2);
|
|
state.raw.versionRaceCast = reader.uint(2);
|
|
state.gamePort = reader.uint(2);
|
|
state.raw.queryPort = reader.uint(2);
|
|
state.raw.game = this.readString(reader, 20);
|
|
state.name = this.readString(reader, 28);
|
|
state.map = this.readString(reader, 32);
|
|
state.raw.motd = this.readString(reader, 96);
|
|
state.raw.packedAids = reader.uint(2);
|
|
state.raw.ping = reader.uint(2);
|
|
state.raw.packedFlags = reader.uint(1);
|
|
state.raw.rate = reader.uint(1);
|
|
state.players.setNum(reader.uint(1));
|
|
state.maxplayers = reader.uint(1);
|
|
state.raw.bots = reader.uint(1);
|
|
state.raw.packedSpecial = reader.uint(1);
|
|
state.raw.damage = reader.uint(1);
|
|
state.raw.packedRules = reader.uint(2);
|
|
state.raw.credits1 = reader.uint(1);
|
|
state.raw.credits2 = reader.uint(2);
|
|
this.logger.debug(reader.offset());
|
|
state.raw.time = reader.uint(2);
|
|
state.raw.laps = reader.uint(2) / 16;
|
|
reader.skip(3);
|
|
state.raw.vehicles = reader.string();
|
|
|
|
state.password = !!(state.raw.packedSpecial & 2);
|
|
state.raw.raceCast = !!(state.raw.packedSpecial & 4);
|
|
state.raw.fixedSetups = !!(state.raw.packedSpecial & 16);
|
|
|
|
const aids = [
|
|
'TractionControl',
|
|
'AntiLockBraking',
|
|
'StabilityControl',
|
|
'AutoShifting',
|
|
'AutoClutch',
|
|
'Invulnerability',
|
|
'OppositeLock',
|
|
'SteeringHelp',
|
|
'BrakingHelp',
|
|
'SpinRecovery',
|
|
'AutoPitstop'
|
|
];
|
|
state.raw.aids = [];
|
|
for (let offset = 0; offset < aids.length; offset++) {
|
|
if (state.packedAids && (1 << offset)) {
|
|
state.raw.aids.push(aids[offset]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Consumes bytesToConsume, but only returns string up to the first null
|
|
readString(reader, bytesToConsume) {
|
|
const consumed = reader.part(bytesToConsume);
|
|
return this.reader(consumed).string();
|
|
}
|
|
}
|
|
|
|
module.exports = Rfactor;
|