-
Notifications
You must be signed in to change notification settings - Fork 18
/
example.js
96 lines (91 loc) · 2.07 KB
/
example.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const assert = require('assert')
const ProtoDef = require('protodef').ProtoDef
const Serializer = require('protodef').Serializer
const Parser = require('protodef').Parser
BigInt.prototype.toJSON = function () { // eslint-disable-line -- Allow serializing BigIntegers
return this.toString()
}
// the protocol can be in a separate json file
const exampleProtocol = {
container: 'native',
varint: 'native',
byte: 'native',
bool: 'native',
switch: 'native',
bitflags: 'native',
entity_look: [
'container',
[
{
name: 'entityId',
type: 'varint'
},
{
name: 'yaw',
type: 'i8'
},
{
name: 'pitch',
type: 'i8'
},
{ name: 'flags', type: ['bitflags', { type: 'u8', flags: ['onGround'] }] },
{ name: 'longId', type: 'varint64' },
{ name: 'longerId', type: 'varint128' },
{ name: 'zigzagId', type: 'zigzag32' },
{ name: 'zigzagBig', type: 'zigzag64' }
]
],
packet: [
'container',
[
{
name: 'name',
type: [
'mapper',
{
type: 'varint',
mappings: {
22: 'entity_look'
}
}
]
},
{
name: 'params',
type: [
'switch',
{
compareTo: 'name',
fields: {
entity_look: 'entity_look'
}
}
]
}
]
]
}
const proto = new ProtoDef()
proto.addTypes(exampleProtocol)
const parser = new Parser(proto, 'packet')
const serializer = new Serializer(proto, 'packet')
serializer.write({
name: 'entity_look',
params: {
entityId: 1,
yaw: 1,
pitch: 6,
flags: {
onGround: true
},
longId: 13n,
longerId: 2n ** 68n, // 9 bytes integer, 10 over wire
zigzagId: -3,
zigzagBig: 4294967296n
}
})
serializer.pipe(parser)
parser.on('data', function (chunk) {
console.dir(chunk, { depth: null })
assert.deepEqual([...chunk.buffer], [22, 1, 1, 6, 1, 13, 128, 128, 128, 128, 128, 128, 128, 128, 128, 32, 5, 128, 128, 128, 128, 32])
})