Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
openrs2/protocol/src/main/kotlin/org/openrs2/protocol/js5/upstream/Js5RequestEncoder.kt

44 lines
1.5 KiB

package org.openrs2.protocol.js5.upstream
import io.netty.buffer.ByteBuf
import io.netty.channel.ChannelHandler
import io.netty.channel.ChannelHandlerContext
import io.netty.handler.codec.MessageToByteEncoder
@ChannelHandler.Sharable
public object Js5RequestEncoder : MessageToByteEncoder<Js5Request>(Js5Request::class.java) {
override fun encode(ctx: ChannelHandlerContext, msg: Js5Request, out: ByteBuf) {
when (msg) {
is Js5Request.Group -> {
out.writeByte(if (msg.prefetch) 0 else 1)
out.writeByte(msg.archive)
out.writeShort(msg.group)
}
is Js5Request.Rekey -> {
out.writeByte(4)
out.writeByte(msg.key)
out.writeZero(2)
}
is Js5Request.LoggedIn -> encodeSimple(out, 2)
is Js5Request.LoggedOut -> encodeSimple(out, 3)
is Js5Request.Connected -> {
out.writeByte(6)
out.writeMedium(3)
}
is Js5Request.Disconnect -> encodeSimple(out, 7)
}
}
private fun encodeSimple(out: ByteBuf, opcode: Int) {
out.writeByte(opcode)
out.writeZero(3)
}
override fun allocateBuffer(ctx: ChannelHandlerContext, msg: Js5Request, preferDirect: Boolean): ByteBuf {
return if (preferDirect) {
ctx.alloc().ioBuffer(4, 4)
} else {
ctx.alloc().heapBuffer(4, 4)
}
}
}