From 90060fde21f285c8c69d252288aaa129b8016933 Mon Sep 17 00:00:00 2001 From: Ceikry Date: Sat, 14 May 2022 10:24:47 +0000 Subject: [PATCH] Item sets now appear and can be unpacked at the GE Added a proper mock session that gets used for mock players in unit tests. Allows verifying that certain packets made it to the IoSession (the stage right before sending it to the client) --- .../interaction/inter/ge/ExchangeItemSets.kt | 15 ++--- Server/src/test/kotlin/TestUtils.kt | 55 ++++++++++++++++++- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/Server/src/main/kotlin/rs09/game/interaction/inter/ge/ExchangeItemSets.kt b/Server/src/main/kotlin/rs09/game/interaction/inter/ge/ExchangeItemSets.kt index 16f307f3c..51c1150ef 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/inter/ge/ExchangeItemSets.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/inter/ge/ExchangeItemSets.kt @@ -15,12 +15,6 @@ import rs09.game.interaction.InterfaceListener class ExchangeItemSets : InterfaceListener { override fun defineInterfaceListeners() { - onOpen(Components.EXCHANGE_ITEMSETS_645) { player, _ -> - val listener: InventoryListener - setAttribute(player, "ge-listener", InventoryListener(player).also { listener = it }) - player.inventory.listeners.add(listener) - } - onClose(Components.EXCHANGE_ITEMSETS_645){player, _ -> val listener = getAttribute(player, "ge-listener", null) player.inventory.listeners.remove(listener) @@ -37,6 +31,9 @@ class ExchangeItemSets : InterfaceListener { { openInterface(player, Components.EXCHANGE_ITEMSETS_645) player.interfaceManager.openSingleTab(Component(Components.EXCHANGE_SETS_SIDE_644)) + val listener: InventoryListener + setAttribute(player, "ge-listener", InventoryListener(player).also { listener = it }) + player.inventory.listeners.add(listener) } } @@ -62,9 +59,9 @@ class ExchangeItemSets : InterfaceListener { player.inventory.toArray(), arrayOf("Examine", "Exchange", "Components"), Components.EXCHANGE_SETS_SIDE_644, - 16, - 15, - 10 + 0, + 7, + 4 ) ) diff --git a/Server/src/test/kotlin/TestUtils.kt b/Server/src/test/kotlin/TestUtils.kt index 4b64e950e..c79687b6c 100644 --- a/Server/src/test/kotlin/TestUtils.kt +++ b/Server/src/test/kotlin/TestUtils.kt @@ -1,22 +1,27 @@ import core.cache.Cache +import core.cache.crypto.ISAACCipher +import core.cache.crypto.ISAACPair import core.game.node.entity.player.Player import core.game.node.entity.player.info.PlayerDetails import core.game.node.entity.player.link.IronmanMode import core.game.node.item.Item +import core.net.IoSession +import core.net.packet.IoBuffer import rs09.ServerConstants -import rs09.game.ai.ArtificialSession import rs09.game.content.global.shops.Shop import rs09.game.content.global.shops.ShopItem +import rs09.game.system.SystemLogger import rs09.game.system.config.ConfigParser import rs09.game.system.config.ServerConfigParser -import rs09.game.system.config.XteaParser import rs09.game.world.GameWorld import rs09.game.world.repository.Repository +import rs09.plugin.ClassScanner +import java.nio.ByteBuffer object TestUtils { fun getMockPlayer(name: String, ironman: IronmanMode = IronmanMode.NONE): Player { val p = Player(PlayerDetails(name, name)) - p.details.session = ArtificialSession.getSingleton() + p.details.session = MockSession() p.ironmanManager.mode = ironman Repository.addPlayer(p) return p @@ -45,4 +50,48 @@ object TestUtils { GameWorld.majorUpdateWorker.handleTickActions() } } +} + +class MockSession : IoSession(null, null) { + val receivedPackets = ArrayList() + var disconnected = false + + @Suppress("ArrayInDataClass") + data class Packet(val opcode: Int, val payload: ByteArray) + + override fun getRemoteAddress(): String? { + return "127.0.0.1" + } + + override fun write(context: Any, instant: Boolean) { + if(context is IoBuffer) { + receivedPackets.add(Packet(context.opcode(), context.array())) + } + } + + fun hasPacketReady(opcode: Int) : Boolean { + for(pkt in receivedPackets) if(pkt.opcode == opcode) return true + return false + } + + fun getPacketsWithOpcode(opcode: Int) : ArrayList { + val list = ArrayList() + for(pkt in receivedPackets) if(pkt.opcode == opcode) list.add(pkt.payload) + return list + } + + override fun getIsaacPair(): ISAACPair { + return ISAACPair(ISAACCipher(intArrayOf(0)), ISAACCipher(intArrayOf(0))) + } + + override fun queue(buffer: ByteBuffer?) {} + + override fun write() {} + + override fun disconnect() {disconnected = true} + + fun clear() { + receivedPackets.clear() + } + } \ No newline at end of file