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.
44 lines
1.5 KiB
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)
|
|
}
|
|
}
|
|
}
|
|
|