From 59285d1630481bb6c81ec5f6557193106d6bc957 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Fri, 7 Mar 2014 04:49:16 +1100 Subject: [PATCH] This isn't fucking working --- common/network/serial.cpp | 122 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 4 deletions(-) diff --git a/common/network/serial.cpp b/common/network/serial.cpp index 73f92c1..29f46e1 100644 --- a/common/network/serial.cpp +++ b/common/network/serial.cpp @@ -22,11 +22,125 @@ #include "serial.hpp" #include +#include +using namespace std; -void serialize(NetworkPacket* const packet, void* buffer) { - memcpy(buffer, packet, sizeof(NetworkPacket)); +//------------------------- +//internal serialization functions +//------------------------- + +void serializeType(NetworkPacket* packet, void* buffer) { + memcpy(buffer, &packet->meta.type, sizeof(NetworkPacket::Type)); } -void deserialize(NetworkPacket* const packet, void* buffer) { - memcpy(packet, buffer, sizeof(NetworkPacket)); +void serializeServer(NetworkPacket* packet, void* buffer) { + int len = 0; + memcpy((void*)((int)buffer + len), &packet->meta.type, sizeof(NetworkPacket::Type)); + len += sizeof(NetworkPacket::Type); + memcpy((void*)((int)buffer + len), packet->serverInfo.name, PACKET_STRING_SIZE); + len += PACKET_STRING_SIZE; +} + +void serializeClient(NetworkPacket* packet, void* buffer) { + //TODO +} + +void serializePlayer(NetworkPacket* packet, void* buffer) { + //TODO +} + +//------------------------- +//internal deserialization functions +//------------------------- + +void deserializeType(NetworkPacket* packet, void* buffer) { + memcpy(&packet->meta.type, buffer, sizeof(NetworkPacket::Type)); +} + +void deserializeServer(NetworkPacket* packet, void* buffer) { + int len = 0; + memcpy(&packet->meta.type, (void*)((int)buffer + len), sizeof(NetworkPacket::Type)); + len += sizeof(NetworkPacket::Type); + memcpy(packet->serverInfo.name, (void*)((int)buffer + len), PACKET_STRING_SIZE); + len += PACKET_STRING_SIZE; +} + +void deserializeClient(NetworkPacket* packet, void* buffer) { + //TODO +} + +void deserializePlayer(NetworkPacket* packet, void* buffer) { + //TODO +} + +//------------------------- +//the interface functions +//------------------------- + +void serialize(NetworkPacket* packet, void* buffer) { + cout << (int)packet->meta.type << endl; + switch(packet->meta.type) { + //No extra data + case NetworkPacket::Type::NONE: + case NetworkPacket::Type::PING: + case NetworkPacket::Type::PONG: + case NetworkPacket::Type::BROADCAST_REQUEST: + case NetworkPacket::Type::JOIN_REQUEST: + case NetworkPacket::Type::SHUTDOWN: + serializeType(packet, buffer); + break; + + //Server info + case NetworkPacket::Type::BROADCAST_RESPONSE: + serializeServer(packet, buffer); + break; + + //Client info + case NetworkPacket::Type::JOIN_RESPONSE: + case NetworkPacket::Type::DISCONNECT: + case NetworkPacket::Type::SYNCHRONIZE: + serializeClient(packet, buffer); + break; + + //Player info + case NetworkPacket::Type::PLAYER_NEW: + case NetworkPacket::Type::PLAYER_DELETE: + case NetworkPacket::Type::PLAYER_UPDATE: + serializePlayer(packet, buffer); + break; + } +} + +void deserialize(NetworkPacket* packet, void* buffer) { + cout << (int)packet->meta.type << endl; + switch(packet->meta.type) { + //No extra data + case NetworkPacket::Type::NONE: + case NetworkPacket::Type::PING: + case NetworkPacket::Type::PONG: + case NetworkPacket::Type::BROADCAST_REQUEST: + case NetworkPacket::Type::JOIN_REQUEST: + case NetworkPacket::Type::SHUTDOWN: + deserializeType(packet, buffer); + break; + + //Server info + case NetworkPacket::Type::BROADCAST_RESPONSE: + deserializeServer(packet, buffer); + break; + + //Client info + case NetworkPacket::Type::JOIN_RESPONSE: + case NetworkPacket::Type::DISCONNECT: + case NetworkPacket::Type::SYNCHRONIZE: + deserializeClient(packet, buffer); + break; + + //Player info + case NetworkPacket::Type::PLAYER_NEW: + case NetworkPacket::Type::PLAYER_DELETE: + case NetworkPacket::Type::PLAYER_UPDATE: + deserializePlayer(packet, buffer); + break; + } } \ No newline at end of file