openbrawl-client/Protocol.js
2025-06-21 00:41:45 +03:00

99 lines
1.9 KiB
JavaScript

const ByteStream = require("./ByteStream")
class Protocol {
constructor() {
this.version = "1.0.0"
this.clientVersion = 52
}
createPacketHeader(messageType, payload) {
const stream = new ByteStream()
stream.writeUInt16(messageType)
stream.writeUInt24(payload.length)
return Buffer.concat([stream.getBuffer(), payload])
}
createClientHello() {
const stream = new ByteStream()
// Protocol version
stream.writeUInt32(1)
// Key version
stream.writeUInt32(this.clientVersion)
// Major version
stream.writeUInt32(52)
// Minor version
stream.writeUInt32(0)
// Build version
stream.writeUInt32(258)
// Hash
stream.writeString("")
return this.createPacketHeader(10100, stream.getBuffer())
}
createLoginMessage() {
const stream = new ByteStream()
// High ID
stream.writeUInt32(0)
// Low ID
stream.writeUInt32(Math.floor(Math.random() * 1000000))
// Token
stream.writeString("")
// Major version
stream.writeUInt32(52)
// Minor version
stream.writeUInt32(0)
// Build version
stream.writeUInt32(258)
// Hash
stream.writeString("")
// Device
stream.writeString("OpenBrawlProject")
// Language
stream.writeString("EN")
return this.createPacketHeader(10101, stream.getBuffer())
}
createKeepAlive() {
const stream = new ByteStream()
// Keep alive doesn't need payload
return this.createPacketHeader(20108, stream.getBuffer())
}
createHeartbeat() {
const stream = new ByteStream()
// Heartbeat with timestamp
stream.writeUInt32(Date.now())
return this.createPacketHeader(0, stream.getBuffer())
}
createCustomPacket() {
const stream = new ByteStream()
// Custom data
stream.writeString("OpenBrawlProject")
stream.writeUInt32(Date.now())
stream.writeUInt8(1)
return this.createPacketHeader(6076, stream.getBuffer())
}
}
module.exports = Protocol