minecraft-protocol
Version:
Parse and serialize minecraft packets, plus authentication and encryption.
48 lines (41 loc) • 1.19 kB
JavaScript
module.exports = function (client, server, {
kickTimeout = 30 * 1000,
checkTimeoutInterval = 4 * 1000,
keepAlive: enableKeepAlive = true
}) {
let keepAlive = false
let lastKeepAlive = null
let keepAliveTimer = null
let sendKeepAliveTime
function keepAliveLoop () {
if (!keepAlive) { return }
// check if the last keepAlive was too long ago (kickTimeout)
const elapsed = new Date() - lastKeepAlive
if (elapsed > kickTimeout) {
client.end('KeepAliveTimeout')
return
}
sendKeepAliveTime = new Date()
client.write('keep_alive', {
keepAliveId: Math.floor(Math.random() * 2147483648)
})
}
function onKeepAlive () {
if (sendKeepAliveTime) client.latency = (new Date()) - sendKeepAliveTime
lastKeepAlive = new Date()
}
function startKeepAlive () {
keepAlive = true
lastKeepAlive = new Date()
keepAliveTimer = setInterval(keepAliveLoop, checkTimeoutInterval)
client.on('keep_alive', onKeepAlive)
}
if (enableKeepAlive) {
client.on('state', state => {
if (state === 'play') {
startKeepAlive()
}
})
}
client.on('end', () => clearInterval(keepAliveTimer))
}