mirror of
https://github.com/jwetzell/psn-js.git
synced 2026-08-20 14:39:11 +00:00
ENCODING!! and lots of organization
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
const { Parser } = require('binary-parser');
|
||||
|
||||
module.exports = new Parser()
|
||||
.uint16le('id')
|
||||
.uint16le('data_len', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return Number.parseInt(binary.substring(1), 2);
|
||||
},
|
||||
})
|
||||
.seek(-2)
|
||||
.uint16le('has_subchunks', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return binary.charAt(0) === '1';
|
||||
},
|
||||
})
|
||||
.buffer('chunk_data', {
|
||||
length: 'data_len',
|
||||
});
|
||||
@@ -0,0 +1,29 @@
|
||||
const Parser = require('binary-parser').Parser;
|
||||
|
||||
module.exports = new Parser()
|
||||
.uint16le('id')
|
||||
.uint16le('data_len', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return Number.parseInt(binary.substring(1), 2);
|
||||
},
|
||||
})
|
||||
.seek(-2)
|
||||
.uint16le('has_subchunks', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return binary.charAt(0) === '1';
|
||||
},
|
||||
})
|
||||
.choice('data', {
|
||||
tag: 'id',
|
||||
choices: {
|
||||
0x0000: new Parser().floatle('pos_x').floatle('pos_y').floatle('pos_z'),
|
||||
0x0001: new Parser().floatle('speed_x').floatle('speed_y').floatle('speed_z'),
|
||||
0x0002: new Parser().floatle('ori_x').floatle('ori_y').floatle('ori_z'),
|
||||
0x0003: new Parser().floatle('validity'),
|
||||
0x0004: new Parser().floatle('accel_x').floatle('accel_y').floatle('accel_z'),
|
||||
0x0005: new Parser().floatle('trgtpos_x').floatle('trgtpos_y').floatle('trgtpos_z'),
|
||||
0x0006: new Parser().uint64le('tracker_timestamp'),
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
const Parser = require('binary-parser').Parser;
|
||||
|
||||
const dataTrackerParser = new Parser()
|
||||
.uint16le('id')
|
||||
.uint16le('data_len', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return Number.parseInt(binary.substring(1), 2);
|
||||
},
|
||||
})
|
||||
.seek(-2)
|
||||
.uint16le('has_subchunks', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return binary.charAt(0) === '1';
|
||||
},
|
||||
})
|
||||
.buffer('data', {
|
||||
length: 'data_len',
|
||||
});
|
||||
|
||||
module.exports = new Parser().array('trackers', { type: dataTrackerParser, readUntil: 'eof' });
|
||||
@@ -0,0 +1,7 @@
|
||||
const TrackerListChunk = require('./data-tracker-list-chunk');
|
||||
const TrackerFieldChunk = require('./data-tracker-field-chunk');
|
||||
|
||||
module.exports = {
|
||||
TrackerFieldChunk,
|
||||
TrackerListChunk,
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
const Chunk = require('./chunk');
|
||||
const PacketHeaderChunk = require('./packet-header-chunk');
|
||||
const Packet = require('./packet');
|
||||
const Info = require('./info');
|
||||
const Data = require('./data');
|
||||
|
||||
module.exports = {
|
||||
Chunk,
|
||||
PacketHeaderChunk,
|
||||
Packet,
|
||||
Info: {
|
||||
...Info,
|
||||
},
|
||||
Data: {
|
||||
...Data,
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
const SystemNameChunk = require('./info-system-name-chunk');
|
||||
const TrackerListChunk = require('./info-tracker-list-chunk');
|
||||
|
||||
module.exports = {
|
||||
SystemNameChunk,
|
||||
TrackerListChunk,
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
const Parser = require('binary-parser').Parser;
|
||||
|
||||
module.exports = new Parser().string('system_name', { greedy: true });
|
||||
@@ -0,0 +1,39 @@
|
||||
const Parser = require('binary-parser').Parser;
|
||||
|
||||
const infoTrackerNameParser = new Parser()
|
||||
.uint16le('id')
|
||||
.uint16le('data_len', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return Number.parseInt(binary.substring(1), 2);
|
||||
},
|
||||
})
|
||||
.seek(-2)
|
||||
.uint16le('has_subchunks', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return binary.charAt(0) === '1';
|
||||
},
|
||||
})
|
||||
.string('tracker_name', { length: 'data_len' });
|
||||
|
||||
const infoTrackerParser = new Parser()
|
||||
.uint16le('id')
|
||||
.uint16le('data_len', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return Number.parseInt(binary.substring(1), 2);
|
||||
},
|
||||
})
|
||||
.seek(-2)
|
||||
.uint16le('has_subchunks', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return binary.charAt(0) === '1';
|
||||
},
|
||||
})
|
||||
.nest('tracker_name', {
|
||||
type: infoTrackerNameParser,
|
||||
});
|
||||
|
||||
module.exports = new Parser().array('trackers', { type: infoTrackerParser, readUntil: 'eof' });
|
||||
@@ -0,0 +1,9 @@
|
||||
const Parser = require('binary-parser').Parser;
|
||||
|
||||
module.exports = new Parser()
|
||||
.uint64le('packet_timestamp')
|
||||
.uint8('version_high')
|
||||
.uint8('version_low')
|
||||
.uint8('frame_id')
|
||||
.uint8('frame_packet_count')
|
||||
.seek(4);
|
||||
@@ -0,0 +1,18 @@
|
||||
const Parser = require('binary-parser').Parser;
|
||||
|
||||
module.exports = new Parser()
|
||||
.uint16le('id')
|
||||
.uint16le('data_len', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return Number.parseInt(binary.substring(1), 2);
|
||||
},
|
||||
})
|
||||
.seek(-2)
|
||||
.uint16le('has_subchunks', {
|
||||
formatter: (item) => {
|
||||
const binary = item.toString(2).padStart(16, '0');
|
||||
return binary.charAt(0) === '1';
|
||||
},
|
||||
})
|
||||
.buffer('chunk_data', { readUntil: 'eof' });
|
||||
Reference in New Issue
Block a user