Implemented the serialization switch statement
This commit is contained in:
@@ -235,7 +235,7 @@ void LobbyMenu::HandleJoinResponse(ClientPacket* const argPacket) {
|
|||||||
|
|
||||||
void LobbyMenu::SendBroadcastRequest() {
|
void LobbyMenu::SendBroadcastRequest() {
|
||||||
//broadcast to the network, or a specific server
|
//broadcast to the network, or a specific server
|
||||||
SerialPacket packet;
|
ClientPacket packet;
|
||||||
packet.type = SerialPacketType::BROADCAST_REQUEST;
|
packet.type = SerialPacketType::BROADCAST_REQUEST;
|
||||||
network.SendTo(config["server.host"].c_str(), config.Int("server.port"), &packet);
|
network.SendTo(config["server.host"].c_str(), config.Int("server.port"), &packet);
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "serial_utility.hpp"
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
void serializeRegionContent(void* buffer, RegionPacket* packet) {
|
void serializeRegion(void* buffer, RegionPacket* packet) {
|
||||||
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
//format
|
//format
|
||||||
@@ -49,7 +49,7 @@ void serializeRegionContent(void* buffer, RegionPacket* packet) {
|
|||||||
serialCopy(&buffer, packet->region->GetSolidBitset(), REGION_SOLID_FOOTPRINT);
|
serialCopy(&buffer, packet->region->GetSolidBitset(), REGION_SOLID_FOOTPRINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserializeRegionContent(void* buffer, RegionPacket* packet) {
|
void deserializeRegion(void* buffer, RegionPacket* packet) {
|
||||||
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
//format
|
//format
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
typedef SerialPacketBase SerialPacket;
|
typedef SerialPacketBase SerialPacket;
|
||||||
|
|
||||||
//DOCS: NETWORK_VERSION is used to discern compatible servers and clients
|
//DOCS: NETWORK_VERSION is used to discern compatible servers and clients
|
||||||
constexpr int NETWORK_VERSION = -1;
|
constexpr int NETWORK_VERSION = 20140831;
|
||||||
|
|
||||||
union MaxPacket {
|
union MaxPacket {
|
||||||
CharacterPacket a;
|
CharacterPacket a;
|
||||||
|
|||||||
@@ -32,34 +32,77 @@
|
|||||||
//raw memory copy
|
//raw memory copy
|
||||||
void serialCopy(void** buffer, void* data, int size) {
|
void serialCopy(void** buffer, void* data, int size) {
|
||||||
memcpy(*buffer, data, size);
|
memcpy(*buffer, data, size);
|
||||||
*buffer = static_cast<char*>(*buffer) + size;
|
*buffer = reinterpret_cast<char*>(*buffer) + size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserialCopy(void** buffer, void* data, int size) {
|
void deserialCopy(void** buffer, void* data, int size) {
|
||||||
memcpy(data, *buffer, size);
|
memcpy(data, *buffer, size);
|
||||||
*buffer = static_cast<char*>(*buffer) + size;
|
*buffer = reinterpret_cast<char*>(*buffer) + size;
|
||||||
}
|
|
||||||
|
|
||||||
//simple type functions
|
|
||||||
void serializeType(SerialPacketBase* packet, void* buffer) {
|
|
||||||
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializeType(SerialPacketBase* packet, void* buffer) {
|
|
||||||
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//main switch functions
|
//main switch functions
|
||||||
void serializePacket(SerialPacketBase* packet, void* buffer) {
|
void serializePacket(void* buffer, SerialPacketBase* packet) {
|
||||||
switch(packet->type) {
|
switch(packet->type) {
|
||||||
//TODO: implement the switch statement
|
case SerialPacketType::PING:
|
||||||
|
case SerialPacketType::PONG:
|
||||||
|
case SerialPacketType::BROADCAST_REQUEST:
|
||||||
|
case SerialPacketType::BROADCAST_RESPONSE:
|
||||||
|
serializeServer(buffer, static_cast<ServerPacket*>(packet));
|
||||||
|
break;
|
||||||
|
case SerialPacketType::JOIN_REQUEST:
|
||||||
|
case SerialPacketType::JOIN_RESPONSE:
|
||||||
|
case SerialPacketType::JOIN_REJECTION:
|
||||||
|
case SerialPacketType::SYNCHRONIZE:
|
||||||
|
case SerialPacketType::DISCONNECT:
|
||||||
|
case SerialPacketType::SHUTDOWN:
|
||||||
|
serializeClient(buffer, static_cast<ClientPacket*>(packet));
|
||||||
|
break;
|
||||||
|
case SerialPacketType::REGION_REQUEST:
|
||||||
|
case SerialPacketType::REGION_CONTENT:
|
||||||
|
serializeRegion(buffer, static_cast<RegionPacket*>(packet));
|
||||||
|
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:
|
||||||
|
serializeCharacter(buffer, static_cast<CharacterPacket*>(packet));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
void deserializePacket(void* buffer, SerialPacketBase* packet) {
|
||||||
//find the type, so that you can actually deserialize the packet!
|
//find the type, so that you can actually deserialize the packet!
|
||||||
deserializeType(packet, buffer);
|
SerialPacketType type;
|
||||||
switch(packet->type) {
|
memcpy(&type, buffer, sizeof(SerialPacketType));
|
||||||
//TODO: implement the switch statement
|
|
||||||
|
switch(type) {
|
||||||
|
case SerialPacketType::PING:
|
||||||
|
case SerialPacketType::PONG:
|
||||||
|
case SerialPacketType::BROADCAST_REQUEST:
|
||||||
|
case SerialPacketType::BROADCAST_RESPONSE:
|
||||||
|
deserializeServer(buffer, static_cast<ServerPacket*>(packet));
|
||||||
|
break;
|
||||||
|
case SerialPacketType::JOIN_REQUEST:
|
||||||
|
case SerialPacketType::JOIN_RESPONSE:
|
||||||
|
case SerialPacketType::JOIN_REJECTION:
|
||||||
|
case SerialPacketType::SYNCHRONIZE:
|
||||||
|
case SerialPacketType::DISCONNECT:
|
||||||
|
case SerialPacketType::SHUTDOWN:
|
||||||
|
deserializeClient(buffer, static_cast<ClientPacket*>(packet));
|
||||||
|
break;
|
||||||
|
case SerialPacketType::REGION_REQUEST:
|
||||||
|
case SerialPacketType::REGION_CONTENT:
|
||||||
|
deserializeRegion(buffer, static_cast<RegionPacket*>(packet));
|
||||||
|
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:
|
||||||
|
deserializeCharacter(buffer, static_cast<CharacterPacket*>(packet));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ void serialCopy(void** buffer, void* data, int size);
|
|||||||
void deserialCopy(void** buffer, void* data, int size);
|
void deserialCopy(void** buffer, void* data, int size);
|
||||||
|
|
||||||
//primary functions
|
//primary functions
|
||||||
void serializePacket(SerialPacketBase* packet, void* buffer);
|
void serializePacket(void* buffer, SerialPacketBase* packet);
|
||||||
void deserializePacket(SerialPacketBase* packet, void* buffer);
|
void deserializePacket(void* buffer, SerialPacketBase* packet);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ int UDPNetworkUtility::SendTo(const char* ip, int port, SerialPacketBase* serial
|
|||||||
|
|
||||||
int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacketBase* serialPacket) {
|
int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serializePacket(packet->data, serialPacket);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
packet->address = *add;
|
packet->address = *add;
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacketBase* serialPacket) {
|
|||||||
|
|
||||||
int UDPNetworkUtility::SendTo(int channel, SerialPacketBase* serialPacket) {
|
int UDPNetworkUtility::SendTo(int channel, SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serializePacket(packet->data, serialPacket);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
|
|
||||||
int ret = SDLNet_UDP_Send(socket, channel, packet);
|
int ret = SDLNet_UDP_Send(socket, channel, packet);
|
||||||
@@ -196,7 +196,7 @@ int UDPNetworkUtility::SendTo(int channel, SerialPacketBase* serialPacket) {
|
|||||||
|
|
||||||
int UDPNetworkUtility::SendToAllChannels(SerialPacketBase* serialPacket) {
|
int UDPNetworkUtility::SendToAllChannels(SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serializePacket(packet->data, serialPacket);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
|
|
||||||
int sent = 0;
|
int sent = 0;
|
||||||
@@ -214,7 +214,7 @@ int UDPNetworkUtility::SendToAllChannels(SerialPacketBase* serialPacket) {
|
|||||||
int UDPNetworkUtility::Receive(SerialPacketBase* serialPacket) {
|
int UDPNetworkUtility::Receive(SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
int ret = SDLNet_UDP_Recv(socket, packet);
|
int ret = SDLNet_UDP_Recv(socket, packet);
|
||||||
deserializePacket(serialPacket, packet->data);
|
deserializePacket(packet->data, serialPacket);
|
||||||
serialPacket->srcAddress = packet->address;
|
serialPacket->srcAddress = packet->address;
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
TODO: Sort out the *_cast<> stuff
|
||||||
TODO: encapsulate the data structures
|
TODO: encapsulate the data structures
|
||||||
TODO: Ping-pong and keep alive system
|
TODO: Ping-pong and keep alive system
|
||||||
TODO: Move the statistics into their own SQL table, instead of duplicating the structure a dozen times
|
TODO: Move the statistics into their own SQL table, instead of duplicating the structure a dozen times
|
||||||
|
|||||||
Reference in New Issue
Block a user