2016-03-04 15:14:50 -05:00
|
|
|
// Copyright (c) 2016 PSForever.net to present
|
2016-02-05 03:19:13 -05:00
|
|
|
package psforever.net
|
|
|
|
|
|
|
|
|
|
import scodec.{Err, DecodeResult, Attempt, Codec}
|
|
|
|
|
import scodec.bits.BitVector
|
|
|
|
|
import scodec.codecs._
|
|
|
|
|
|
|
|
|
|
object GamePacketOpcode extends Enumeration {
|
|
|
|
|
type Type = Value
|
|
|
|
|
val
|
|
|
|
|
|
2016-03-04 13:00:03 -05:00
|
|
|
// Opcodes should have a marker every 10 (decimal)
|
2016-02-05 03:19:13 -05:00
|
|
|
// OPCODE 0
|
|
|
|
|
Unknown0,
|
|
|
|
|
LoginMessage,
|
|
|
|
|
LoginRespMessage,
|
|
|
|
|
Unknown3,
|
|
|
|
|
ConnectToWorldMessage,
|
2016-03-04 13:00:03 -05:00
|
|
|
VNLWorldStatusMessage,
|
2016-02-05 03:19:13 -05:00
|
|
|
UnknownMessage6,
|
|
|
|
|
UnknownMessage7,
|
|
|
|
|
PlayerStateMessage,
|
|
|
|
|
UnknownMessage9,
|
|
|
|
|
|
|
|
|
|
// OPCODE 10
|
|
|
|
|
HitHint,
|
|
|
|
|
DamageMessage,
|
|
|
|
|
DestroyMessage,
|
|
|
|
|
ReloadMessage,
|
|
|
|
|
MountVehicleMsg,
|
|
|
|
|
DismountVehicleMsg
|
|
|
|
|
= Value
|
|
|
|
|
|
|
|
|
|
def getPacketDecoder(opcode : GamePacketOpcode.Type) : (BitVector) => Attempt[DecodeResult[PlanetSideGamePacket]] = opcode match {
|
|
|
|
|
case LoginMessage => psforever.net.LoginMessage.decode
|
|
|
|
|
case LoginRespMessage => psforever.net.LoginRespMessage.decode
|
2016-03-04 13:00:03 -05:00
|
|
|
case VNLWorldStatusMessage => psforever.net.VNLWorldStatusMessage.decode
|
2016-02-05 03:19:13 -05:00
|
|
|
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for game packet ${opcode}"))
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-04 13:00:03 -05:00
|
|
|
implicit val codec: Codec[this.Value] = PacketHelpers.createEnumerationCodec(this, uint8L)
|
2016-02-05 03:19:13 -05:00
|
|
|
}
|