overhaul of ReplicationStreamMessage to make the object form of the packet less of a hassle to compose; updated tests for RSM

This commit is contained in:
FateJH 2019-05-22 02:17:11 -04:00
parent e44d21520a
commit 6fdc617a87
3 changed files with 698 additions and 763 deletions

View file

@ -19,17 +19,7 @@ class ReplicationStreamMessageTest extends Specification {
val stringUpdateLeaderSize = hex"E6 C0 58 10 C3 00 4A0069006D006D0079006E00 43 FF" val stringUpdateLeaderSize = hex"E6 C0 58 10 C3 00 4A0069006D006D0079006E00 43 FF"
val stringUpdateTaskContinent = hex"E6 C0 58 11 40 80 3200 3 04000000 FF0" val stringUpdateTaskContinent = hex"E6 C0 58 11 40 80 3200 3 04000000 FF0"
val stringUpdateAll = hex"E6 C0 78 30 58 0430 6D00610064006D0075006A00 80 040000000A FF" val stringUpdateAll = hex"E6 C0 78 30 58 0430 6D00610064006D0075006A00 80 040000000A FF"
//failing conditions val stringRemoveUpdate = hex"e6 20201801014aff"
val stringCodecFail = hex"E6 20 A1 19 FE"
val stringListOneFail = hex"E6 B8 01 06 01 00 8B 46007200610067004C0041004E00640049004E004300 84 4600720061006700 0A00 00 01 0A FF"
val stringListTwoFail = hex"E6 B8 01 06 06 00 8E 470065006E006500720061006C0047006F0072006700750074007A00 A1 46004C0059002C0041006C006C002000770065006C0063006F006D0065002C0063006E0020006C0061007300740020006E0069006700680074002100210021002100 0400 00 00 7A 01 83 02 00 45 80 4B004F004B006B006900610073004D00460043004E00 87 5300710075006100640020003200 0400 00 01 6A FF"
val stringUpdateLeaderFail = hex"E6 C0 28 08 44 00 46006100740065004A0048004E004300 FF"
val stringUpdateTaskFail = hex"E6 C0 58 09CE00 52004900500020005000530031002C0020007600690073006900740020005000530046006F00720065007600650072002E006E0065007400 FF"
val stringUpdateContinentFail = hex"E6 C0 38 09 85000001 7F80"
val stringUpdateSizeFail = hex"E6 C0 18 0A B7 F8"
val stringUpdateLeaderSizeFail = hex"E6 C0 58 10 43 00 4A0069006D006D0079006E00 43 FF"
val stringUpdateTaskContinentFail = hex"E6 C0 58 11 C0 80 3200 3 04000000 FF0"
val stringUpdateAllFail = hex"E6 C0 78 30 58 0430 6D00610064006D0075006A00 80 04000001 0A FF"
"SquadInfo (w/out squad_guid)" in { "SquadInfo (w/out squad_guid)" in {
val o = SquadInfo("FragLANdINC", "Frag", PlanetSideZoneID(10), 0, 10) val o = SquadInfo("FragLANdINC", "Frag", PlanetSideZoneID(10), 0, 10)
@ -56,15 +46,27 @@ class ReplicationStreamMessageTest extends Specification {
o.capacity.get mustEqual 7 o.capacity.get mustEqual 7
} }
"SquadInfo (Add)" in {
val o1 = SquadInfo(Some("FragLANdINC"), Some("Frag"), Some(PlanetSideZoneID(10)), None, None)
val o2 = SquadInfo(Some(7), 10)
val o3 = SquadInfo("FragLANdINC", "Frag", PlanetSideZoneID(10), 7, 10)
o1.And(o2) mustEqual o3
}
"SquadInfo (Add, with blocked fields)" in {
val o1 = SquadInfo(Some("FragLANdINC"), None, Some(PlanetSideZoneID(10)), None, Some(10))
val o2 = SquadInfo(Some("Frag"), Some("Frag"), Some(PlanetSideZoneID(15)), Some(7), Some(7))
val o3 = SquadInfo("FragLANdINC", "Frag", PlanetSideZoneID(10), 7, 10)
o1.And(o2) mustEqual o3
}
"decode (clear)" in { "decode (clear)" in {
PacketCoding.DecodePacket(stringListClear).require match { PacketCoding.DecodePacket(stringListClear).require match {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 5 behavior mustEqual 5
behavior2.isDefined mustEqual true behavior2.isDefined mustEqual true
behavior2.get mustEqual 6 behavior2.get mustEqual 6
entries.length mustEqual 1 entries.length mustEqual 0
entries.head.index mustEqual 255
entries.head.listing.isDefined mustEqual false
case _ => case _ =>
ko ko
} }
@ -75,27 +77,21 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 5 behavior mustEqual 5
behavior2.get mustEqual 6 behavior2.get mustEqual 6
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 0 entries.head.index mustEqual 0
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 131 entries.head.listing.get.leader.isDefined mustEqual true
entries.head.listing.get.unk2 mustEqual false entries.head.listing.get.leader.get mustEqual "FragLANdINC"
entries.head.listing.get.unk3.isDefined mustEqual false entries.head.listing.get.task.isDefined mustEqual true
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.task.get mustEqual "Frag"
entries.head.listing.get.info.get.leader.isDefined mustEqual true entries.head.listing.get.zone_id.isDefined mustEqual true
entries.head.listing.get.info.get.leader.get mustEqual "FragLANdINC" entries.head.listing.get.zone_id.get mustEqual PlanetSideZoneID(10)
entries.head.listing.get.info.get.task.isDefined mustEqual true entries.head.listing.get.size.isDefined mustEqual true
entries.head.listing.get.info.get.task.get mustEqual "Frag" entries.head.listing.get.size.get mustEqual 0
entries.head.listing.get.info.get.zone_id.isDefined mustEqual true entries.head.listing.get.capacity.isDefined mustEqual true
entries.head.listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(10) entries.head.listing.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.size.isDefined mustEqual true entries.head.listing.get.squad_guid.isDefined mustEqual true
entries.head.listing.get.info.get.size.get mustEqual 0 entries.head.listing.get.squad_guid.get mustEqual PlanetSideGUID(1)
entries.head.listing.get.info.get.capacity.isDefined mustEqual true
entries.head.listing.get.info.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual true
entries.head.listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(1)
entries(1).index mustEqual 255
entries(1).listing.isDefined mustEqual false
case _ => case _ =>
ko ko
} }
@ -106,28 +102,21 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 5 behavior mustEqual 5
behavior2.get mustEqual 6 behavior2.get mustEqual 6
entries.length mustEqual 3 entries.length mustEqual 2
entries.head.index mustEqual 0 entries.head.index mustEqual 0
entries.head.listing.get.unk1 mustEqual 131 entries.head.listing.get.leader.get mustEqual "GeneralGorgutz"
entries.head.listing.get.unk2 mustEqual false entries.head.listing.get.task.get mustEqual "FLY,All welcome,cn last night!!!!"
entries.head.listing.get.unk3.isDefined mustEqual false entries.head.listing.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries.head.listing.get.info.get.leader.get mustEqual "GeneralGorgutz" entries.head.listing.get.size.get mustEqual 7
entries.head.listing.get.info.get.task.get mustEqual "FLY,All welcome,cn last night!!!!" entries.head.listing.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(4) entries.head.listing.get.squad_guid.get mustEqual PlanetSideGUID(6)
entries.head.listing.get.info.get.size.get mustEqual 7
entries.head.listing.get.info.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(6)
entries(1).index mustEqual 1 entries(1).index mustEqual 1
entries(1).listing.get.unk1 mustEqual 131 entries(1).listing.get.leader.get mustEqual "KOKkiasMFCN"
entries(1).listing.get.unk2 mustEqual false entries(1).listing.get.task.get mustEqual "Squad 2"
entries(1).listing.get.unk3.isDefined mustEqual false entries(1).listing.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries(1).listing.get.info.get.leader.get mustEqual "KOKkiasMFCN" entries(1).listing.get.size.get mustEqual 6
entries(1).listing.get.info.get.task.get mustEqual "Squad 2" entries(1).listing.get.capacity.get mustEqual 10
entries(1).listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(4) entries(1).listing.get.squad_guid.get mustEqual PlanetSideGUID(4)
entries(1).listing.get.info.get.size.get mustEqual 6
entries(1).listing.get.info.get.capacity.get mustEqual 10
entries(1).listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(4)
entries(2).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -138,38 +127,28 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 5 behavior mustEqual 5
behavior2.get mustEqual 6 behavior2.get mustEqual 6
entries.length mustEqual 4 entries.length mustEqual 3
entries.head.index mustEqual 0 entries.head.index mustEqual 0
entries.head.listing.get.unk1 mustEqual 131 entries.head.listing.get.leader.get mustEqual "GeneralGorgutz"
entries.head.listing.get.unk2 mustEqual false entries.head.listing.get.task.get mustEqual "FLY,All welcome,cn last night!!!!"
entries.head.listing.get.unk3.isDefined mustEqual false entries.head.listing.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries.head.listing.get.info.get.leader.get mustEqual "GeneralGorgutz" entries.head.listing.get.size.get mustEqual 7
entries.head.listing.get.info.get.task.get mustEqual "FLY,All welcome,cn last night!!!!" entries.head.listing.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(4) entries.head.listing.get.squad_guid.get mustEqual PlanetSideGUID(6)
entries.head.listing.get.info.get.size.get mustEqual 7
entries.head.listing.get.info.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(6)
entries(1).index mustEqual 1 entries(1).index mustEqual 1
entries(1).listing.get.unk1 mustEqual 131 entries(1).listing.get.leader.get mustEqual "NIGHT88RAVEN"
entries(1).listing.get.unk2 mustEqual false entries(1).listing.get.task.get mustEqual "All Welcome"
entries(1).listing.get.unk3.isDefined mustEqual false entries(1).listing.get.zone_id.get mustEqual PlanetSideZoneID(10)
entries(1).listing.get.info.get.leader.get mustEqual "NIGHT88RAVEN" entries(1).listing.get.size.get mustEqual 4
entries(1).listing.get.info.get.task.get mustEqual "All Welcome" entries(1).listing.get.capacity.get mustEqual 10
entries(1).listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(10) entries(1).listing.get.squad_guid.get mustEqual PlanetSideGUID(3)
entries(1).listing.get.info.get.size.get mustEqual 4
entries(1).listing.get.info.get.capacity.get mustEqual 10
entries(1).listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(3)
entries(2).index mustEqual 2 entries(2).index mustEqual 2
entries(2).listing.get.unk1 mustEqual 131 entries(2).listing.get.leader.get mustEqual "KOKkiasMFCN"
entries(2).listing.get.unk2 mustEqual false entries(2).listing.get.task.get mustEqual "Squad 2"
entries(2).listing.get.unk3.isDefined mustEqual false entries(2).listing.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries(2).listing.get.info.get.leader.get mustEqual "KOKkiasMFCN" entries(2).listing.get.size.get mustEqual 6
entries(2).listing.get.info.get.task.get mustEqual "Squad 2" entries(2).listing.get.capacity.get mustEqual 10
entries(2).listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(4) entries(2).listing.get.squad_guid.get mustEqual PlanetSideGUID(4)
entries(2).listing.get.info.get.size.get mustEqual 6
entries(2).listing.get.info.get.capacity.get mustEqual 10
entries(2).listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(4)
entries(3).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -180,15 +159,9 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 1 behavior mustEqual 1
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 5 entries.head.index mustEqual 5
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual false
entries.head.listing.get.unk1 mustEqual 0
entries.head.listing.get.unk2 mustEqual true
entries.head.listing.get.unk3.isDefined mustEqual true
entries.head.listing.get.unk3.get mustEqual 4
entries.head.listing.get.info.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -199,22 +172,16 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 2 entries.head.index mustEqual 2
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 128 entries.head.listing.get.leader.isDefined mustEqual true
entries.head.listing.get.unk2 mustEqual true entries.head.listing.get.leader.get mustEqual "FateJHNC"
entries.head.listing.get.unk3.isDefined mustEqual true entries.head.listing.get.task.isDefined mustEqual false
entries.head.listing.get.unk3.get mustEqual 0 entries.head.listing.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.leader.isDefined mustEqual true entries.head.listing.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.leader.get mustEqual "FateJHNC" entries.head.listing.get.squad_guid.isDefined mustEqual false
entries.head.listing.get.info.get.task.isDefined mustEqual false
entries.head.listing.get.info.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -225,22 +192,16 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 5 entries.head.index mustEqual 5
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 128 entries.head.listing.get.leader.isDefined mustEqual false
entries.head.listing.get.unk2 mustEqual true entries.head.listing.get.task.isDefined mustEqual true
entries.head.listing.get.unk3.isDefined mustEqual true entries.head.listing.get.task.get mustEqual "RIP PS1, visit PSForever.net"
entries.head.listing.get.unk3.get mustEqual 1 entries.head.listing.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.leader.isDefined mustEqual false entries.head.listing.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.task.isDefined mustEqual true entries.head.listing.get.squad_guid.isDefined mustEqual false
entries.head.listing.get.info.get.task.get mustEqual "RIP PS1, visit PSForever.net"
entries.head.listing.get.info.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -251,22 +212,16 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 3 entries.head.index mustEqual 3
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 128 entries.head.listing.get.leader.isDefined mustEqual false
entries.head.listing.get.unk2 mustEqual true entries.head.listing.get.task.isDefined mustEqual false
entries.head.listing.get.unk3.isDefined mustEqual true entries.head.listing.get.zone_id.isDefined mustEqual true
entries.head.listing.get.unk3.get mustEqual 1 entries.head.listing.get.zone_id.get mustEqual PlanetSideZoneID(10)
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.leader.isDefined mustEqual false entries.head.listing.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.task.isDefined mustEqual false entries.head.listing.get.squad_guid.isDefined mustEqual false
entries.head.listing.get.info.get.zone_id.isDefined mustEqual true
entries.head.listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(10)
entries.head.listing.get.info.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -277,22 +232,16 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 1 entries.head.index mustEqual 1
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 128 entries.head.listing.get.leader.isDefined mustEqual false
entries.head.listing.get.unk2 mustEqual true entries.head.listing.get.task.isDefined mustEqual false
entries.head.listing.get.unk3.isDefined mustEqual true entries.head.listing.get.zone_id.isDefined mustEqual false
entries.head.listing.get.unk3.get mustEqual 2 entries.head.listing.get.size.isDefined mustEqual true
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.size.get mustEqual 6
entries.head.listing.get.info.get.leader.isDefined mustEqual false entries.head.listing.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.task.isDefined mustEqual false entries.head.listing.get.squad_guid.isDefined mustEqual false
entries.head.listing.get.info.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.get.size.isDefined mustEqual true
entries.head.listing.get.info.get.size.get mustEqual 6
entries.head.listing.get.info.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -303,23 +252,17 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 5 entries.head.index mustEqual 5
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 129 entries.head.listing.get.leader.isDefined mustEqual true
entries.head.listing.get.unk2 mustEqual false entries.head.listing.get.leader.get mustEqual "Jimmyn"
entries.head.listing.get.unk3.isDefined mustEqual true entries.head.listing.get.task.isDefined mustEqual false
entries.head.listing.get.unk3.get mustEqual 0 entries.head.listing.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.size.isDefined mustEqual true
entries.head.listing.get.info.get.leader.isDefined mustEqual true entries.head.listing.get.size.get mustEqual 3
entries.head.listing.get.info.get.leader.get mustEqual "Jimmyn" entries.head.listing.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.task.isDefined mustEqual false entries.head.listing.get.squad_guid.isDefined mustEqual false
entries.head.listing.get.info.get.zone_id.isDefined mustEqual false
entries.head.listing.get.info.get.size.isDefined mustEqual true
entries.head.listing.get.info.get.size.get mustEqual 3
entries.head.listing.get.info.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -330,23 +273,17 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 5 entries.head.index mustEqual 5
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 129 entries.head.listing.get.leader.isDefined mustEqual false
entries.head.listing.get.unk2 mustEqual false entries.head.listing.get.task.isDefined mustEqual true
entries.head.listing.get.unk3.isDefined mustEqual true entries.head.listing.get.task.get mustEqual "2"
entries.head.listing.get.unk3.get mustEqual 1 entries.head.listing.get.zone_id.isDefined mustEqual true
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries.head.listing.get.info.get.leader.isDefined mustEqual false entries.head.listing.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.task.isDefined mustEqual true entries.head.listing.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.task.get mustEqual "2" entries.head.listing.get.squad_guid.isDefined mustEqual false
entries.head.listing.get.info.get.zone_id.isDefined mustEqual true
entries.head.listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries.head.listing.get.info.get.size.isDefined mustEqual false
entries.head.listing.get.info.get.capacity.isDefined mustEqual false
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual false
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
@ -357,60 +294,57 @@ class ReplicationStreamMessageTest extends Specification {
case ReplicationStreamMessage(behavior, behavior2, entries) => case ReplicationStreamMessage(behavior, behavior2, entries) =>
behavior mustEqual 6 behavior mustEqual 6
behavior2.isDefined mustEqual false behavior2.isDefined mustEqual false
entries.length mustEqual 2 entries.length mustEqual 1
entries.head.index mustEqual 7 entries.head.index mustEqual 7
entries.head.listing.isDefined mustEqual true entries.head.listing.isDefined mustEqual true
entries.head.listing.get.unk1 mustEqual 131 entries.head.listing.get.leader.isDefined mustEqual true
entries.head.listing.get.unk2 mustEqual false entries.head.listing.get.leader.get mustEqual "madmuj"
entries.head.listing.get.unk3.isDefined mustEqual false entries.head.listing.get.task.isDefined mustEqual true
entries.head.listing.get.info.isDefined mustEqual true entries.head.listing.get.task.get mustEqual ""
entries.head.listing.get.info.get.leader.isDefined mustEqual true entries.head.listing.get.zone_id.isDefined mustEqual true
entries.head.listing.get.info.get.leader.get mustEqual "madmuj" entries.head.listing.get.zone_id.get mustEqual PlanetSideZoneID(4)
entries.head.listing.get.info.get.task.isDefined mustEqual true entries.head.listing.get.size.isDefined mustEqual true
entries.head.listing.get.info.get.task.get mustEqual "" entries.head.listing.get.size.get mustEqual 0
entries.head.listing.get.info.get.zone_id.isDefined mustEqual true entries.head.listing.get.capacity.isDefined mustEqual true
entries.head.listing.get.info.get.zone_id.get mustEqual PlanetSideZoneID(4) entries.head.listing.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.size.isDefined mustEqual true entries.head.listing.get.squad_guid.isDefined mustEqual true
entries.head.listing.get.info.get.size.get mustEqual 0 entries.head.listing.get.squad_guid.get mustEqual PlanetSideGUID(11)
entries.head.listing.get.info.get.capacity.isDefined mustEqual true
entries.head.listing.get.info.get.capacity.get mustEqual 10
entries.head.listing.get.info.get.squad_guid.isDefined mustEqual true
entries.head.listing.get.info.get.squad_guid.get mustEqual PlanetSideGUID(11)
entries(1).index mustEqual 255
case _ => case _ =>
ko ko
} }
} }
"decode (fails)" in { "decode (remove 1 and update 0)" in {
PacketCoding.DecodePacket(stringCodecFail).isFailure mustEqual true PacketCoding.DecodePacket(stringRemoveUpdate).require match {
//PacketCoding.DecodePacket(stringListOneFail).isFailure mustEqual true -> used to fail case ReplicationStreamMessage(behavior, behavior2, entries) =>
//PacketCoding.DecodePacket(stringListTwoFail).isFailure mustEqual true -> used to fail behavior mustEqual 1
PacketCoding.DecodePacket(stringUpdateLeaderFail).isFailure mustEqual true behavior2.isDefined mustEqual false
PacketCoding.DecodePacket(stringUpdateTaskFail).isFailure mustEqual true entries.length mustEqual 2
//PacketCoding.DecodePacket(stringUpdateContinentFail).isFailure mustEqual true -> used to fail entries.head.index mustEqual 1
PacketCoding.DecodePacket(stringUpdateSizeFail).isFailure mustEqual true entries.head.listing.isDefined mustEqual false
PacketCoding.DecodePacket(stringUpdateLeaderSizeFail).isFailure mustEqual true entries(1).listing.get.leader.isDefined mustEqual false
PacketCoding.DecodePacket(stringUpdateTaskContinentFail).isFailure mustEqual true entries(1).listing.get.task.isDefined mustEqual false
//PacketCoding.DecodePacket(stringUpdateAllFail).isFailure mustEqual true -> used to fail entries(1).listing.get.zone_id.isDefined mustEqual false
entries(1).listing.get.size.isDefined mustEqual true
entries(1).listing.get.size.get mustEqual 10
entries(1).listing.get.capacity.isDefined mustEqual false
entries(1).listing.get.squad_guid.isDefined mustEqual false
case _ =>
ko
}
} }
"encode (clear)" in { "encode (clear)" in {
val msg = ReplicationStreamMessage(5, Some(6), val msg = ReplicationStreamMessage(5, Some(6), Vector.empty)
Vector(
SquadListing(255)
)
)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual stringListClear pkt mustEqual stringListClear
} }
"encode (one)" in { "encode (one)" in {
val msg = ReplicationStreamMessage(5, Some(6), val msg = ReplicationStreamMessage(
Vector( Seq(
SquadListing(0, Some(SquadHeader(131, false, None, SquadInfo("FragLANdINC", "Frag", PlanetSideZoneID(10), 0, 10, PlanetSideGUID(1))))), SquadInfo("FragLANdINC", "Frag", PlanetSideZoneID(10), 0, 10, PlanetSideGUID(1))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -419,11 +353,10 @@ class ReplicationStreamMessageTest extends Specification {
} }
"encode (two)" in { "encode (two)" in {
val msg = ReplicationStreamMessage(5, Some(6), val msg = ReplicationStreamMessage(
Vector( Seq(
SquadListing(0, Some(SquadHeader(131, false, None, SquadInfo("GeneralGorgutz", "FLY,All welcome,cn last night!!!!", PlanetSideZoneID(4), 7, 10, PlanetSideGUID(6))))), SquadInfo("GeneralGorgutz", "FLY,All welcome,cn last night!!!!", PlanetSideZoneID(4), 7, 10, PlanetSideGUID(6)),
SquadListing(1, Some(SquadHeader(131, false, None, SquadInfo("KOKkiasMFCN", "Squad 2", PlanetSideZoneID(4), 6, 10, PlanetSideGUID(4))))), SquadInfo("KOKkiasMFCN", "Squad 2", PlanetSideZoneID(4), 6, 10, PlanetSideGUID(4))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -432,12 +365,11 @@ class ReplicationStreamMessageTest extends Specification {
} }
"encode (three)" in { "encode (three)" in {
val msg = ReplicationStreamMessage(5, Some(6), val msg = ReplicationStreamMessage(
Vector( Seq(
SquadListing(0, Some(SquadHeader(131, false, None, SquadInfo("GeneralGorgutz", "FLY,All welcome,cn last night!!!!", PlanetSideZoneID(4), 7, 10, PlanetSideGUID(6))))), SquadInfo("GeneralGorgutz", "FLY,All welcome,cn last night!!!!", PlanetSideZoneID(4), 7, 10, PlanetSideGUID(6)),
SquadListing(1, Some(SquadHeader(131, false, None, SquadInfo("NIGHT88RAVEN", "All Welcome", PlanetSideZoneID(10), 4, 10, PlanetSideGUID(3))))), SquadInfo("NIGHT88RAVEN", "All Welcome", PlanetSideZoneID(10), 4, 10, PlanetSideGUID(3)),
SquadListing(2, Some(SquadHeader(131, false, None, SquadInfo("KOKkiasMFCN", "Squad 2", PlanetSideZoneID(4), 6, 10, PlanetSideGUID(4))))), SquadInfo("KOKkiasMFCN", "Squad 2", PlanetSideZoneID(4), 6, 10, PlanetSideGUID(4))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -448,8 +380,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (remove)" in { "encode (remove)" in {
val msg = ReplicationStreamMessage(1, None, val msg = ReplicationStreamMessage(1, None,
Vector( Vector(
SquadListing(5, Some(SquadHeader(0, true, Some(4)))), SquadListing(5, None)
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -460,8 +391,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update leader)" in { "encode (update leader)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(2, Some(SquadHeader(128, true, Some(0), SquadInfo("FateJHNC", None)))), SquadListing(2, SquadInfo("FateJHNC"))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -472,8 +402,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update task)" in { "encode (update task)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(5, Some(SquadHeader(128, true, Some(1), SquadInfo(None, "RIP PS1, visit PSForever.net")))), SquadListing(5, SquadInfo(None, "RIP PS1, visit PSForever.net"))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -484,8 +413,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update continent)" in { "encode (update continent)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(3, Some(SquadHeader(128, true, Some(1), SquadInfo(PlanetSideZoneID(10))))), SquadListing(3, SquadInfo(PlanetSideZoneID(10)))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -496,8 +424,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update size)" in { "encode (update size)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(1, Some(SquadHeader(128, true, Some(2), SquadInfo(6, None)))), SquadListing(1, SquadInfo(6))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -508,8 +435,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update leader and size)" in { "encode (update leader and size)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(5, Some(SquadHeader(129, false, Some(0), SquadInfo("Jimmyn", 3)))), SquadListing(5, SquadInfo("Jimmyn").And(SquadInfo(3)))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -520,8 +446,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update task and continent)" in { "encode (update task and continent)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(5, Some(SquadHeader(129, false, Some(1), SquadInfo("2", PlanetSideZoneID(4))))), SquadListing(5, SquadInfo(None, "2").And(SquadInfo(PlanetSideZoneID(4))))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -532,8 +457,7 @@ class ReplicationStreamMessageTest extends Specification {
"encode (update all)" in { "encode (update all)" in {
val msg = ReplicationStreamMessage(6, None, val msg = ReplicationStreamMessage(6, None,
Vector( Vector(
SquadListing(7, Some(SquadHeader(131, false, None, SquadInfo("madmuj", "", PlanetSideZoneID(4), 0, 10, PlanetSideGUID(11))))), SquadListing(7, SquadInfo("madmuj", "", PlanetSideZoneID(4), 0, 10, PlanetSideGUID(11)))
SquadListing(255)
) )
) )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
@ -541,116 +465,15 @@ class ReplicationStreamMessageTest extends Specification {
pkt mustEqual stringUpdateAll pkt mustEqual stringUpdateAll
} }
"encode (fails)" in { "encode (remove 1 and update 0)" in {
//encode codec fail val msg = ReplicationStreamMessage(1, None,
PacketCoding.EncodePacket( Vector(
ReplicationStreamMessage(1, None, SquadListing(1, None),
Vector( SquadListing(0, SquadInfo(10))
SquadListing(5, Some(SquadHeader(0, false, Some(4)))),
SquadListing(255)
)
) )
).isFailure mustEqual true )
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
//encode one pkt mustEqual stringRemoveUpdate
PacketCoding.EncodePacket(
ReplicationStreamMessage(5, Some(6),
Vector(
SquadListing(0, Some(SquadHeader(131, false, None, Some(SquadInfo(Some("FragLANdINC"), Some("Frag"), None, Some(0),Some(10), Some(PlanetSideGUID(1))))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode two
PacketCoding.EncodePacket(
ReplicationStreamMessage(5, Some(6),
Vector(
SquadListing(0, Some(SquadHeader(131, false, None, SquadInfo("GeneralGorgutz", "FLY,All welcome,cn last night!!!!", PlanetSideZoneID(4), 7, 10, PlanetSideGUID(6))))),
SquadListing(1, Some(SquadHeader(131, false, None, Some(SquadInfo(Some("KOKkiasMFCN"), Some("Squad 2"), None, Some(6), Some(10), Some(PlanetSideGUID(4))))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode leader
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(2, Some(SquadHeader(128, true, Some(0), Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode task
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(5, Some(SquadHeader(128, true, Some(1), Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode continent
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(3, Some(SquadHeader(128, true, Some(1), Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode task or continent
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(3, Some(SquadHeader(128, true, Some(1), Some(SquadInfo(None, Some(""), Some(PlanetSideZoneID(10)), None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode size
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(1, Some(SquadHeader(128, true, Some(2), Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode leader and size
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(5, Some(SquadHeader(129, false, Some(0), Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode task and continent
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(5, Some(SquadHeader(129, false, Some(1), Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
//encode all
PacketCoding.EncodePacket(
ReplicationStreamMessage(6, None,
Vector(
SquadListing(7, Some(SquadHeader(131, false, None, Some(SquadInfo(None, None, None, None, None, None))))),
SquadListing(255)
)
)
).isFailure mustEqual true
} }
} }

View file

@ -798,7 +798,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
traveler = new Traveler(self, continent.Id) traveler = new Traveler(self, continent.Id)
//PropertyOverrideMessage //PropertyOverrideMessage
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks
sendResponse(ReplicationStreamMessage(5, Some(6), Vector(SquadListing()))) //clear squad list sendResponse(ReplicationStreamMessage(5, Some(6), Vector.empty)) //clear squad list
sendResponse(FriendsResponse(FriendAction.InitializeFriendList, 0, true, true, Nil)) sendResponse(FriendsResponse(FriendAction.InitializeFriendList, 0, true, true, Nil))
sendResponse(FriendsResponse(FriendAction.InitializeIgnoreList, 0, true, true, Nil)) sendResponse(FriendsResponse(FriendAction.InitializeIgnoreList, 0, true, true, Nil))
avatarService ! Service.Join(avatar.name) //channel will be player.Name avatarService ! Service.Join(avatar.name) //channel will be player.Name
@ -3003,7 +3003,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
sendResponse(TimeOfDayMessage(1191182336)) sendResponse(TimeOfDayMessage(1191182336))
//custom //custom
sendResponse(ContinentalLockUpdateMessage(13, PlanetSideEmpire.VS)) // "The VS have captured the VS Sanctuary." sendResponse(ContinentalLockUpdateMessage(13, PlanetSideEmpire.VS)) // "The VS have captured the VS Sanctuary."
sendResponse(ReplicationStreamMessage(5, Some(6), Vector(SquadListing()))) //clear squad list sendResponse(ReplicationStreamMessage(5, Some(6), Vector.empty)) //clear squad list
sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks
//(0 to 255).foreach(i => { sendResponse(SetEmpireMessage(PlanetSideGUID(i), PlanetSideEmpire.VS)) }) //(0 to 255).foreach(i => { sendResponse(SetEmpireMessage(PlanetSideGUID(i), PlanetSideEmpire.VS)) })