From 47684380a9a411a53edd3db670c5d4ff1774e76d Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Wed, 26 Mar 2014 00:30:10 +1100 Subject: [PATCH] I'm having trouble with the sequence of events --- common/network/network_packet.hpp | 12 ++++++--- common/network/serial.cpp | 44 ++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/common/network/network_packet.hpp b/common/network/network_packet.hpp index aed56d8..ce0c112 100644 --- a/common/network/network_packet.hpp +++ b/common/network/network_packet.hpp @@ -66,7 +66,8 @@ union NetworkPacket { PLAYER_UPDATE = 12, //map data - REGION_CONTENT = 13, + REGION_REQUEST = 13, + REGION_CONTENT = 14, }; //metadata on the packet itself @@ -102,10 +103,11 @@ union NetworkPacket { }playerInfo; //map data - struct MapInformation { + struct RegionInformation { Metadata meta; + int x, y; Region* region; - }mapInfo; + }regionInfo; //defaults NetworkPacket() { @@ -116,6 +118,10 @@ union NetworkPacket { #pragma pack(pop) +/* content: width * height * depth * sizoeof(type) + * map size: sizeof(int) * 2 + * metadata: sizeof(metadata) +*/ #define PACKET_BUFFER_SIZE std::max(sizeof(NetworkPacket), REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t) + sizeof(int) * 2 + sizeof(NetworkPacket::Metadata)) #endif diff --git a/common/network/serial.cpp b/common/network/serial.cpp index de97b46..2b7abe1 100644 --- a/common/network/serial.cpp +++ b/common/network/serial.cpp @@ -76,11 +76,7 @@ void serializePlayer(NetworkPacket* packet, char* buffer) { memcpy(buffer, &packet->playerInfo.motion.y, sizeof(double)); } -void serializeRegion(NetworkPacket* packet, char* buffer) { -// cout << "serializeRegion" << endl; - memcpy(buffer, &packet->meta.type, sizeof(NetworkPacket::Type)); - buffer += sizeof(NetworkPacket::Type); - +void serializeRegionContent(NetworkPacket* packet, char* buffer) { //TODO: incomplete /* for (register int i = 0; i < packet->mapInfo.region->GetWidth(); i++) { for (register int j = 0; j < packet->mapInfo.region->GetHeight(); j++) { @@ -92,6 +88,22 @@ void serializeRegion(NetworkPacket* packet, char* buffer) { }*/ } +void serializeRegion(NetworkPacket* packet, char* buffer) { +// cout << "serializeRegion" << endl; + memcpy(buffer, &packet->meta.type, sizeof(NetworkPacket::Type)); + buffer += sizeof(NetworkPacket::Type); + + //x & y + memcpy(buffer, &packet->regionInfo.x, sizeof(int)); + buffer += sizeof(int); + memcpy(buffer, &packet->regionInfo.y, sizeof(int)); + buffer += sizeof(int); + + if (packet->meta.type == NetworkPacket::Type::REGION_CONTENT) { + serializeRegionContent(packet, buffer); + } +} + //------------------------- //internal deserialization functions //------------------------- @@ -142,12 +154,24 @@ void deserializePlayer(NetworkPacket* packet, char* buffer) { memcpy(&packet->playerInfo.motion.y, buffer, sizeof(double)); } +void deserializeRegionContent(NetworkPacket* packet, char* buffer) { + //TODO +} + void deserializeRegion(NetworkPacket* packet, char* buffer) { // cout << "deserializeRegion" << endl; memcpy(&packet->meta.type, buffer, sizeof(NetworkPacket::Type)); buffer += sizeof(NetworkPacket::Type); - //TODO + //x & y + memcpy(&packet->regionInfo.x, buffer, sizeof(int)); + buffer += sizeof(int); + memcpy(&packet->regionInfo.y, buffer, sizeof(int)); + buffer += sizeof(int); + + if (packet->meta.type == NetworkPacket::Type::REGION_CONTENT) { + deserializeRegionContent(packet, buffer); + } } //------------------------- @@ -185,7 +209,8 @@ void serialize(NetworkPacket* packet, void* buffer) { serializePlayer(packet, reinterpret_cast(buffer)); break; - //map info + //region info + case NetworkPacket::Type::REGION_REQUEST: case NetworkPacket::Type::REGION_CONTENT: serializeRegion(packet, reinterpret_cast(buffer)); break; @@ -207,7 +232,7 @@ void deserialize(NetworkPacket* packet, void* buffer) { case NetworkPacket::Type::BROADCAST_REQUEST: case NetworkPacket::Type::JOIN_REQUEST: case NetworkPacket::Type::SYNCHRONIZE: - // + //NOTHING break; //Server info @@ -230,8 +255,9 @@ void deserialize(NetworkPacket* packet, void* buffer) { break; //map info + case NetworkPacket::Type::REGION_REQUEST: case NetworkPacket::Type::REGION_CONTENT: - serializeRegion(packet, reinterpret_cast(buffer)); + deserializeRegion(packet, reinterpret_cast(buffer)); break; } // for (int i = 0; i < sizeof(NetworkPacket); i++) {