50 lines
1019 B
JavaScript
50 lines
1019 B
JavaScript
const ByteStream = require("../../ByteStream/ByteStream")
|
|
|
|
class HeartbeatMessage {
|
|
constructor(config, crypto, logger, data = null) {
|
|
this.config = config
|
|
this.crypto = crypto
|
|
this.logger = logger
|
|
this.type = 0
|
|
this.data = data
|
|
}
|
|
|
|
encode() {
|
|
const stream = new ByteStream()
|
|
|
|
const timestamp = Math.floor(Date.now() / 1000)
|
|
stream.writeUInt32(timestamp)
|
|
|
|
// Client status
|
|
stream.writeUInt8(1) // 1 = alive
|
|
|
|
stream.writeUInt32(this.data?.sequence || 0)
|
|
|
|
this.logger.debug(`Encoding HeartbeatMessage`, {
|
|
timestamp: timestamp,
|
|
sequence: this.data?.sequence || 0,
|
|
})
|
|
|
|
return stream.getBuffer()
|
|
}
|
|
|
|
decode(buffer) {
|
|
const stream = new ByteStream(buffer)
|
|
|
|
const data = {
|
|
timestamp: stream.readUInt32(),
|
|
status: stream.readUInt8(),
|
|
sequence: stream.readUInt32(),
|
|
}
|
|
|
|
this.logger.debug(`Decoded HeartbeatMessage`, data)
|
|
return data
|
|
}
|
|
|
|
getType() {
|
|
return this.type
|
|
}
|
|
}
|
|
|
|
module.exports = HeartbeatMessage
|