Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revision 227 #38

Merged
merged 9 commits into from
Nov 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions protocol/osrs-227/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
dependencies {
implementation(platform(rootProject.libs.netty.bom))
implementation(rootProject.libs.netty.buffer)
implementation(rootProject.libs.netty.transport)
implementation(rootProject.libs.netty.handler)
implementation(rootProject.libs.rsprot.buffer)
implementation(rootProject.libs.rsprot.compression)
implementation(rootProject.libs.rsprot.protocol)
implementation(rootProject.libs.rsprot.crypto)
implementation(platform(rootProject.libs.log4j.bom))
implementation(rootProject.libs.bundles.log4j)
implementation(projects.protocol)
implementation(projects.cache.cacheApi)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package net.rsprox.protocol.v227

import net.rsprot.buffer.JagByteBuf
import net.rsprot.compression.HuffmanCodec
import net.rsprot.protocol.message.IncomingMessage
import net.rsprox.protocol.ClientPacketDecoder
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.ClientMessageDecoderRepository

public class ClientPacketDecoderServiceV227(
huffmanCodec: HuffmanCodec,
) : ClientPacketDecoder {
@OptIn(ExperimentalStdlibApi::class)
private val repository = ClientMessageDecoderRepository.build(huffmanCodec)

override fun decode(
opcode: Int,
payload: JagByteBuf,
session: Session,
): IncomingMessage {
return repository
.getDecoder(opcode)
.decode(payload, session)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.rsprox.protocol.v227

import net.rsprox.protocol.ProtProvider
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

public data object GameClientProtProviderV227 : ProtProvider<GameClientProt> {
override fun get(opcode: Int): GameClientProt {
return GameClientProt.entries.firstOrNull { it.opcode == opcode }
?: throw IllegalArgumentException("Unknown game client prot: $opcode")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.rsprox.protocol.v227

import net.rsprox.protocol.ProtProvider
import net.rsprox.protocol.v227.game.outgoing.decoder.prot.GameServerProt

public data object GameServerProtProviderV227 : ProtProvider<GameServerProt> {
override fun get(opcode: Int): GameServerProt {
return GameServerProt.entries.firstOrNull { it.opcode == opcode }
?: throw IllegalArgumentException("Unknown game server prot: $opcode")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package net.rsprox.protocol.v227

import net.rsprot.buffer.JagByteBuf
import net.rsprot.compression.HuffmanCodec
import net.rsprot.protocol.message.IncomingMessage
import net.rsprox.cache.api.CacheProvider
import net.rsprox.protocol.ServerPacketDecoder
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.outgoing.decoder.prot.ServerMessageDecoderRepository

public class ServerPacketDecoderServiceV227(
huffmanCodec: HuffmanCodec,
cache: CacheProvider,
) : ServerPacketDecoder {
@OptIn(ExperimentalStdlibApi::class)
private val repository =
ServerMessageDecoderRepository.build(
huffmanCodec,
cache,
)

override fun decode(
opcode: Int,
payload: JagByteBuf,
session: Session,
): IncomingMessage {
return repository
.getDecoder(opcode)
.decode(payload, session)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.buttons

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprot.protocol.util.gCombinedId
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.buttons.If1Button
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class If1ButtonDecoder : ProxyMessageDecoder<If1Button> {
override val prot: ClientProt = GameClientProt.IF_BUTTON

override fun decode(
buffer: JagByteBuf,
session: Session,
): If1Button {
val combinedId = buffer.gCombinedId()
return If1Button(combinedId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.buttons

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.metadata.Consistent
import net.rsprot.protocol.util.gCombinedId
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.buttons.If3Button
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class If3ButtonDecoder(
override val prot: GameClientProt,
private val op: Int,
) : ProxyMessageDecoder<If3Button> {
override fun decode(
buffer: JagByteBuf,
session: Session,
): If3Button {
val combinedId = buffer.gCombinedId()
val sub = buffer.g2()
val obj = buffer.g2()
return If3Button(
combinedId,
sub,
obj,
op,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.buttons

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.util.gCombinedIdAlt1
import net.rsprot.protocol.util.gCombinedIdAlt2
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.buttons.IfButtonD
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

internal class IfButtonDDecoder : ProxyMessageDecoder<IfButtonD> {
override val prot: ClientProt = GameClientProt.IF_BUTTOND

override fun decode(
buffer: JagByteBuf,
session: Session,
): IfButtonD {
val selectedSub = buffer.g2()
val targetCombinedId = buffer.gCombinedIdAlt2()
val targetSub = buffer.g2Alt2()
val selectedCombinedId = buffer.gCombinedIdAlt1()
val selectedObj = buffer.g2Alt3()
val targetObj = buffer.g2Alt3()
return IfButtonD(
selectedCombinedId,
selectedSub,
selectedObj,
targetCombinedId,
targetSub,
targetObj,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.buttons

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.util.gCombinedIdAlt1
import net.rsprot.protocol.util.gCombinedIdAlt2
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.buttons.IfButtonT
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

internal class IfButtonTDecoder : ProxyMessageDecoder<IfButtonT> {
override val prot: ClientProt = GameClientProt.IF_BUTTONT

override fun decode(
buffer: JagByteBuf,
session: Session,
): IfButtonT {
val targetSub = buffer.g2Alt2()
val selectedObj = buffer.g2Alt2()
val targetCombinedId = buffer.gCombinedIdAlt1()
val selectedSub = buffer.g2Alt3()
val selectedCombinedId = buffer.gCombinedIdAlt2()
val targetObj = buffer.g2Alt3()
return IfButtonT(
selectedCombinedId,
selectedSub,
selectedObj,
targetCombinedId,
targetSub,
targetObj,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.buttons

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprot.protocol.util.gCombinedId
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.buttons.IfSubOp
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class IfSubOpDecoder : ProxyMessageDecoder<IfSubOp> {
override val prot: ClientProt = GameClientProt.IF_SUBOP

override fun decode(
buffer: JagByteBuf,
session: Session,
): IfSubOp {
val combinedId = buffer.gCombinedId()
val sub = buffer.g2()
val obj = buffer.g2()
val subop = buffer.g1()
val op = buffer.g1()
return IfSubOp(
combinedId,
sub,
obj,
op + 1,
subop,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.clan

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.clan.AffinedClanSettingsAddBannedFromChannel
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class AffinedClanSettingsAddBannedFromChannelDecoder :
ProxyMessageDecoder<AffinedClanSettingsAddBannedFromChannel> {
override val prot: ClientProt = GameClientProt.AFFINEDCLANSETTINGS_ADDBANNED_FROMCHANNEL

override fun decode(
buffer: JagByteBuf,
session: Session,
): AffinedClanSettingsAddBannedFromChannel {
val clanId = buffer.g1()
val memberIndex = buffer.g2()
val name = buffer.gjstr()
return AffinedClanSettingsAddBannedFromChannel(
name,
clanId,
memberIndex,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.clan

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.clan.AffinedClanSettingsSetMutedFromChannel
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class AffinedClanSettingsSetMutedFromChannelDecoder :
ProxyMessageDecoder<AffinedClanSettingsSetMutedFromChannel> {
override val prot: ClientProt = GameClientProt.AFFINEDCLANSETTINGS_SETMUTED_FROMCHANNEL

override fun decode(
buffer: JagByteBuf,
session: Session,
): AffinedClanSettingsSetMutedFromChannel {
val clanId = buffer.g1()
val memberIndex = buffer.g2()
val muted = buffer.g1() == 1
val name = buffer.gjstr()
return AffinedClanSettingsSetMutedFromChannel(
name,
clanId,
memberIndex,
muted,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.clan

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.clan.ClanChannelFullRequest
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class ClanChannelFullRequestDecoder : ProxyMessageDecoder<ClanChannelFullRequest> {
override val prot: ClientProt = GameClientProt.CLANCHANNEL_FULL_REQUEST

override fun decode(
buffer: JagByteBuf,
session: Session,
): ClanChannelFullRequest {
val clanId = buffer.g1s()
return ClanChannelFullRequest(clanId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.clan

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.clan.ClanChannelKickUser
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class ClanChannelKickUserDecoder : ProxyMessageDecoder<ClanChannelKickUser> {
override val prot: ClientProt = GameClientProt.CLANCHANNEL_KICKUSER

override fun decode(
buffer: JagByteBuf,
session: Session,
): ClanChannelKickUser {
val clanId = buffer.g1()
val memberIndex = buffer.g2()
val name = buffer.gjstr()
return ClanChannelKickUser(
name,
clanId,
memberIndex,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package net.rsprox.protocol.v227.game.incoming.decoder.codec.clan

import net.rsprot.buffer.JagByteBuf
import net.rsprot.protocol.ClientProt
import net.rsprot.protocol.metadata.Consistent
import net.rsprox.protocol.ProxyMessageDecoder
import net.rsprox.protocol.game.incoming.model.clan.ClanSettingsFullRequest
import net.rsprox.protocol.session.Session
import net.rsprox.protocol.v227.game.incoming.decoder.prot.GameClientProt

@Consistent
internal class ClanSettingsFullRequestDecoder : ProxyMessageDecoder<ClanSettingsFullRequest> {
override val prot: ClientProt = GameClientProt.CLANSETTINGS_FULL_REQUEST

override fun decode(
buffer: JagByteBuf,
session: Session,
): ClanSettingsFullRequest {
val clanId = buffer.g1s()
return ClanSettingsFullRequest(clanId)
}
}
Loading
Loading