Packet: PingMsg

Actual handling of this message is still needed. Not sure what response
to send to the PS client
This commit is contained in:
Chord 2016-07-30 12:47:02 -04:00
parent 004f36219b
commit b9ef1fd725
4 changed files with 78 additions and 3 deletions

View file

@ -349,7 +349,7 @@ object GamePacketOpcode extends Enumeration {
case ObjectCreateMessage_Duplicate => noDecoder(opcode)
case ObjectCreateMessage => game.ObjectCreateMessage.decode
case ObjectDeleteMessage => game.ObjectDeleteMessage.decode
case PingMsg => noDecoder(opcode)
case PingMsg => game.PingMsg.decode
case VehicleStateMessage => noDecoder(opcode)
case FrameVehicleStateMessage => noDecoder(opcode)
case GenericObjectStateMsg => game.GenericObjectStateMsg.decode

View file

@ -0,0 +1,24 @@
// 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._
/** Sent periodically by the PlanetSide client when connected to the Login server. Not encrypted
*
* @param unk1
* @param unk2
*/
final case class PingMsg(unk1 : Long, unk2 : Long) extends PlanetSideGamePacket {
type Packet = PingMsg
def opcode = GamePacketOpcode.PingMsg
def encode = PingMsg.encode(this)
}
object PingMsg extends Marshallable[PingMsg] {
implicit val codec : Codec[PingMsg] = (
("unk1" | uint32L) ::
("unk2" | uint32L)
).as[PingMsg]
}

View file

@ -150,10 +150,12 @@ class GamePacketTest extends Specification {
"decode" in {
PacketCoding.DecodePacket(packet2).require match {
case obj @ ObjectCreateMessage(len, cls, guid, parent) =>
case obj @ ObjectCreateMessage(len, cls, guid, parent, rest) =>
val manualRest = packet2.bits.drop(32 + 1 + 0xb + 16)
len === 29719
cls === 121
guid === 2497
rest === manualRest
parent === None
case default =>
ko
@ -741,5 +743,24 @@ class GamePacketTest extends Specification {
pkt_hitobj mustEqual string_hitobj
}
}
"PingMsg" should {
val packet = hex"1a 00000000 b0360000"
"decode" in {
PacketCoding.DecodePacket(packet).require match {
case PingMsg(unk1, unk2) =>
unk1 === 0
unk2 === 14000
case default =>
ko
}
}
"encode" in {
val msg = PingMsg(0, 14000)
PacketCoding.EncodePacket(msg).require.toByteVector === packet
}
}
}
}