Refine VNL multi-world with new vector codec

This commit is contained in:
Chord 2019-12-16 13:32:54 -05:00 committed by pschord
parent 37ad423820
commit a54ee2f0b7
5 changed files with 103 additions and 24 deletions

View file

@ -16,9 +16,12 @@ class VNLWorldStatusMessageTest extends Specification {
"decode" in {
PacketCoding.DecodePacket(string).require match {
case VNLWorldStatusMessage(message, _, world, extra_worlds) =>
extra_worlds.length mustEqual 0
case VNLWorldStatusMessage(message, worlds) =>
message mustEqual "Welcome to PlanetSide! "
worlds.length mustEqual 1
val world = worlds(0)
world.name mustEqual "gemini"
world.empireNeed mustEqual PlanetSideEmpire.NC
world.status mustEqual WorldStatus.Up
@ -36,13 +39,14 @@ class VNLWorldStatusMessageTest extends Specification {
}
"encode" in {
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ", 1,
WorldInformation("gemini", WorldStatus.Up, ServerType.Released,
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ",
Vector(WorldInformation("gemini", WorldStatus.Up, ServerType.Released,
Vector(
WorldConnectionInfo(new InetSocketAddress(InetAddress.getByName("64.37.158.69"), 30007))
), PlanetSideEmpire.NC
)
))
)
//0100 04 00 01459e2540377540
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -50,18 +54,56 @@ class VNLWorldStatusMessageTest extends Specification {
pkt mustEqual string
}
"encode and decode empty messages" in {
val string = hex"0584410041004100410000"
val empty_msg = VNLWorldStatusMessage("AAAA", Vector())
val empty_pkt = PacketCoding.EncodePacket(empty_msg).require.toByteVector
empty_pkt mustEqual string
PacketCoding.DecodePacket(string).require match {
case VNLWorldStatusMessage(message, worlds) =>
message mustEqual "AAAA"
worlds.length mustEqual 0
case _ =>
ko
}
}
"encode and decode multiple worlds" in {
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ", 2,
WorldInformation("ABCDABCD1", WorldStatus.Up, ServerType.Released, Vector(), PlanetSideEmpire.NC),
var string = hex" 0597570065006c0063006f006d006500200074006f00200050006c0061006e0065007400530069006400650021002000028941424344414243443101000300006240414243444142434432000002020000"
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ",
Vector(
WorldInformation("ABCDABCD1", WorldStatus.Up, ServerType.Released, Vector(), PlanetSideEmpire.NC),
WorldInformation("ABCDABCD2", WorldStatus.Down, ServerType.Beta, Vector(), PlanetSideEmpire.TR)
))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
println(pkt)
pkt mustEqual string
// TODO: actually test something
ok
string = hex" 0597570065006c0063006f006d006500200074006f00200050006c0061006e0065007400530069006400650021002000028941424344414243443101000300006240414243444142434432000002020000"
PacketCoding.DecodePacket(string).require match {
case VNLWorldStatusMessage(message, worlds) =>
message mustEqual "Welcome to PlanetSide! "
worlds.length mustEqual 2
worlds(0).name mustEqual "ABCDABCD1"
worlds(0).empireNeed mustEqual PlanetSideEmpire.NC
worlds(0).status mustEqual WorldStatus.Up
worlds(0).serverType mustEqual ServerType.Released
worlds(0).connections.length mustEqual 0
worlds(1).name mustEqual "ABCDABCD2"
worlds(1).empireNeed mustEqual PlanetSideEmpire.TR
worlds(1).status mustEqual WorldStatus.Down
worlds(1).serverType mustEqual ServerType.Beta
worlds(1).connections.length mustEqual 0
case _ =>
ko
}
}
}