diff --git a/common/network/packet_types/character_packet.hpp b/common/network/packet_types/character_packet.hpp index a3451a3..4137e13 100644 --- a/common/network/packet_types/character_packet.hpp +++ b/common/network/packet_types/character_packet.hpp @@ -61,7 +61,6 @@ public: //gameplay Statistics* GetStatistics() { return &stats; } -protected: virtual void Serialize(void* buffer) override; virtual void Deserialize(void* buffer) override; diff --git a/common/network/packet_types/client_packet.hpp b/common/network/packet_types/client_packet.hpp index 5e36a2e..7fbf82a 100644 --- a/common/network/packet_types/client_packet.hpp +++ b/common/network/packet_types/client_packet.hpp @@ -41,7 +41,6 @@ public: int GetAccountIndex() { return accountIndex; } const char* GetUsername() { return username; } -protected: virtual void Serialize(void* buffer) override; virtual void Deserialize(void* buffer) override; diff --git a/common/network/packet_types/region_packet.hpp b/common/network/packet_types/region_packet.hpp index fe0f966..309f6c2 100644 --- a/common/network/packet_types/region_packet.hpp +++ b/common/network/packet_types/region_packet.hpp @@ -52,7 +52,6 @@ public: Region* SetRegion(Region* r) { return region = r; } Region* GetRegion() { return region; } -protected: virtual void Serialize(void* buffer) override; virtual void Deserialize(void* buffer) override; diff --git a/common/network/packet_types/serial_packet_base.hpp b/common/network/packet_types/serial_packet_base.hpp index 15b157e..804e6e9 100644 --- a/common/network/packet_types/serial_packet_base.hpp +++ b/common/network/packet_types/serial_packet_base.hpp @@ -37,15 +37,15 @@ public: IPaddress GetAddress() { return srcAddress; } IPaddress* GetAddressPtr() { return &srcAddress; } -protected: - friend class UDPNetworkUtility; - SerialPacketBase() {}; virtual ~SerialPacketBase() {}; virtual void Serialize(void* buffer) = 0; virtual void Deserialize(void* buffer) = 0; +protected: + friend class UDPNetworkUtility; + SerialPacketType type; IPaddress srcAddress; }; diff --git a/common/network/packet_types/server_packet.hpp b/common/network/packet_types/server_packet.hpp index 27602ff..c8a9124 100644 --- a/common/network/packet_types/server_packet.hpp +++ b/common/network/packet_types/server_packet.hpp @@ -40,7 +40,6 @@ public: int GetPlayerCount() { return playerCount; } int GetVersion() { return version; } -protected: virtual void Serialize(void* buffer) override; virtual void Deserialize(void* buffer) override; diff --git a/common/network/serial_packet.hpp b/common/network/serial_packet.hpp index cc23940..349af43 100644 --- a/common/network/serial_packet.hpp +++ b/common/network/serial_packet.hpp @@ -36,7 +36,7 @@ typedef SerialPacketBase SerialPacket; //DOCS: NETWORK_VERSION is used to discern compatible servers and clients -constexpr int NETWORK_VERSION = 20140827; +constexpr int NETWORK_VERSION = 20140831; //_MaxPacket Should not be used union _MaxPacket { diff --git a/common/network/serial_packet_type.hpp b/common/network/serial_packet_type.hpp index 4ac4beb..cf9a4dd 100644 --- a/common/network/serial_packet_type.hpp +++ b/common/network/serial_packet_type.hpp @@ -22,89 +22,74 @@ #ifndef SERIALPACKETTYPE_HPP_ #define SERIALPACKETTYPE_HPP_ -/* Key for the comments: - * request => response +/* DOCS: The headers indicate what packet type is used for each message + * different messages under the same header will carry different amounts of + * valid data, but it will still be carried in that packet's format. */ enum class SerialPacketType { //default: there is something wrong NONE = 0, + //------------------------- + //ServerPacket + // name, player count, version + //------------------------- + //heartbeat - //ping => pong - PING = 1, - PONG = 2, + PING, + PONG, - //search for the server list - //none => server name, player count, version info (and source address) - BROADCAST_REQUEST = 3, - BROADCAST_RESPONSE = 4, + //Used for finding available servers + BROADCAST_REQUEST, + BROADCAST_RESPONSE, - //try to join the server - //username, and password => client index, account index - JOIN_REQUEST = 5, - JOIN_RESPONSE = 6, - JOIN_REJECTION = 7, + //------------------------- + //ClientPacket + // client index, account index, character index + //------------------------- - //mass update of all surrounding content - //character.x, character.y => packet barrage - SYNCHRONIZE = 8, + //Connecting to a server as a client + JOIN_REQUEST, + JOIN_RESPONSE, + JOIN_REJECTION, + + //client requests all information from the server + SYNCHRONIZE, //disconnect from the server - //autentication, account index => disconnect that account - DISCONNECT = 9, + DISCONNECT, //shut down the server - //autentication => disconnect, shutdown - SHUTDOWN = 10, + SHUTDOWN, + + //------------------------- + //RegionPacket + // room index, x, y, raw data + //------------------------- //map data - //room index, region.x, region.y => room index, region.x, region.y, region content - REGION_REQUEST = 11, - REGION_CONTENT = 12, + REGION_REQUEST, + REGION_CONTENT, - //combat data - //TODO: system incomplete - COMBAT_NEW = 13, - COMBAT_DELETE = 14, - COMBAT_UPDATE = 15, + //------------------------- + //CharacterPacket + // handle, avatar, character index, account index, + // room index, origin, motion + // statistics + //------------------------- - COMBAT_ENTER_REQUEST = 16, - COMBAT_ENTER_RESPONSE = 17, - - COMBAT_EXIT_REQUEST = 18, - COMBAT_EXIT_RESPONSE = 19, - - //TODO: COMBAT info - - COMBAT_REJECTION = 20, - - //character data - //character data => etc. - CHARACTER_NEW = 21, - CHARACTER_DELETE = 22, - CHARACTER_UPDATE = 23, + //controlling characters + CHARACTER_NEW, + CHARACTER_DELETE, + CHARACTER_UPDATE, //authentication, character index => character stats - CHARACTER_STATS_REQUEST= 24, - CHARACTER_STATS_RESPONSE = 25, + CHARACTER_STATS_REQUEST, + CHARACTER_STATS_RESPONSE, - //character new => character rejection, disconnect? - CHARACTER_REJECTION = 26, - - //enemy data - //enemy data => etc. - ENEMY_NEW = 27, - ENEMY_DELETE = 28, - ENEMY_UPDATE = 29, - - ENEMY_STATS_REQUEST = 30, - ENEMY_STATS_RESPONSE = 31, - - //enemy index => enemy doens't exist - ENEMY_REJECTION= 32, - - //NOTE: more packet types go here + //reject a character request + CHARACTER_REJECTION, //not used LAST diff --git a/common/network/serial_utility.cpp b/common/network/serial_utility.cpp index 9bda3bf..e7c82a6 100644 --- a/common/network/serial_utility.cpp +++ b/common/network/serial_utility.cpp @@ -23,11 +23,41 @@ #include "serial_packet_type.hpp" +#include "server_packet.hpp" +#include "client_packet.hpp" +#include "region_packet.hpp" +#include "character_packet.hpp" + #include void serializePacket(SerialPacketBase* packet, void* data) { switch(packet->GetType()) { - //define all packet types + case SerialPacketType::PING: + case SerialPacketType::PONG: + case SerialPacketType::BROADCAST_REQUEST: + case SerialPacketType::BROADCAST_RESPONSE: + static_cast(packet)->Serialize(data); + break; + case SerialPacketType::JOIN_REQUEST: + case SerialPacketType::JOIN_RESPONSE: + case SerialPacketType::JOIN_REJECTION: + case SerialPacketType::SYNCHRONIZE: + case SerialPacketType::DISCONNECT: + case SerialPacketType::SHUTDOWN: + static_cast(packet)->Serialize(data); + break; + case SerialPacketType::REGION_REQUEST: + case SerialPacketType::REGION_CONTENT: + static_cast(packet)->Serialize(data); + break; + case SerialPacketType::CHARACTER_NEW: + case SerialPacketType::CHARACTER_DELETE: + case SerialPacketType::CHARACTER_UPDATE: + case SerialPacketType::CHARACTER_STATS_REQUEST: + case SerialPacketType::CHARACTER_STATS_RESPONSE: + case SerialPacketType::CHARACTER_REJECTION: + static_cast(packet)->Serialize(data); + break; } } @@ -37,7 +67,32 @@ void deserializePacket(SerialPacketBase* packet, void* data) { memcpy(&type, data, sizeof(SerialPacketType)); switch(type) { - //define all extra types + case SerialPacketType::PING: + case SerialPacketType::PONG: + case SerialPacketType::BROADCAST_REQUEST: + case SerialPacketType::BROADCAST_RESPONSE: + static_cast(packet)->Deserialize(data); + break; + case SerialPacketType::JOIN_REQUEST: + case SerialPacketType::JOIN_RESPONSE: + case SerialPacketType::JOIN_REJECTION: + case SerialPacketType::SYNCHRONIZE: + case SerialPacketType::DISCONNECT: + case SerialPacketType::SHUTDOWN: + static_cast(packet)->Deserialize(data); + break; + case SerialPacketType::REGION_REQUEST: + case SerialPacketType::REGION_CONTENT: + static_cast(packet)->Deserialize(data); + break; + case SerialPacketType::CHARACTER_NEW: + case SerialPacketType::CHARACTER_DELETE: + case SerialPacketType::CHARACTER_UPDATE: + case SerialPacketType::CHARACTER_STATS_REQUEST: + case SerialPacketType::CHARACTER_STATS_RESPONSE: + case SerialPacketType::CHARACTER_REJECTION: + static_cast(packet)->Deserialize(data); + break; } }