From bb48ca06638b1642fc4c509536efece63bdbb413 Mon Sep 17 00:00:00 2001 From: austin Date: Mon, 26 May 2025 11:06:33 -0400 Subject: [PATCH] custom parser flow for block messages --- .../net/client/ClientNetworking.java | 16 ++ .../net/parser/net/message/AuthMessage.java | 11 +- .../parser/net/message/CharacterMessage.java | 19 ++- .../net/parser/net/message/CombatMessage.java | 5 +- .../net/parser/net/message/EntityMessage.java | 25 +-- .../parser/net/message/InventoryMessage.java | 37 ++-- .../net/parser/net/message/LoreMessage.java | 7 +- .../parser/net/message/NetworkMessage.java | 161 +++++++++--------- .../net/parser/net/message/PlayerMessage.java | 7 +- .../net/parser/net/message/ServerMessage.java | 9 +- .../net/message/SynchronizationMessage.java | 25 +-- .../parser/net/message/TerrainMessage.java | 53 +++--- .../net/parser/net/raw/NetworkParser.java | 44 +++-- src/net/terrain.json | 1 + 14 files changed, 242 insertions(+), 178 deletions(-) diff --git a/src/main/java/electrosphere/net/client/ClientNetworking.java b/src/main/java/electrosphere/net/client/ClientNetworking.java index 0ae5b9be..aa76533b 100644 --- a/src/main/java/electrosphere/net/client/ClientNetworking.java +++ b/src/main/java/electrosphere/net/client/ClientNetworking.java @@ -4,9 +4,13 @@ import electrosphere.engine.Globals; import electrosphere.logger.LoggerInterface; import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.net.parser.net.message.ServerMessage; +import electrosphere.net.parser.net.message.TerrainMessage; +import electrosphere.net.parser.net.message.TypeBytes; import electrosphere.net.parser.net.message.NetworkMessage.MessageType; import electrosphere.net.parser.net.message.ServerMessage.ServerMessageType; import electrosphere.net.parser.net.raw.NetworkParser; +import electrosphere.net.parser.util.ByteStreamUtils; +import io.github.studiorailgun.CircularByteBuffer; import java.io.IOException; import java.io.InputStream; @@ -167,6 +171,18 @@ public class ClientNetworking implements Runnable { //create parser parser = new NetworkParser(inputStream,outputStream); + + // + //register custom message parsers + parser.registerCustomParser(TypeBytes.MESSAGE_TYPE_TERRAIN, TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA, (NetworkMessage message, CircularByteBuffer buff) -> { + TerrainMessage castMessage = (TerrainMessage)message; + castMessage.setworldX(ByteStreamUtils.popIntFromByteQueue(buff)); + castMessage.setworldY(ByteStreamUtils.popIntFromByteQueue(buff)); + castMessage.setworldZ(ByteStreamUtils.popIntFromByteQueue(buff)); + castMessage.setchunkResolution(ByteStreamUtils.popIntFromByteQueue(buff)); + castMessage.sethomogenousValue(ByteStreamUtils.popIntFromByteQueue(buff)); + castMessage.setchunkData(ByteStreamUtils.popByteArrayFromByteQueue(buff)); + }); diff --git a/src/main/java/electrosphere/net/parser/net/message/AuthMessage.java b/src/main/java/electrosphere/net/parser/net/message/AuthMessage.java index 5129936d..02c72309 100644 --- a/src/main/java/electrosphere/net/parser/net/message/AuthMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/AuthMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class AuthMessage extends NetworkMessage { /** @@ -117,7 +120,7 @@ public class AuthMessage extends NetworkMessage { /** * Parses a message of type AuthRequest */ - public static AuthMessage parseAuthRequestMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static AuthMessage parseAuthRequestMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); rVal.messageType = AuthMessageType.AUTHREQUEST; AuthMessage.stripPacketHeader(byteBuffer); @@ -170,7 +173,7 @@ public class AuthMessage extends NetworkMessage { /** * Parses a message of type AuthDetails */ - public static AuthMessage parseAuthDetailsMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static AuthMessage parseAuthDetailsMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); rVal.messageType = AuthMessageType.AUTHDETAILS; AuthMessage.stripPacketHeader(byteBuffer); @@ -192,7 +195,7 @@ public class AuthMessage extends NetworkMessage { /** * Parses a message of type AuthSuccess */ - public static AuthMessage parseAuthSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static AuthMessage parseAuthSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); rVal.messageType = AuthMessageType.AUTHSUCCESS; AuthMessage.stripPacketHeader(byteBuffer); @@ -210,7 +213,7 @@ public class AuthMessage extends NetworkMessage { /** * Parses a message of type AuthFailure */ - public static AuthMessage parseAuthFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static AuthMessage parseAuthFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); rVal.messageType = AuthMessageType.AUTHFAILURE; AuthMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/CharacterMessage.java b/src/main/java/electrosphere/net/parser/net/message/CharacterMessage.java index 12d1e861..d01324d2 100644 --- a/src/main/java/electrosphere/net/parser/net/message/CharacterMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/CharacterMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class CharacterMessage extends NetworkMessage { /** @@ -118,7 +121,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type RequestCharacterList */ - public static CharacterMessage parseRequestCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseRequestCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.REQUESTCHARACTERLIST; CharacterMessage.stripPacketHeader(byteBuffer); @@ -158,7 +161,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type ResponseCharacterList */ - public static CharacterMessage parseResponseCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseResponseCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.RESPONSECHARACTERLIST; CharacterMessage.stripPacketHeader(byteBuffer); @@ -200,7 +203,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type RequestCreateCharacter */ - public static CharacterMessage parseRequestCreateCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseRequestCreateCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.REQUESTCREATECHARACTER; CharacterMessage.stripPacketHeader(byteBuffer); @@ -220,7 +223,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type ResponseCreateCharacterSuccess */ - public static CharacterMessage parseResponseCreateCharacterSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseResponseCreateCharacterSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.RESPONSECREATECHARACTERSUCCESS; CharacterMessage.stripPacketHeader(byteBuffer); @@ -238,7 +241,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type ResponseCreateCharacterFailure */ - public static CharacterMessage parseResponseCreateCharacterFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseResponseCreateCharacterFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.RESPONSECREATECHARACTERFAILURE; CharacterMessage.stripPacketHeader(byteBuffer); @@ -278,7 +281,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type RequestSpawnCharacter */ - public static CharacterMessage parseRequestSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseRequestSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.REQUESTSPAWNCHARACTER; CharacterMessage.stripPacketHeader(byteBuffer); @@ -320,7 +323,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type ResponseSpawnCharacter */ - public static CharacterMessage parseResponseSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseResponseSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.RESPONSESPAWNCHARACTER; CharacterMessage.stripPacketHeader(byteBuffer); @@ -340,7 +343,7 @@ public class CharacterMessage extends NetworkMessage { /** * Parses a message of type EditorSwap */ - public static CharacterMessage parseEditorSwapMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CharacterMessage parseEditorSwapMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); rVal.messageType = CharacterMessageType.EDITORSWAP; CharacterMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/CombatMessage.java b/src/main/java/electrosphere/net/parser/net/message/CombatMessage.java index 84b3d70e..c5ed85e5 100644 --- a/src/main/java/electrosphere/net/parser/net/message/CombatMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/CombatMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class CombatMessage extends NetworkMessage { /** @@ -299,7 +302,7 @@ public class CombatMessage extends NetworkMessage { /** * Parses a message of type serverReportHitboxCollision */ - public static CombatMessage parseserverReportHitboxCollisionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static CombatMessage parseserverReportHitboxCollisionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ CombatMessage rVal = (CombatMessage)pool.get(MessageType.COMBAT_MESSAGE); rVal.messageType = CombatMessageType.SERVERREPORTHITBOXCOLLISION; CombatMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java b/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java index a3022b4d..08731aad 100644 --- a/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class EntityMessage extends NetworkMessage { /** @@ -715,7 +718,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type Create */ - public static EntityMessage parseCreateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseCreateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.CREATE; EntityMessage.stripPacketHeader(byteBuffer); @@ -755,7 +758,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type moveUpdate */ - public static EntityMessage parsemoveUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parsemoveUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.MOVEUPDATE; EntityMessage.stripPacketHeader(byteBuffer); @@ -797,7 +800,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type attackUpdate */ - public static EntityMessage parseattackUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseattackUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.ATTACKUPDATE; EntityMessage.stripPacketHeader(byteBuffer); @@ -835,7 +838,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type startAttack */ - public static EntityMessage parsestartAttackMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parsestartAttackMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.STARTATTACK; EntityMessage.stripPacketHeader(byteBuffer); @@ -853,7 +856,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type Kill */ - public static EntityMessage parseKillMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseKillMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.KILL; EntityMessage.stripPacketHeader(byteBuffer); @@ -875,7 +878,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type Destroy */ - public static EntityMessage parseDestroyMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseDestroyMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.DESTROY; EntityMessage.stripPacketHeader(byteBuffer); @@ -895,7 +898,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type setProperty */ - public static EntityMessage parsesetPropertyMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parsesetPropertyMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.SETPROPERTY; EntityMessage.stripPacketHeader(byteBuffer); @@ -949,7 +952,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type attachEntityToEntity */ - public static EntityMessage parseattachEntityToEntityMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseattachEntityToEntityMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.ATTACHENTITYTOENTITY; EntityMessage.stripPacketHeader(byteBuffer); @@ -973,7 +976,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type updateEntityViewDir */ - public static EntityMessage parseupdateEntityViewDirMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseupdateEntityViewDirMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.UPDATEENTITYVIEWDIR; EntityMessage.stripPacketHeader(byteBuffer); @@ -1001,7 +1004,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type syncPhysics */ - public static EntityMessage parsesyncPhysicsMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parsesyncPhysicsMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.SYNCPHYSICS; EntityMessage.stripPacketHeader(byteBuffer); @@ -1086,7 +1089,7 @@ public class EntityMessage extends NetworkMessage { /** * Parses a message of type interact */ - public static EntityMessage parseinteractMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static EntityMessage parseinteractMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); rVal.messageType = EntityMessageType.INTERACT; EntityMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/InventoryMessage.java b/src/main/java/electrosphere/net/parser/net/message/InventoryMessage.java index d11b5fb7..7fe0865a 100644 --- a/src/main/java/electrosphere/net/parser/net/message/InventoryMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/InventoryMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class InventoryMessage extends NetworkMessage { /** @@ -414,7 +417,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type addItemToInventory */ - public static InventoryMessage parseaddItemToInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseaddItemToInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.ADDITEMTOINVENTORY; InventoryMessage.stripPacketHeader(byteBuffer); @@ -438,7 +441,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type removeItemFromInventory */ - public static InventoryMessage parseremoveItemFromInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseremoveItemFromInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.REMOVEITEMFROMINVENTORY; InventoryMessage.stripPacketHeader(byteBuffer); @@ -483,7 +486,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestEquipItem */ - public static InventoryMessage parseclientRequestEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTEQUIPITEM; InventoryMessage.stripPacketHeader(byteBuffer); @@ -533,7 +536,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type serverCommandMoveItemContainer */ - public static InventoryMessage parseserverCommandMoveItemContainerMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseserverCommandMoveItemContainerMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.SERVERCOMMANDMOVEITEMCONTAINER; InventoryMessage.stripPacketHeader(byteBuffer); @@ -601,7 +604,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type serverCommandEquipItem */ - public static InventoryMessage parseserverCommandEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseserverCommandEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.SERVERCOMMANDEQUIPITEM; InventoryMessage.stripPacketHeader(byteBuffer); @@ -657,7 +660,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type serverCommandUnequipItem */ - public static InventoryMessage parseserverCommandUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseserverCommandUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.SERVERCOMMANDUNEQUIPITEM; InventoryMessage.stripPacketHeader(byteBuffer); @@ -703,7 +706,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestUnequipItem */ - public static InventoryMessage parseclientRequestUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTUNEQUIPITEM; InventoryMessage.stripPacketHeader(byteBuffer); @@ -754,7 +757,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestStoreItem */ - public static InventoryMessage parseclientRequestStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTSTOREITEM; InventoryMessage.stripPacketHeader(byteBuffer); @@ -824,7 +827,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type serverCommandStoreItem */ - public static InventoryMessage parseserverCommandStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseserverCommandStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.SERVERCOMMANDSTOREITEM; InventoryMessage.stripPacketHeader(byteBuffer); @@ -852,7 +855,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestWatchInventory */ - public static InventoryMessage parseclientRequestWatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestWatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTWATCHINVENTORY; InventoryMessage.stripPacketHeader(byteBuffer); @@ -872,7 +875,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestUnwatchInventory */ - public static InventoryMessage parseclientRequestUnwatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestUnwatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTUNWATCHINVENTORY; InventoryMessage.stripPacketHeader(byteBuffer); @@ -892,7 +895,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestAddToolbar */ - public static InventoryMessage parseclientRequestAddToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestAddToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTADDTOOLBAR; InventoryMessage.stripPacketHeader(byteBuffer); @@ -914,7 +917,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestAddNatural */ - public static InventoryMessage parseclientRequestAddNaturalMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestAddNaturalMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTADDNATURAL; InventoryMessage.stripPacketHeader(byteBuffer); @@ -934,7 +937,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientUpdateToolbar */ - public static InventoryMessage parseclientUpdateToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientUpdateToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTUPDATETOOLBAR; InventoryMessage.stripPacketHeader(byteBuffer); @@ -991,7 +994,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestPerformItemAction */ - public static InventoryMessage parseclientRequestPerformItemActionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestPerformItemActionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTPERFORMITEMACTION; InventoryMessage.stripPacketHeader(byteBuffer); @@ -1021,7 +1024,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type clientRequestCraft */ - public static InventoryMessage parseclientRequestCraftMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseclientRequestCraftMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.CLIENTREQUESTCRAFT; InventoryMessage.stripPacketHeader(byteBuffer); @@ -1045,7 +1048,7 @@ public class InventoryMessage extends NetworkMessage { /** * Parses a message of type serverUpdateItemCharges */ - public static InventoryMessage parseserverUpdateItemChargesMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static InventoryMessage parseserverUpdateItemChargesMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); rVal.messageType = InventoryMessageType.SERVERUPDATEITEMCHARGES; InventoryMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/LoreMessage.java b/src/main/java/electrosphere/net/parser/net/message/LoreMessage.java index 8e1544b6..e8ad8ca8 100644 --- a/src/main/java/electrosphere/net/parser/net/message/LoreMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/LoreMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class LoreMessage extends NetworkMessage { /** @@ -88,7 +91,7 @@ public class LoreMessage extends NetworkMessage { /** * Parses a message of type RequestRaces */ - public static LoreMessage parseRequestRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static LoreMessage parseRequestRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ LoreMessage rVal = (LoreMessage)pool.get(MessageType.LORE_MESSAGE); rVal.messageType = LoreMessageType.REQUESTRACES; LoreMessage.stripPacketHeader(byteBuffer); @@ -128,7 +131,7 @@ public class LoreMessage extends NetworkMessage { /** * Parses a message of type ResponseRaces */ - public static LoreMessage parseResponseRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static LoreMessage parseResponseRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ LoreMessage rVal = (LoreMessage)pool.get(MessageType.LORE_MESSAGE); rVal.messageType = LoreMessageType.RESPONSERACES; LoreMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/NetworkMessage.java b/src/main/java/electrosphere/net/parser/net/message/NetworkMessage.java index 0c59c269..14bf3248 100644 --- a/src/main/java/electrosphere/net/parser/net/message/NetworkMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/NetworkMessage.java @@ -4,6 +4,8 @@ import io.github.studiorailgun.CircularByteBuffer; import java.io.IOException; import java.io.OutputStream; +import java.util.Map; +import java.util.function.BiConsumer; /** * A network message @@ -61,9 +63,10 @@ public abstract class NetworkMessage { * Parses the byte stream for the next message * @param byteBuffer The byte buffer * @param pool The message pool + * @param customParserMap The map of message type/subtype to parser * @return The message if one is at the front of the byte stream, null otherwise */ - public static NetworkMessage parseBytestreamForMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static NetworkMessage parseBytestreamForMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ NetworkMessage rVal = null; byte firstByte; byte secondByte; @@ -75,57 +78,57 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.ENTITY_MESSAGE_TYPE_CREATE: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseCreateMessage(byteBuffer,pool); + rVal = EntityMessage.parseCreateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_MOVEUPDATE: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parsemoveUpdateMessage(byteBuffer,pool); + rVal = EntityMessage.parsemoveUpdateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACKUPDATE: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseattackUpdateMessage(byteBuffer,pool); + rVal = EntityMessage.parseattackUpdateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_STARTATTACK: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parsestartAttackMessage(byteBuffer,pool); + rVal = EntityMessage.parsestartAttackMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_KILL: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseKillMessage(byteBuffer,pool); + rVal = EntityMessage.parseKillMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseDestroyMessage(byteBuffer,pool); + rVal = EntityMessage.parseDestroyMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_SETPROPERTY: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parsesetPropertyMessage(byteBuffer,pool); + rVal = EntityMessage.parsesetPropertyMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseattachEntityToEntityMessage(byteBuffer,pool); + rVal = EntityMessage.parseattachEntityToEntityMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_UPDATEENTITYVIEWDIR: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseupdateEntityViewDirMessage(byteBuffer,pool); + rVal = EntityMessage.parseupdateEntityViewDirMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_SYNCPHYSICS: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parsesyncPhysicsMessage(byteBuffer,pool); + rVal = EntityMessage.parsesyncPhysicsMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.ENTITY_MESSAGE_TYPE_INTERACT: if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = EntityMessage.parseinteractMessage(byteBuffer,pool); + rVal = EntityMessage.parseinteractMessage(byteBuffer,pool,customParserMap); } break; } @@ -135,12 +138,12 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.LORE_MESSAGE_TYPE_REQUESTRACES: if(LoreMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = LoreMessage.parseRequestRacesMessage(byteBuffer,pool); + rVal = LoreMessage.parseRequestRacesMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.LORE_MESSAGE_TYPE_RESPONSERACES: if(LoreMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = LoreMessage.parseResponseRacesMessage(byteBuffer,pool); + rVal = LoreMessage.parseResponseRacesMessage(byteBuffer,pool,customParserMap); } break; } @@ -150,12 +153,12 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.PLAYER_MESSAGE_TYPE_SET_ID: if(PlayerMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = PlayerMessage.parseSet_IDMessage(byteBuffer,pool); + rVal = PlayerMessage.parseSet_IDMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.PLAYER_MESSAGE_TYPE_SETINITIALDISCRETEPOSITION: if(PlayerMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = PlayerMessage.parseSetInitialDiscretePositionMessage(byteBuffer,pool); + rVal = PlayerMessage.parseSetInitialDiscretePositionMessage(byteBuffer,pool,customParserMap); } break; } @@ -165,97 +168,97 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTMETADATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestMetadataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestMetadataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_RESPONSEMETADATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseResponseMetadataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseResponseMetadataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestEditVoxelMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestEditVoxelMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEVOXEL: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseUpdateVoxelMessage(byteBuffer,pool); + rVal = TerrainMessage.parseUpdateVoxelMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestUseTerrainPaletteMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestUseTerrainPaletteMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestDestroyTerrainMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestDestroyTerrainMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseSpawnPositionMessage(byteBuffer,pool); + rVal = TerrainMessage.parseSpawnPositionMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestChunkDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestChunkDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDCHUNKDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parsesendChunkDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parsesendChunkDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestReducedChunkDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestReducedChunkDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDCHUNKDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseSendReducedChunkDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseSendReducedChunkDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDBLOCKDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestReducedBlockDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestReducedBlockDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseSendReducedBlockDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseSendReducedBlockDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEBLOCK: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseUpdateBlockMessage(byteBuffer,pool); + rVal = TerrainMessage.parseUpdateBlockMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTFLUIDDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestFluidDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestFluidDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDFLUIDDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parsesendFluidDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parsesendFluidDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEFLUIDDATA: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseupdateFluidDataMessage(byteBuffer,pool); + rVal = TerrainMessage.parseupdateFluidDataMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTEDITBLOCK: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestEditBlockMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestEditBlockMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTPLACEFAB: if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = TerrainMessage.parseRequestPlaceFabMessage(byteBuffer,pool); + rVal = TerrainMessage.parseRequestPlaceFabMessage(byteBuffer,pool,customParserMap); } break; } @@ -265,17 +268,17 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.SERVER_MESSAGE_TYPE_PING: if(ServerMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = ServerMessage.parsePingMessage(byteBuffer,pool); + rVal = ServerMessage.parsePingMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SERVER_MESSAGE_TYPE_PONG: if(ServerMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = ServerMessage.parsePongMessage(byteBuffer,pool); + rVal = ServerMessage.parsePongMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SERVER_MESSAGE_TYPE_DISCONNECT: if(ServerMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = ServerMessage.parseDisconnectMessage(byteBuffer,pool); + rVal = ServerMessage.parseDisconnectMessage(byteBuffer,pool,customParserMap); } break; } @@ -285,22 +288,22 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.AUTH_MESSAGE_TYPE_AUTHREQUEST: if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = AuthMessage.parseAuthRequestMessage(byteBuffer,pool); + rVal = AuthMessage.parseAuthRequestMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.AUTH_MESSAGE_TYPE_AUTHDETAILS: if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = AuthMessage.parseAuthDetailsMessage(byteBuffer,pool); + rVal = AuthMessage.parseAuthDetailsMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.AUTH_MESSAGE_TYPE_AUTHSUCCESS: if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = AuthMessage.parseAuthSuccessMessage(byteBuffer,pool); + rVal = AuthMessage.parseAuthSuccessMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.AUTH_MESSAGE_TYPE_AUTHFAILURE: if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = AuthMessage.parseAuthFailureMessage(byteBuffer,pool); + rVal = AuthMessage.parseAuthFailureMessage(byteBuffer,pool,customParserMap); } break; } @@ -310,42 +313,42 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTCHARACTERLIST: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseRequestCharacterListMessage(byteBuffer,pool); + rVal = CharacterMessage.parseRequestCharacterListMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECHARACTERLIST: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseResponseCharacterListMessage(byteBuffer,pool); + rVal = CharacterMessage.parseResponseCharacterListMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTCREATECHARACTER: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseRequestCreateCharacterMessage(byteBuffer,pool); + rVal = CharacterMessage.parseRequestCreateCharacterMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECREATECHARACTERSUCCESS: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseResponseCreateCharacterSuccessMessage(byteBuffer,pool); + rVal = CharacterMessage.parseResponseCreateCharacterSuccessMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECREATECHARACTERFAILURE: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseResponseCreateCharacterFailureMessage(byteBuffer,pool); + rVal = CharacterMessage.parseResponseCreateCharacterFailureMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTSPAWNCHARACTER: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseRequestSpawnCharacterMessage(byteBuffer,pool); + rVal = CharacterMessage.parseRequestSpawnCharacterMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSESPAWNCHARACTER: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseResponseSpawnCharacterMessage(byteBuffer,pool); + rVal = CharacterMessage.parseResponseSpawnCharacterMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.CHARACTER_MESSAGE_TYPE_EDITORSWAP: if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CharacterMessage.parseEditorSwapMessage(byteBuffer,pool); + rVal = CharacterMessage.parseEditorSwapMessage(byteBuffer,pool,customParserMap); } break; } @@ -355,87 +358,87 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.INVENTORY_MESSAGE_TYPE_ADDITEMTOINVENTORY: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseaddItemToInventoryMessage(byteBuffer,pool); + rVal = InventoryMessage.parseaddItemToInventoryMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_REMOVEITEMFROMINVENTORY: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseremoveItemFromInventoryMessage(byteBuffer,pool); + rVal = InventoryMessage.parseremoveItemFromInventoryMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTEQUIPITEM: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestEquipItemMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestEquipItemMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDMOVEITEMCONTAINER: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseserverCommandMoveItemContainerMessage(byteBuffer,pool); + rVal = InventoryMessage.parseserverCommandMoveItemContainerMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDEQUIPITEM: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseserverCommandEquipItemMessage(byteBuffer,pool); + rVal = InventoryMessage.parseserverCommandEquipItemMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDUNEQUIPITEM: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseserverCommandUnequipItemMessage(byteBuffer,pool); + rVal = InventoryMessage.parseserverCommandUnequipItemMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNEQUIPITEM: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestUnequipItemMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestUnequipItemMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTSTOREITEM: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestStoreItemMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestStoreItemMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseserverCommandStoreItemMessage(byteBuffer,pool); + rVal = InventoryMessage.parseserverCommandStoreItemMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestWatchInventoryMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestWatchInventoryMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestUnwatchInventoryMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestUnwatchInventoryMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestAddToolbarMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestAddToolbarMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestAddNaturalMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestAddNaturalMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientUpdateToolbarMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientUpdateToolbarMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTPERFORMITEMACTION: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestPerformItemActionMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestPerformItemActionMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTCRAFT: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseclientRequestCraftMessage(byteBuffer,pool); + rVal = InventoryMessage.parseclientRequestCraftMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERUPDATEITEMCHARGES: if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = InventoryMessage.parseserverUpdateItemChargesMessage(byteBuffer,pool); + rVal = InventoryMessage.parseserverUpdateItemChargesMessage(byteBuffer,pool,customParserMap); } break; } @@ -445,57 +448,57 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTSTATE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseUpdateClientStateMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseUpdateClientStateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTSTRINGSTATE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseUpdateClientStringStateMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseUpdateClientStringStateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTINTSTATE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseUpdateClientIntStateMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseUpdateClientIntStateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTLONGSTATE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseUpdateClientLongStateMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseUpdateClientLongStateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTFLOATSTATE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseUpdateClientFloatStateMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseUpdateClientFloatStateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTDOUBLESTATE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseUpdateClientDoubleStateMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseUpdateClientDoubleStateMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_CLIENTREQUESTBTREEACTION: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseClientRequestBTreeActionMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseClientRequestBTreeActionMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_SERVERNOTIFYBTREETRANSITION: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseServerNotifyBTreeTransitionMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseServerNotifyBTreeTransitionMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_ATTACHTREE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseAttachTreeMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseAttachTreeMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_DETATCHTREE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseDetatchTreeMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseDetatchTreeMessage(byteBuffer,pool,customParserMap); } break; case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_LOADSCENE: if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = SynchronizationMessage.parseLoadSceneMessage(byteBuffer,pool); + rVal = SynchronizationMessage.parseLoadSceneMessage(byteBuffer,pool,customParserMap); } break; } @@ -505,7 +508,7 @@ public abstract class NetworkMessage { switch(secondByte){ case TypeBytes.COMBAT_MESSAGE_TYPE_SERVERREPORTHITBOXCOLLISION: if(CombatMessage.canParseMessage(byteBuffer,secondByte)){ - rVal = CombatMessage.parseserverReportHitboxCollisionMessage(byteBuffer,pool); + rVal = CombatMessage.parseserverReportHitboxCollisionMessage(byteBuffer,pool,customParserMap); } break; } diff --git a/src/main/java/electrosphere/net/parser/net/message/PlayerMessage.java b/src/main/java/electrosphere/net/parser/net/message/PlayerMessage.java index 6477799e..92883b72 100644 --- a/src/main/java/electrosphere/net/parser/net/message/PlayerMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/PlayerMessage.java @@ -4,6 +4,9 @@ import java.io.IOException; import java.io.OutputStream; import io.github.studiorailgun.CircularByteBuffer; import electrosphere.net.parser.util.ByteStreamUtils; +import java.util.Map; +import java.util.function.BiConsumer; + public class PlayerMessage extends NetworkMessage { /** @@ -134,7 +137,7 @@ public class PlayerMessage extends NetworkMessage { /** * Parses a message of type Set_ID */ - public static PlayerMessage parseSet_IDMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static PlayerMessage parseSet_IDMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ PlayerMessage rVal = (PlayerMessage)pool.get(MessageType.PLAYER_MESSAGE); rVal.messageType = PlayerMessageType.SET_ID; PlayerMessage.stripPacketHeader(byteBuffer); @@ -154,7 +157,7 @@ public class PlayerMessage extends NetworkMessage { /** * Parses a message of type SetInitialDiscretePosition */ - public static PlayerMessage parseSetInitialDiscretePositionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static PlayerMessage parseSetInitialDiscretePositionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ PlayerMessage rVal = (PlayerMessage)pool.get(MessageType.PLAYER_MESSAGE); rVal.messageType = PlayerMessageType.SETINITIALDISCRETEPOSITION; PlayerMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/ServerMessage.java b/src/main/java/electrosphere/net/parser/net/message/ServerMessage.java index 96e54521..47421a5d 100644 --- a/src/main/java/electrosphere/net/parser/net/message/ServerMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/ServerMessage.java @@ -3,6 +3,9 @@ package electrosphere.net.parser.net.message; import java.io.IOException; import java.io.OutputStream; import io.github.studiorailgun.CircularByteBuffer; +import java.util.Map; +import java.util.function.BiConsumer; + public class ServerMessage extends NetworkMessage { /** @@ -80,7 +83,7 @@ public class ServerMessage extends NetworkMessage { /** * Parses a message of type Ping */ - public static ServerMessage parsePingMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static ServerMessage parsePingMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE); rVal.messageType = ServerMessageType.PING; ServerMessage.stripPacketHeader(byteBuffer); @@ -98,7 +101,7 @@ public class ServerMessage extends NetworkMessage { /** * Parses a message of type Pong */ - public static ServerMessage parsePongMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static ServerMessage parsePongMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE); rVal.messageType = ServerMessageType.PONG; ServerMessage.stripPacketHeader(byteBuffer); @@ -116,7 +119,7 @@ public class ServerMessage extends NetworkMessage { /** * Parses a message of type Disconnect */ - public static ServerMessage parseDisconnectMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static ServerMessage parseDisconnectMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE); rVal.messageType = ServerMessageType.DISCONNECT; ServerMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/SynchronizationMessage.java b/src/main/java/electrosphere/net/parser/net/message/SynchronizationMessage.java index 91b6c755..988e536a 100644 --- a/src/main/java/electrosphere/net/parser/net/message/SynchronizationMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/SynchronizationMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class SynchronizationMessage extends NetworkMessage { /** @@ -267,7 +270,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type UpdateClientState */ - public static SynchronizationMessage parseUpdateClientStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseUpdateClientStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.UPDATECLIENTSTATE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -324,7 +327,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type UpdateClientStringState */ - public static SynchronizationMessage parseUpdateClientStringStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseUpdateClientStringStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.UPDATECLIENTSTRINGSTATE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -350,7 +353,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type UpdateClientIntState */ - public static SynchronizationMessage parseUpdateClientIntStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseUpdateClientIntStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.UPDATECLIENTINTSTATE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -376,7 +379,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type UpdateClientLongState */ - public static SynchronizationMessage parseUpdateClientLongStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseUpdateClientLongStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.UPDATECLIENTLONGSTATE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -402,7 +405,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type UpdateClientFloatState */ - public static SynchronizationMessage parseUpdateClientFloatStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseUpdateClientFloatStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.UPDATECLIENTFLOATSTATE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -428,7 +431,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type UpdateClientDoubleState */ - public static SynchronizationMessage parseUpdateClientDoubleStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseUpdateClientDoubleStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.UPDATECLIENTDOUBLESTATE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -454,7 +457,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type ClientRequestBTreeAction */ - public static SynchronizationMessage parseClientRequestBTreeActionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseClientRequestBTreeActionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.CLIENTREQUESTBTREEACTION; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -478,7 +481,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type ServerNotifyBTreeTransition */ - public static SynchronizationMessage parseServerNotifyBTreeTransitionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseServerNotifyBTreeTransitionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.SERVERNOTIFYBTREETRANSITION; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -504,7 +507,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type AttachTree */ - public static SynchronizationMessage parseAttachTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseAttachTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.ATTACHTREE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -526,7 +529,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type DetatchTree */ - public static SynchronizationMessage parseDetatchTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseDetatchTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.DETATCHTREE; SynchronizationMessage.stripPacketHeader(byteBuffer); @@ -570,7 +573,7 @@ public class SynchronizationMessage extends NetworkMessage { /** * Parses a message of type LoadScene */ - public static SynchronizationMessage parseLoadSceneMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static SynchronizationMessage parseLoadSceneMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); rVal.messageType = SynchronizationMessageType.LOADSCENE; SynchronizationMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/message/TerrainMessage.java b/src/main/java/electrosphere/net/parser/net/message/TerrainMessage.java index d666dd5d..1359ea87 100644 --- a/src/main/java/electrosphere/net/parser/net/message/TerrainMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/TerrainMessage.java @@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + public class TerrainMessage extends NetworkMessage { /** @@ -607,7 +610,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestMetadata */ - public static TerrainMessage parseRequestMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTMETADATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -625,7 +628,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type ResponseMetadata */ - public static TerrainMessage parseResponseMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseResponseMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.RESPONSEMETADATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -657,7 +660,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestEditVoxel */ - public static TerrainMessage parseRequestEditVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestEditVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTEDITVOXEL; TerrainMessage.stripPacketHeader(byteBuffer); @@ -691,7 +694,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type UpdateVoxel */ - public static TerrainMessage parseUpdateVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseUpdateVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.UPDATEVOXEL; TerrainMessage.stripPacketHeader(byteBuffer); @@ -725,7 +728,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestUseTerrainPalette */ - public static TerrainMessage parseRequestUseTerrainPaletteMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestUseTerrainPaletteMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTUSETERRAINPALETTE; TerrainMessage.stripPacketHeader(byteBuffer); @@ -755,7 +758,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestDestroyTerrain */ - public static TerrainMessage parseRequestDestroyTerrainMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestDestroyTerrainMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTDESTROYTERRAIN; TerrainMessage.stripPacketHeader(byteBuffer); @@ -783,7 +786,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type SpawnPosition */ - public static TerrainMessage parseSpawnPositionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseSpawnPositionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.SPAWNPOSITION; TerrainMessage.stripPacketHeader(byteBuffer); @@ -807,7 +810,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestChunkData */ - public static TerrainMessage parseRequestChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTCHUNKDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -862,7 +865,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type sendChunkData */ - public static TerrainMessage parsesendChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parsesendChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.SENDCHUNKDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -888,7 +891,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestReducedChunkData */ - public static TerrainMessage parseRequestReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTREDUCEDCHUNKDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -951,7 +954,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type SendReducedChunkData */ - public static TerrainMessage parseSendReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseSendReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.SENDREDUCEDCHUNKDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -981,7 +984,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestReducedBlockData */ - public static TerrainMessage parseRequestReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTREDUCEDBLOCKDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -1044,16 +1047,16 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type SendReducedBlockData */ - public static TerrainMessage parseSendReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseSendReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.SENDREDUCEDBLOCKDATA; TerrainMessage.stripPacketHeader(byteBuffer); - rVal.setworldX(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); - rVal.setworldY(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); - rVal.setworldZ(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); - rVal.setchunkResolution(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); - rVal.sethomogenousValue(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); - rVal.setchunkData(ByteStreamUtils.popByteArrayFromByteQueue(byteBuffer)); + short pair = (short)((TypeBytes.MESSAGE_TYPE_TERRAIN << 4) & TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA); + BiConsumer customParser = customParserMap.get(pair); + if(customParser == null){ + throw new Error("Custom parser undefined for message pair!"); + } + customParser.accept(rVal,byteBuffer); return rVal; } @@ -1074,7 +1077,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type UpdateBlock */ - public static TerrainMessage parseUpdateBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseUpdateBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.UPDATEBLOCK; TerrainMessage.stripPacketHeader(byteBuffer); @@ -1108,7 +1111,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestFluidData */ - public static TerrainMessage parseRequestFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTFLUIDDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -1163,7 +1166,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type sendFluidData */ - public static TerrainMessage parsesendFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parsesendFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.SENDFLUIDDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -1220,7 +1223,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type updateFluidData */ - public static TerrainMessage parseupdateFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseupdateFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.UPDATEFLUIDDATA; TerrainMessage.stripPacketHeader(byteBuffer); @@ -1246,7 +1249,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestEditBlock */ - public static TerrainMessage parseRequestEditBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestEditBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTEDITBLOCK; TerrainMessage.stripPacketHeader(byteBuffer); @@ -1325,7 +1328,7 @@ public class TerrainMessage extends NetworkMessage { /** * Parses a message of type RequestPlaceFab */ - public static TerrainMessage parseRequestPlaceFabMessage(CircularByteBuffer byteBuffer, MessagePool pool){ + public static TerrainMessage parseRequestPlaceFabMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map> customParserMap){ TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); rVal.messageType = TerrainMessageType.REQUESTPLACEFAB; TerrainMessage.stripPacketHeader(byteBuffer); diff --git a/src/main/java/electrosphere/net/parser/net/raw/NetworkParser.java b/src/main/java/electrosphere/net/parser/net/raw/NetworkParser.java index eadacfd5..dcc61c97 100644 --- a/src/main/java/electrosphere/net/parser/net/raw/NetworkParser.java +++ b/src/main/java/electrosphere/net/parser/net/raw/NetworkParser.java @@ -6,8 +6,11 @@ import io.github.studiorailgun.CircularByteBuffer; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.BiConsumer; /** * The main message parser. This is used to serialize/deserialize messages to/from the provided streams. @@ -27,53 +30,53 @@ public class NetworkParser { /** * The input stream for the parser */ - InputStream incomingStream; + private InputStream incomingStream; /** * The output stream for the parser */ - OutputStream outgoingStream; + private OutputStream outgoingStream; /** * The queue of incoming messages that have been parsed */ - CopyOnWriteArrayList incomingMessageQueue = new CopyOnWriteArrayList(); + private CopyOnWriteArrayList incomingMessageQueue = new CopyOnWriteArrayList(); /** * The queue of outgoing messages that have yet to be sent */ - CopyOnWriteArrayList outgoingMessageQueue = new CopyOnWriteArrayList(); + private CopyOnWriteArrayList outgoingMessageQueue = new CopyOnWriteArrayList(); /** * Message object pool */ - MessagePool pool = new MessagePool(); + private MessagePool pool = new MessagePool(); /** * The byte buffer for storing incoming bytes */ - CircularByteBuffer incomingByteBuffer = new CircularByteBuffer(CIRCULAR_BUFFER_SIZE); + private CircularByteBuffer incomingByteBuffer = new CircularByteBuffer(CIRCULAR_BUFFER_SIZE); /** * The block array used to read blocks of bytes in */ - byte[] readBuffer = new byte[READ_BLOCK_SIZE]; - - /** - * The outgoing byte buffer - */ - CopyOnWriteArrayList outgoingByteQueue = new CopyOnWriteArrayList(); + private byte[] readBuffer = new byte[READ_BLOCK_SIZE]; /** * The number of bytes read */ - long totalBytesRead = 0; + private long totalBytesRead = 0; /** * If set to true, the parser will automatically release messages on send. * Otherwise, will not release when the message is sent. */ - boolean releaseOnSend = true; + private boolean releaseOnSend = true; + + /** + * The map of messasge type -> custom function to produce the message from a byte stream + */ + private Map> customParserMap = new HashMap>(); /** @@ -103,7 +106,7 @@ public class NetworkParser { //parse byte queue for messages //for each message, append to clientIncomingMessageQueue NetworkMessage newMessage; - while((newMessage = NetworkMessage.parseBytestreamForMessage(incomingByteBuffer,this.pool))!=null){ + while((newMessage = NetworkMessage.parseBytestreamForMessage(incomingByteBuffer,this.pool,this.customParserMap))!=null){ incomingMessageQueue.add(newMessage); } } @@ -195,4 +198,15 @@ public class NetworkParser { this.releaseOnSend = releaseOnSend; } + /** + * Registers a custom parser for a given message type/subtype + * @param messageType The type of message + * @param messageSubtype The subtype of the message + * @param parserFunc The parser function + */ + public void registerCustomParser(byte messageType, byte messageSubtype, BiConsumer parserFunc){ + short pair = (short)((messageType << 4) & messageSubtype); + this.customParserMap.put(pair,parserFunc); + } + } diff --git a/src/net/terrain.json b/src/net/terrain.json index 0737e3f4..0dab7854 100644 --- a/src/net/terrain.json +++ b/src/net/terrain.json @@ -272,6 +272,7 @@ { "messageName" : "SendReducedBlockData", "description" : "Sends block data to the client", + "customParser" : true, "data" : [ "worldX", "worldY",