Packet: ActionResultMessage

This commit is contained in:
Chord 2016-06-04 13:22:25 -04:00
parent f6d84791e6
commit 9f66602298
3 changed files with 54 additions and 1 deletions

View file

@ -361,7 +361,7 @@ object GamePacketOpcode extends Enumeration {
// OPCODE 30
case UnknownMessage30 => noDecoder(opcode)
case ActionResultMessage => noDecoder(opcode)
case ActionResultMessage => game.ActionResultMessage.decode
case UnknownMessage32 => noDecoder(opcode)
case ActionProgressMessage => noDecoder(opcode)
case ActionCancelMessage => noDecoder(opcode)

View file

@ -0,0 +1,27 @@
// 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._
/**
* Is sent by the server when the client has performed an action from a menu item
* (i.e create character, delete character, etc...)
*/
final case class ActionResultMessage(successfull : Boolean, errorCode : Option[Long])
extends PlanetSideGamePacket {
type Packet = ActionResultMessage
def opcode = GamePacketOpcode.ActionResultMessage
def encode = ActionResultMessage.encode(this)
}
object ActionResultMessage extends Marshallable[ActionResultMessage] {
implicit val codec : Codec[ActionResultMessage] = (
("successful" | bool) >>:~ { res =>
// if not successful, look for an error code
conditional(!res, "error_code" | uint32L).hlist
}
).as[ActionResultMessage]
}

View file

@ -4,6 +4,7 @@ import java.net.{InetAddress, InetSocketAddress}
import org.specs2.mutable._
import net.psforever.packet._
import net.psforever.packet.game._
import scodec.Attempt.Successful
import scodec.bits._
class GamePacketTest extends Specification {
@ -116,5 +117,30 @@ class GamePacketTest extends Specification {
}
}
"ActionResultMessage" should {
"decode" in {
PacketCoding.DecodePacket(hex"1f 80").require match {
case ActionResultMessage(okay, code) =>
okay === true
code === None
case default =>
ko
}
PacketCoding.DecodePacket((hex"1f".bits ++ bin"0" ++ hex"01000000".bits).toByteVector).require match {
case ActionResultMessage(okay, code) =>
okay === false
code === Some(1)
case default =>
ko
}
}
"encode" in {
PacketCoding.EncodePacket(ActionResultMessage(true, None)).require.toByteVector === hex"1f 80"
PacketCoding.EncodePacket(ActionResultMessage(false, Some(1))).require.toByteVector ===
(hex"1f".bits ++ bin"0" ++ hex"01000000".bits).toByteVector
}
}
}
}