mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-19 18:44:45 +00:00
Packet: ConnectToWorldRequestMessage
This commit is contained in:
parent
034dadc96c
commit
b210df904a
|
|
@ -32,7 +32,7 @@ object GamePacketOpcode extends Enumeration {
|
|||
= Value
|
||||
|
||||
def getPacketDecoder(opcode : GamePacketOpcode.Type) : (BitVector) => Attempt[DecodeResult[PlanetSideGamePacket]] = opcode match {
|
||||
//case ConnectToWorldRequestMessage => game.ConnectToWorldRequestMessage.decode
|
||||
case ConnectToWorldRequestMessage => game.ConnectToWorldRequestMessage.decode
|
||||
case ConnectToWorldMessage => game.ConnectToWorldMessage.decode
|
||||
case LoginMessage => game.LoginMessage.decode
|
||||
case LoginRespMessage => game.LoginRespMessage.decode
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet.game
|
||||
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
||||
// NOTE: this packet has a ton of bytes left over at the end and is usually all zeros
|
||||
// except for the server name and a 0x80 near the end
|
||||
final case class ConnectToWorldRequestMessage(server : String,
|
||||
majorVersion : Long,
|
||||
minorVersion : Long,
|
||||
revision : Long,
|
||||
buildDate : String,
|
||||
unknown : Int) extends PlanetSideGamePacket {
|
||||
type Packet = ConnectToWorldRequestMessage
|
||||
def opcode = GamePacketOpcode.ConnectToWorldRequestMessage
|
||||
def encode = ConnectToWorldRequestMessage.encode(this)
|
||||
}
|
||||
|
||||
object ConnectToWorldRequestMessage extends Marshallable[ConnectToWorldRequestMessage] {
|
||||
implicit val codec : Codec[ConnectToWorldRequestMessage] = (
|
||||
("server_name" | PacketHelpers.encodedString) ::
|
||||
("unknown" | ignore(32*8)) ::
|
||||
("major_version" | uint32L) ::
|
||||
("minor_version" | uint32L) ::
|
||||
("revision" | uint32L) ::
|
||||
("build_date" | PacketHelpers.encodedString) ::
|
||||
("unknown_short" | uint16L)
|
||||
).as[ConnectToWorldRequestMessage]
|
||||
}
|
||||
|
|
@ -10,6 +10,31 @@ class GamePacketTest extends Specification {
|
|||
|
||||
"PlanetSide game packet" in {
|
||||
|
||||
"ConnectToWorldRequestMessage" should {
|
||||
val string = hex"03 8667656D696E69 0000000000000000 00000000 00000000 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 "
|
||||
|
||||
"decode" in {
|
||||
PacketCoding.DecodePacket(string).require match {
|
||||
case ConnectToWorldRequestMessage(serverName, majorVersion, minorVersion, revision, buildDate, unk) =>
|
||||
serverName mustEqual "gemini"
|
||||
majorVersion mustEqual 0
|
||||
minorVersion mustEqual 0
|
||||
revision mustEqual 0
|
||||
buildDate mustEqual ""
|
||||
unk mustEqual 0
|
||||
case default =>
|
||||
true mustEqual false
|
||||
}
|
||||
}
|
||||
|
||||
"encode" in {
|
||||
val msg = ConnectToWorldRequestMessage("gemini", 0, 0, 0, "", 0)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string
|
||||
}
|
||||
}
|
||||
|
||||
"ConnectToWorldMessage" should {
|
||||
val string = hex"04 8667656D696E69 8C36342E33372E3135382E36393C75"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue