From 7d4d7817f2af4e8c5e9c2af587afb565e5f262d0 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sun, 31 Aug 2014 02:58:47 +1000 Subject: [PATCH] I've adjusted the naming conventions for the serial code (read more) It looks like this whole branch is fucking useless, considering that I'll need to reimplement that massive switch statement again just to determine which overwritten method to use. I might as well not have bothered. --- .../network/packet_types/character_packet.cpp | 44 +++++----- common/network/packet_types/client_packet.cpp | 16 ++-- common/network/packet_types/region_packet.cpp | 20 ++--- .../packet_types/serial_packet_base.cpp | 1 + common/network/packet_types/server_packet.cpp | 16 ++-- common/network/serial_utility.cpp | 82 +++++++++++-------- common/network/serial_utility.hpp | 22 +++-- common/network/udp_network_utility.cpp | 10 ++- 8 files changed, 120 insertions(+), 91 deletions(-) diff --git a/common/network/packet_types/character_packet.cpp b/common/network/packet_types/character_packet.cpp index d1de8a0..9a986dd 100644 --- a/common/network/packet_types/character_packet.cpp +++ b/common/network/packet_types/character_packet.cpp @@ -24,49 +24,49 @@ #include "serial_utility.hpp" void CharacterPacket::Serialize(void* buffer) { - serialize(&buffer, &type, sizeof(SerialPacketType)); + serializeCopy(&buffer, &type, sizeof(SerialPacketType)); //identify the character - serialize(&buffer, &characterIndex, sizeof(int)); - serialize(&buffer, handle, PACKET_STRING_SIZE); - serialize(&buffer, avatar, PACKET_STRING_SIZE); + serializeCopy(&buffer, &characterIndex, sizeof(int)); + serializeCopy(&buffer, handle, PACKET_STRING_SIZE); + serializeCopy(&buffer, avatar, PACKET_STRING_SIZE); //the owner - serialize(&buffer, &accountIndex, sizeof(int)); + serializeCopy(&buffer, &accountIndex, sizeof(int)); //location - serialize(&buffer, &roomIndex, sizeof(int)); - serialize(&buffer, &origin.x, sizeof(double)); - serialize(&buffer, &origin.y, sizeof(double)); - serialize(&buffer, &motion.x, sizeof(double)); - serialize(&buffer, &motion.y, sizeof(double)); + serializeCopy(&buffer, &roomIndex, sizeof(int)); + serializeCopy(&buffer, &origin.x, sizeof(double)); + serializeCopy(&buffer, &origin.y, sizeof(double)); + serializeCopy(&buffer, &motion.x, sizeof(double)); + serializeCopy(&buffer, &motion.y, sizeof(double)); //stats structure - serializeStatistics(&buffer, &stats); + serializeCopyStatistics(&buffer, &stats); //TODO: gameplay components: equipment, items, buffs, debuffs } void CharacterPacket::Deserialize(void* buffer) { - deserialize(&buffer, &type, sizeof(SerialPacketType)); + deserializeCopy(&buffer, &type, sizeof(SerialPacketType)); //identify the character - deserialize(&buffer, &characterIndex, sizeof(int)); - deserialize(&buffer, handle, PACKET_STRING_SIZE); - deserialize(&buffer, avatar, PACKET_STRING_SIZE); + deserializeCopy(&buffer, &characterIndex, sizeof(int)); + deserializeCopy(&buffer, handle, PACKET_STRING_SIZE); + deserializeCopy(&buffer, avatar, PACKET_STRING_SIZE); //the owner - deserialize(&buffer, &accountIndex, sizeof(int)); + deserializeCopy(&buffer, &accountIndex, sizeof(int)); //location - deserialize(&buffer, &roomIndex, sizeof(int)); - deserialize(&buffer, &origin.x, sizeof(double)); - deserialize(&buffer, &origin.y, sizeof(double)); - deserialize(&buffer, &motion.x, sizeof(double)); - deserialize(&buffer, &motion.y, sizeof(double)); + deserializeCopy(&buffer, &roomIndex, sizeof(int)); + deserializeCopy(&buffer, &origin.x, sizeof(double)); + deserializeCopy(&buffer, &origin.y, sizeof(double)); + deserializeCopy(&buffer, &motion.x, sizeof(double)); + deserializeCopy(&buffer, &motion.y, sizeof(double)); //stats structure - deserializeStatistics(&buffer, &stats); + deserializeCopyStatistics(&buffer, &stats); //TODO: gameplay components: equipment, items, buffs, debuffs } diff --git a/common/network/packet_types/client_packet.cpp b/common/network/packet_types/client_packet.cpp index 05f01a6..f01b335 100644 --- a/common/network/packet_types/client_packet.cpp +++ b/common/network/packet_types/client_packet.cpp @@ -24,17 +24,17 @@ #include "serial_utility.hpp" void ClientPacket::Serialize(void* buffer) { - serialize(&buffer, &type, sizeof(SerialPacketType)); + serializeCopy(&buffer, &type, sizeof(SerialPacketType)); - serialize(&buffer, &clientIndex, sizeof(int)); - serialize(&buffer, &accountIndex, sizeof(int)); - serialize(&buffer, username, PACKET_STRING_SIZE); + serializeCopy(&buffer, &clientIndex, sizeof(int)); + serializeCopy(&buffer, &accountIndex, sizeof(int)); + serializeCopy(&buffer, username, PACKET_STRING_SIZE); } void ClientPacket::Deserialize(void* buffer) { - deserialize(&buffer, &type, sizeof(SerialPacketType)); + deserializeCopy(&buffer, &type, sizeof(SerialPacketType)); - deserialize(&buffer, &clientIndex, sizeof(int)); - deserialize(&buffer, &accountIndex, sizeof(int)); - deserialize(&buffer, username, PACKET_STRING_SIZE); + deserializeCopy(&buffer, &clientIndex, sizeof(int)); + deserializeCopy(&buffer, &accountIndex, sizeof(int)); + deserializeCopy(&buffer, username, PACKET_STRING_SIZE); } diff --git a/common/network/packet_types/region_packet.cpp b/common/network/packet_types/region_packet.cpp index 802e876..7f30490 100644 --- a/common/network/packet_types/region_packet.cpp +++ b/common/network/packet_types/region_packet.cpp @@ -24,12 +24,12 @@ #include "serial_utility.hpp" void RegionPacket::Serialize(void* buffer) { - serialize(&buffer, &type, sizeof(SerialPacketType)); + serializeCopy(&buffer, &type, sizeof(SerialPacketType)); //format - serialize(&buffer, &roomIndex, sizeof(int)); - serialize(&buffer, &x, sizeof(int)); - serialize(&buffer, &y, sizeof(int)); + serializeCopy(&buffer, &roomIndex, sizeof(int)); + serializeCopy(&buffer, &x, sizeof(int)); + serializeCopy(&buffer, &y, sizeof(int)); if (type != SerialPacketType::REGION_CONTENT) { return; @@ -46,16 +46,16 @@ void RegionPacket::Serialize(void* buffer) { } //solids - serialize(&buffer, region->GetSolidBitset(), REGION_SOLID_FOOTPRINT); + serializeCopy(&buffer, region->GetSolidBitset(), REGION_SOLID_FOOTPRINT); } void RegionPacket::Deserialize(void* buffer) { - deserialize(&buffer, &type, sizeof(SerialPacketType)); + deserializeCopy(&buffer, &type, sizeof(SerialPacketType)); //format - deserialize(&buffer, &roomIndex, sizeof(int)); - deserialize(&buffer, &x, sizeof(int)); - deserialize(&buffer, &y, sizeof(int)); + deserializeCopy(&buffer, &roomIndex, sizeof(int)); + deserializeCopy(&buffer, &x, sizeof(int)); + deserializeCopy(&buffer, &y, sizeof(int)); if (type != SerialPacketType::REGION_CONTENT) { return; @@ -75,5 +75,5 @@ void RegionPacket::Deserialize(void* buffer) { } //solids - deserialize(&buffer, region->GetSolidBitset(), REGION_SOLID_FOOTPRINT); + deserializeCopy(&buffer, region->GetSolidBitset(), REGION_SOLID_FOOTPRINT); } \ No newline at end of file diff --git a/common/network/packet_types/serial_packet_base.cpp b/common/network/packet_types/serial_packet_base.cpp index 81e3eb0..26f0c68 100644 --- a/common/network/packet_types/serial_packet_base.cpp +++ b/common/network/packet_types/serial_packet_base.cpp @@ -21,3 +21,4 @@ */ #include "serial_packet_base.hpp" +//NOTE: This is a sanity check \ No newline at end of file diff --git a/common/network/packet_types/server_packet.cpp b/common/network/packet_types/server_packet.cpp index df6c934..e059d49 100644 --- a/common/network/packet_types/server_packet.cpp +++ b/common/network/packet_types/server_packet.cpp @@ -24,19 +24,19 @@ #include "serial_utility.hpp" void ServerPacket::Serialize(void* buffer) { - serialize(&buffer, &type, sizeof(SerialPacketType)); + serializeCopy(&buffer, &type, sizeof(SerialPacketType)); //identify the server - serialize(&buffer, name, PACKET_STRING_SIZE); - serialize(&buffer, &playerCount, sizeof(int)); - serialize(&buffer, &version, sizeof(int)); + serializeCopy(&buffer, name, PACKET_STRING_SIZE); + serializeCopy(&buffer, &playerCount, sizeof(int)); + serializeCopy(&buffer, &version, sizeof(int)); } void ServerPacket::Deserialize(void* buffer) { - deserialize(&buffer, &type, sizeof(SerialPacketType)); + deserializeCopy(&buffer, &type, sizeof(SerialPacketType)); //identify the server - deserialize(&buffer, name, PACKET_STRING_SIZE); - deserialize(&buffer, &playerCount, sizeof(int)); - deserialize(&buffer, &version, sizeof(int)); + deserializeCopy(&buffer, name, PACKET_STRING_SIZE); + deserializeCopy(&buffer, &playerCount, sizeof(int)); + deserializeCopy(&buffer, &version, sizeof(int)); } diff --git a/common/network/serial_utility.cpp b/common/network/serial_utility.cpp index 98f16f7..9bda3bf 100644 --- a/common/network/serial_utility.cpp +++ b/common/network/serial_utility.cpp @@ -21,54 +21,72 @@ */ #include "serial_utility.hpp" +#include "serial_packet_type.hpp" + #include -void serialize(void** bufferHead, void* data, int size) { +void serializePacket(SerialPacketBase* packet, void* data) { + switch(packet->GetType()) { + //define all packet types + } +} + +void deserializePacket(SerialPacketBase* packet, void* data) { + //get the type + SerialPacketType type; + memcpy(&type, data, sizeof(SerialPacketType)); + + switch(type) { + //define all extra types + } +} + +void serializeCopy(void** bufferHead, void* data, int size) { memcpy(*bufferHead, data, size); (*bufferHead) = static_cast(static_cast(*bufferHead) + size); } -void deserialize(void** bufferHead, void* data, int size) { +void deserializeCopy(void** bufferHead, void* data, int size) { memcpy(data, *bufferHead, size); (*bufferHead) = static_cast(static_cast(*bufferHead) + size); } -void serializeStatistics(void** bufferHead, Statistics* stats) { +void serializeCopyStatistics(void** bufferHead, Statistics* stats) { //integers - serialize(bufferHead, &stats->level, sizeof(int)); - serialize(bufferHead, &stats->exp, sizeof(int)); - serialize(bufferHead, &stats->maxHP, sizeof(int)); - serialize(bufferHead, &stats->health, sizeof(int)); - serialize(bufferHead, &stats->maxMP, sizeof(int)); - serialize(bufferHead, &stats->mana, sizeof(int)); - serialize(bufferHead, &stats->attack, sizeof(int)); - serialize(bufferHead, &stats->defence, sizeof(int)); - serialize(bufferHead, &stats->intelligence, sizeof(int)); - serialize(bufferHead, &stats->resistance, sizeof(int)); - serialize(bufferHead, &stats->speed, sizeof(int)); + serializeCopy(bufferHead, &stats->level, sizeof(int)); + serializeCopy(bufferHead, &stats->exp, sizeof(int)); + serializeCopy(bufferHead, &stats->maxHP, sizeof(int)); + serializeCopy(bufferHead, &stats->health, sizeof(int)); + serializeCopy(bufferHead, &stats->maxMP, sizeof(int)); + serializeCopy(bufferHead, &stats->mana, sizeof(int)); + serializeCopy(bufferHead, &stats->attack, sizeof(int)); + serializeCopy(bufferHead, &stats->defence, sizeof(int)); + serializeCopy(bufferHead, &stats->intelligence, sizeof(int)); + serializeCopy(bufferHead, &stats->resistance, sizeof(int)); + serializeCopy(bufferHead, &stats->speed, sizeof(int)); //floats - serialize(bufferHead, &stats->accuracy, sizeof(float)); - serialize(bufferHead, &stats->evasion, sizeof(float)); - serialize(bufferHead, &stats->luck, sizeof(float)); + serializeCopy(bufferHead, &stats->accuracy, sizeof(float)); + serializeCopy(bufferHead, &stats->evasion, sizeof(float)); + serializeCopy(bufferHead, &stats->luck, sizeof(float)); } -void deserializeStatistics(void** bufferHead, Statistics* stats) { +void deserializeCopyStatistics(void** bufferHead, Statistics* stats) { //integers - deserialize(bufferHead, &stats->level, sizeof(int)); - deserialize(bufferHead, &stats->exp, sizeof(int)); - deserialize(bufferHead, &stats->maxHP, sizeof(int)); - deserialize(bufferHead, &stats->health, sizeof(int)); - deserialize(bufferHead, &stats->maxMP, sizeof(int)); - deserialize(bufferHead, &stats->mana, sizeof(int)); - deserialize(bufferHead, &stats->attack, sizeof(int)); - deserialize(bufferHead, &stats->defence, sizeof(int)); - deserialize(bufferHead, &stats->intelligence, sizeof(int)); - deserialize(bufferHead, &stats->resistance, sizeof(int)); - deserialize(bufferHead, &stats->speed, sizeof(int)); + deserializeCopy(bufferHead, &stats->level, sizeof(int)); + deserializeCopy(bufferHead, &stats->exp, sizeof(int)); + deserializeCopy(bufferHead, &stats->maxHP, sizeof(int)); + deserializeCopy(bufferHead, &stats->health, sizeof(int)); + deserializeCopy(bufferHead, &stats->maxMP, sizeof(int)); + deserializeCopy(bufferHead, &stats->mana, sizeof(int)); + deserializeCopy(bufferHead, &stats->attack, sizeof(int)); + deserializeCopy(bufferHead, &stats->defence, sizeof(int)); + deserializeCopy(bufferHead, &stats->intelligence, sizeof(int)); + deserializeCopy(bufferHead, &stats->resistance, sizeof(int)); + deserializeCopy(bufferHead, &stats->speed, sizeof(int)); //floats - deserialize(bufferHead, &stats->accuracy, sizeof(float)); - deserialize(bufferHead, &stats->evasion, sizeof(float)); - deserialize(bufferHead, &stats->luck, sizeof(float)); + deserializeCopy(bufferHead, &stats->accuracy, sizeof(float)); + deserializeCopy(bufferHead, &stats->evasion, sizeof(float)); + deserializeCopy(bufferHead, &stats->luck, sizeof(float)); } diff --git a/common/network/serial_utility.hpp b/common/network/serial_utility.hpp index 9af2a50..c9c3b6a 100644 --- a/common/network/serial_utility.hpp +++ b/common/network/serial_utility.hpp @@ -19,16 +19,24 @@ * 3. This notice may not be removed or altered from any source * distribution. */ -#ifndef SERIALIZEUTIL_HPP_ -#define SERIALIZEUTIL_HPP_ +#ifndef SERIALIZEUTILITY_HPP_ +#define SERIALIZEUTILITY_HPP_ + +#include "serial_packet_base.hpp" #include "statistics.hpp" -//raw memcpy -void serialize(void** bufferHead, void* data, int size); -void deserialize(void** bufferHead, void* data, int size); +//NOTE: The naming conventions here are fucking terrible -void serializeStatistics(void** bufferHead, Statistics* stats); -void deserializeStatistics(void** bufferHead, Statistics* stats); +//BUGFIX: There's really no way to escape this :( +void serializePacket(SerialPacketBase* packet, void* data); +void deserializePacket(SerialPacketBase* packet, void* data); + +//raw memcpy +void serializeCopy(void** bufferHead, void* data, int size); +void deserializeCopy(void** bufferHead, void* data, int size); + +void serializeCopyStatistics(void** bufferHead, Statistics* stats); +void deserializeCopyStatistics(void** bufferHead, Statistics* stats); #endif diff --git a/common/network/udp_network_utility.cpp b/common/network/udp_network_utility.cpp index 999fe54..0da6211 100644 --- a/common/network/udp_network_utility.cpp +++ b/common/network/udp_network_utility.cpp @@ -21,6 +21,8 @@ */ #include "udp_network_utility.hpp" +#include "serial_utility.hpp" + #include //BUGFIX: memset() is used before sending a packet to remove old data; you don't want to send sensitive data over the network @@ -164,7 +166,7 @@ int UDPNetworkUtility::SendTo(const char* ip, int port, SerialPacket* serialPack int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) { memset(packet->data, 0, packet->maxlen); - serialPacket->Serialize(packet->data); + serializePacket(serialPacket, packet->data); packet->len = PACKET_BUFFER_SIZE; packet->address = *add; @@ -179,7 +181,7 @@ int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) { int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) { memset(packet->data, 0, packet->maxlen); - serialPacket->Serialize(packet->data); + serializePacket(serialPacket, packet->data); packet->len = PACKET_BUFFER_SIZE; int ret = SDLNet_UDP_Send(socket, channel, packet); @@ -193,7 +195,7 @@ int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) { int UDPNetworkUtility::SendToAllChannels(SerialPacket* serialPacket) { memset(packet->data, 0, packet->maxlen); - serialPacket->Serialize(packet->data); + serializePacket(serialPacket, packet->data); packet->len = PACKET_BUFFER_SIZE; int sent = 0; @@ -213,7 +215,7 @@ int UDPNetworkUtility::Receive(SerialPacket* serialPacket) { int ret = SDLNet_UDP_Recv(socket, packet); if (ret > 0) { //BUG: This simply fails - serialPacket->Deserialize(packet->data); + deserializePacket(serialPacket, packet->data); serialPacket->srcAddress = packet->address; }