forked from PrismarineJS/prismarine-registry
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcollectBedrockPackets.js
More file actions
77 lines (66 loc) · 2.03 KB
/
collectBedrockPackets.js
File metadata and controls
77 lines (66 loc) · 2.03 KB
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
const bedrock = require('bedrock-protocol')
const { startServerAndWait2 } = require('minecraft-bedrock-server')
const debug = require('debug')('prismarine-registry')
const path = require('path')
const { getPort } = require('./getPort')
const { waitFor } = require('./waitFor')
const { sleep } = require('./sleep')
async function collectPackets (version, names = ['start_game'], cb) {
const [port, v6] = [await getPort(), await getPort()]
console.log('Starting vanilla server', version, 'on port', port, v6)
const server = await startServerAndWait2(version, 1000 * 220, {
'online-mode': false,
'server-port': port,
'server-portv6': v6,
path: path.join(__dirname, `server_bedrock_${version}`)
})
console.log('Started server')
await sleep(200)
const client = bedrock.createClient({
host: '127.0.0.1',
port,
username: 'test',
version,
raknetBackend: 'raknet-native',
offline: true,
skipPing: true
})
console.log('Started client. Connecting to server')
let clientConnected = false
const collected = []
await waitFor((resolve) => {
client.on('join', () => {
console.log('[client] Client connected')
clientConnected = true
stopIfDone()
})
client.on('packet', ({ name }) => debug('[client] -> ', name))
client.on('error', (err) => {
console.error('[client]', err)
resolve('timeout')
})
client.on('end', () => console.log('Bot disconnected.'))
for (const name of names) {
client.on(name, (packet) => {
cb(name, packet)
collected.push(packet)
stopIfDone()
})
}
function stopIfDone () {
if (clientConnected && collected.length === names.length) {
console.log('✔ Got all packets')
console.log('Stopping server', version)
server.kill()
client.close()
resolve()
}
}
}, 1000 * 60, () => {
client.close()
server.kill()
throw Error('❌ client timed out ')
})
console.log('Stopping server', version)
}
module.exports = collectPackets