From a704c04f00bfea4b77550169fa08105c2ee0dfd0 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Mon, 12 Jan 2015 17:01:41 +0100 Subject: Network Layer 7 rework (Packet handling) * Move networkcode to a dedicated directory * Rename clientserver.h to network/networkprotocol.h (Better name) and sanitize some includes * Create object NetworkPacket * It stores command (opcode) and data separated * It also stores peer_id * Data reading can be done by using a streaming interface * Change packet routing analysis * Remove old conditional analysis * Now uses function pointed analysis and add connection state ({Client,Server}::handlers) * Connection state permit to categorize condition to handle before analyze packets * Create a handler for depreciated messages, instead of duplicating code --- src/client.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'src/client.h') diff --git a/src/client.h b/src/client.h index fd7e5f08d..fd43361b1 100644 --- a/src/client.h +++ b/src/client.h @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "localplayer.h" #include "hud.h" #include "particles.h" +#include "network/toclientpacket.h" struct MeshMakeData; class MapBlockMesh; @@ -341,7 +342,57 @@ public: */ void step(float dtime); + /* + * Command Handlers + */ + + void handleCommand(ToClientPacket* pkt); + + void handleCommand_Null(ToClientPacket* pkt) {}; + void handleCommand_Deprecated(ToClientPacket* pkt); + void handleCommand_Init(ToClientPacket* pkt); + void handleCommand_AccessDenied(ToClientPacket* pkt); + void handleCommand_RemoveNode(ToClientPacket* pkt); + void handleCommand_AddNode(ToClientPacket* pkt); + void handleCommand_BlockData(ToClientPacket* pkt); + void handleCommand_Inventory(ToClientPacket* pkt); + void handleCommand_TimeOfDay(ToClientPacket* pkt); + void handleCommand_ChatMessage(ToClientPacket* pkt); + void handleCommand_ActiveObjectRemoveAdd(ToClientPacket* pkt); + void handleCommand_ActiveObjectMessages(ToClientPacket* pkt); + void handleCommand_Movement(ToClientPacket* pkt); + void handleCommand_HP(ToClientPacket* pkt); + void handleCommand_Breath(ToClientPacket* pkt); + void handleCommand_MovePlayer(ToClientPacket* pkt); + void handleCommand_PlayerItem(ToClientPacket* pkt); + void handleCommand_DeathScreen(ToClientPacket* pkt); + void handleCommand_AnnounceMedia(ToClientPacket* pkt); + void handleCommand_Media(ToClientPacket* pkt); + void handleCommand_ToolDef(ToClientPacket* pkt); + void handleCommand_NodeDef(ToClientPacket* pkt); + void handleCommand_CraftItemDef(ToClientPacket* pkt); + void handleCommand_ItemDef(ToClientPacket* pkt); + void handleCommand_PlaySound(ToClientPacket* pkt); + void handleCommand_StopSound(ToClientPacket* pkt); + void handleCommand_Privileges(ToClientPacket* pkt); + void handleCommand_InventoryFormSpec(ToClientPacket* pkt); + void handleCommand_DetachedInventory(ToClientPacket* pkt); + void handleCommand_ShowFormSpec(ToClientPacket* pkt); + void handleCommand_SpawnParticle(ToClientPacket* pkt); + void handleCommand_AddParticleSpawner(ToClientPacket* pkt); + void handleCommand_DeleteParticleSpawner(ToClientPacket* pkt); + void handleCommand_HudAdd(ToClientPacket* pkt); + void handleCommand_HudRemove(ToClientPacket* pkt); + void handleCommand_HudChange(ToClientPacket* pkt); + void handleCommand_HudSetFlags(ToClientPacket* pkt); + void handleCommand_HudSetParam(ToClientPacket* pkt); + void handleCommand_HudSetSky(ToClientPacket* pkt); + void handleCommand_OverrideDayNightRatio(ToClientPacket* pkt); + void handleCommand_LocalPlayerAnimations(ToClientPacket* pkt); + void handleCommand_EyeOffset(ToClientPacket* pkt); + void ProcessData(u8 *data, u32 datasize, u16 sender_peer_id); + // Returns true if something was received bool AsyncProcessPacket(); bool AsyncProcessData(); @@ -577,4 +628,3 @@ private: }; #endif // !CLIENT_HEADER - -- cgit v1.2.3