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/ProtocolModule.kt

203 lines
9.6 KiB

package org.openrs2.protocol
import com.google.inject.AbstractModule
import com.google.inject.PrivateModule
import com.google.inject.TypeLiteral
import com.google.inject.multibindings.Multibinder
import org.openrs2.buffer.BufferModule
import org.openrs2.crypto.CryptoModule
import org.openrs2.protocol.create.downstream.CannotCreateAtThisTimeCodec
import org.openrs2.protocol.create.downstream.CountryInvalidCodec
import org.openrs2.protocol.create.downstream.CreateClientOutOfDateCodec
import org.openrs2.protocol.create.downstream.CreateDownstream
import org.openrs2.protocol.create.downstream.CreateIpLimitCodec
import org.openrs2.protocol.create.downstream.CreateOkCodec
import org.openrs2.protocol.create.downstream.CreateServerFullCodec
import org.openrs2.protocol.create.downstream.CreateServerOfflineCodec
import org.openrs2.protocol.create.downstream.DateOfBirthFutureCodec
import org.openrs2.protocol.create.downstream.DateOfBirthInvalidCodec
import org.openrs2.protocol.create.downstream.DateOfBirthLastYearCodec
import org.openrs2.protocol.create.downstream.DateOfBirthThisYearCodec
import org.openrs2.protocol.create.downstream.EmailInvalid1Codec
import org.openrs2.protocol.create.downstream.EmailInvalid2Codec
import org.openrs2.protocol.create.downstream.EmailInvalidCodec
import org.openrs2.protocol.create.downstream.NameInvalidCodec
import org.openrs2.protocol.create.downstream.NameSuggestionsCodec
import org.openrs2.protocol.create.downstream.NameUnavailableCodec
import org.openrs2.protocol.create.downstream.PasswordGuessable1Codec
import org.openrs2.protocol.create.downstream.PasswordGuessableCodec
import org.openrs2.protocol.create.downstream.PasswordInvalidCharsCodec
import org.openrs2.protocol.create.downstream.PasswordInvalidLengthCodec
import org.openrs2.protocol.create.downstream.PasswordSimilarToName1Codec
import org.openrs2.protocol.create.downstream.PasswordSimilarToName2Codec
import org.openrs2.protocol.create.downstream.PasswordSimilarToNameCodec
import org.openrs2.protocol.js5.downstream.Js5ClientOutOfDateCodec
import org.openrs2.protocol.js5.downstream.Js5IpLimitCodec
import org.openrs2.protocol.js5.downstream.Js5OkCodec
import org.openrs2.protocol.js5.downstream.Js5RemoteDownstream
import org.openrs2.protocol.js5.downstream.Js5ServerFullCodec
import org.openrs2.protocol.login.downstream.BadSessionIdCodec
import org.openrs2.protocol.login.downstream.BannedCodec
import org.openrs2.protocol.login.downstream.ClientMembersOnlyCodec
import org.openrs2.protocol.login.downstream.ClientOutOfDateCodec
import org.openrs2.protocol.login.downstream.DisallowedByScriptCodec
import org.openrs2.protocol.login.downstream.DuplicateCodec
import org.openrs2.protocol.login.downstream.ExchangeSessionKeyCodec
import org.openrs2.protocol.login.downstream.ForcePasswordChangeCodec
import org.openrs2.protocol.login.downstream.FullscreenMembersOnlyCodec
import org.openrs2.protocol.login.downstream.HopBlockedCodec
import org.openrs2.protocol.login.downstream.InvalidLoginPacketCodec
import org.openrs2.protocol.login.downstream.InvalidLoginServerCodec
import org.openrs2.protocol.login.downstream.InvalidSaveCodec
import org.openrs2.protocol.login.downstream.InvalidUsernameOrPasswordCodec
import org.openrs2.protocol.login.downstream.IpBlockedCodec
import org.openrs2.protocol.login.downstream.IpLimitCodec
import org.openrs2.protocol.login.downstream.LockedCodec
import org.openrs2.protocol.login.downstream.LoginDownstream
import org.openrs2.protocol.login.downstream.LoginServerLoadErrorCodec
import org.openrs2.protocol.login.downstream.LoginServerOfflineCodec
import org.openrs2.protocol.login.downstream.MapMembersOnlyCodec
import org.openrs2.protocol.login.downstream.NeedMembersAccountCodec
import org.openrs2.protocol.login.downstream.NoReplyFromLoginServerCodec
import org.openrs2.protocol.login.downstream.ReconnectOkCodec
import org.openrs2.protocol.login.downstream.ServerFullCodec
import org.openrs2.protocol.login.downstream.ServiceUnavailableCodec
import org.openrs2.protocol.login.downstream.ShowVideoAdCodec
import org.openrs2.protocol.login.downstream.SwitchWorldCodec
import org.openrs2.protocol.login.downstream.TooManyAttemptsCodec
import org.openrs2.protocol.login.downstream.UnknownReplyFromLoginServerCodec
import org.openrs2.protocol.login.downstream.UpdateInProgressCodec
import org.openrs2.protocol.login.upstream.CheckWorldSuitabilityCodec
import org.openrs2.protocol.login.upstream.CreateAccountCodec
import org.openrs2.protocol.login.upstream.CreateCheckDateOfBirthCountryCodec
import org.openrs2.protocol.login.upstream.CreateCheckNameCodec
import org.openrs2.protocol.login.upstream.GameLoginCodec
import org.openrs2.protocol.login.upstream.GameReconnectCodec
import org.openrs2.protocol.login.upstream.InitCrossDomainConnectionCodec
import org.openrs2.protocol.login.upstream.InitGameConnectionCodec
import org.openrs2.protocol.login.upstream.InitJaggrabConnectionCodec
import org.openrs2.protocol.login.upstream.InitJs5RemoteConnectionCodec
import org.openrs2.protocol.login.upstream.LoginUpstream
import org.openrs2.protocol.login.upstream.RequestWorldListCodec
import org.openrs2.protocol.world.downstream.WorldListDownstream
import org.openrs2.protocol.world.downstream.WorldListResponseCodec
public object ProtocolModule : AbstractModule() {
public override fun configure() {
install(BufferModule)
install(CryptoModule)
bindProtocol(
CreateDownstream::class.java,
CreateOkCodec::class.java,
CreateServerOfflineCodec::class.java,
CreateServerFullCodec::class.java,
CreateIpLimitCodec::class.java,
DateOfBirthInvalidCodec::class.java,
DateOfBirthFutureCodec::class.java,
DateOfBirthThisYearCodec::class.java,
DateOfBirthLastYearCodec::class.java,
CountryInvalidCodec::class.java,
NameUnavailableCodec::class.java,
NameSuggestionsCodec::class.java,
NameInvalidCodec::class.java,
PasswordInvalidLengthCodec::class.java,
PasswordInvalidCharsCodec::class.java,
PasswordGuessableCodec::class.java,
PasswordGuessable1Codec::class.java,
PasswordSimilarToNameCodec::class.java,
PasswordSimilarToName1Codec::class.java,
PasswordSimilarToName2Codec::class.java,
CreateClientOutOfDateCodec::class.java,
CannotCreateAtThisTimeCodec::class.java,
EmailInvalidCodec::class.java,
EmailInvalid1Codec::class.java,
EmailInvalid2Codec::class.java
)
bindProtocol(
Js5RemoteDownstream::class.java,
Js5OkCodec::class.java,
Js5ClientOutOfDateCodec::class.java,
Js5ServerFullCodec::class.java,
Js5IpLimitCodec::class.java
)
bindProtocol(
LoginUpstream::class.java,
InitGameConnectionCodec::class.java,
InitJs5RemoteConnectionCodec::class.java,
GameLoginCodec::class.java,
InitJaggrabConnectionCodec::class.java,
GameReconnectCodec::class.java,
CreateCheckDateOfBirthCountryCodec::class.java,
CreateCheckNameCodec::class.java,
CreateAccountCodec::class.java,
RequestWorldListCodec::class.java,
CheckWorldSuitabilityCodec::class.java,
InitCrossDomainConnectionCodec::class.java
)
bindProtocol(
LoginDownstream::class.java,
ExchangeSessionKeyCodec::class.java,
ShowVideoAdCodec::class.java,
InvalidUsernameOrPasswordCodec::class.java,
BannedCodec::class.java,
DuplicateCodec::class.java,
ClientOutOfDateCodec::class.java,
ServerFullCodec::class.java,
LoginServerOfflineCodec::class.java,
IpLimitCodec::class.java,
BadSessionIdCodec::class.java,
ForcePasswordChangeCodec::class.java,
NeedMembersAccountCodec::class.java,
InvalidSaveCodec::class.java,
UpdateInProgressCodec::class.java,
ReconnectOkCodec::class.java,
TooManyAttemptsCodec::class.java,
MapMembersOnlyCodec::class.java,
LockedCodec::class.java,
FullscreenMembersOnlyCodec::class.java,
InvalidLoginServerCodec::class.java,
HopBlockedCodec::class.java,
InvalidLoginPacketCodec::class.java,
NoReplyFromLoginServerCodec::class.java,
LoginServerLoadErrorCodec::class.java,
UnknownReplyFromLoginServerCodec::class.java,
IpBlockedCodec::class.java,
ServiceUnavailableCodec::class.java,
DisallowedByScriptCodec::class.java,
ClientMembersOnlyCodec::class.java,
SwitchWorldCodec::class.java
)
bindProtocol(
WorldListDownstream::class.java,
WorldListResponseCodec::class.java
)
}
private fun bindProtocol(
annotation: Class<out Annotation>,
vararg codecs: Class<out PacketCodec<*>>
) {
install(object : PrivateModule() {
override fun configure() {
val binder = Multibinder.newSetBinder(binder(), PACKET_CODEC_TYPE_LITERAL)
for (codec in codecs) {
binder.addBinding().to(codec)
}
bind(Protocol::class.java)
.annotatedWith(annotation)
.to(Protocol::class.java)
expose(Protocol::class.java)
.annotatedWith(annotation)
}
})
}
private val PACKET_CODEC_TYPE_LITERAL = object : TypeLiteral<PacketCodec<*>>() {}
}