Packet: ObjectDeleteMessage

* Add ObjectDeleteMessage packet

* Add ObjectDeleteMessage test

* Add ObjectDeleteMessage handler stub
This commit is contained in:
tfarley 2016-07-23 23:25:51 -07:00 committed by pschord
parent 427429b34c
commit dc6488edfc
4 changed files with 48 additions and 1 deletions

View file

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

View file

@ -0,0 +1,21 @@
// 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._
final case class ObjectDeleteMessage(object_guid : PlanetSideGUID,
unk1 : Int)
extends PlanetSideGamePacket {
type Packet = ObjectDeleteMessage
def opcode = GamePacketOpcode.ObjectDeleteMessage
def encode = ObjectDeleteMessage.encode(this)
}
object ObjectDeleteMessage extends Marshallable[ObjectDeleteMessage] {
implicit val codec : Codec[ObjectDeleteMessage] = (
("object_guid" | PlanetSideGUID.codec) ::
("unk1" | uintL(3))
).as[ObjectDeleteMessage]
}

View file

@ -369,5 +369,26 @@ class GamePacketTest extends Specification {
pkt mustEqual string
}
}
"ObjectDeleteMessage" should {
val string = hex"19 4C00 00"
"decode" in {
PacketCoding.DecodePacket(string).require match {
case ObjectDeleteMessage(object_guid, unk1) =>
object_guid mustEqual PlanetSideGUID(76)
unk1 mustEqual 0
case default =>
ko
}
}
"encode" in {
val msg = ObjectDeleteMessage(PlanetSideGUID(76), 0)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
}
}
}

View file

@ -179,6 +179,11 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ RequestDestroyMessage(object_guid) =>
log.info("RequestDestroy: " + msg)
// TODO: Make sure this is the correct response in all cases
sendResponse(PacketCoding.CreateGamePacket(0, ObjectDeleteMessage(object_guid, 0)))
case msg @ ObjectDeleteMessage(object_guid, unk1) =>
log.info("ObjectDelete: " + msg)
case default => log.debug(s"Unhandled GamePacket ${pkt}")
}