Fixed segfault in common, changed casting of packets to static_cast

This required that I switch from using a char array for the packet buffers
to using malloc() and free(). They make more sense anyway, and I've
learned (or relearned) something about casting.
This commit is contained in:
Kayne Ruse
2014-06-12 03:47:49 +10:00
parent 13332bf3fc
commit a11867126c
7 changed files with 85 additions and 82 deletions
+4 -3
View File
@@ -86,10 +86,11 @@ void InCombat::FrameStart() {
void InCombat::Update(double delta) {
//suck in and process all waiting packets
char packetBuffer[MAX_PACKET_SIZE];
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
while(network.Receive(packetBuffer)) {
HandlePacket(packetBuffer);
}
free(static_cast<void*>(packetBuffer));
//TODO: more
}
+8 -7
View File
@@ -95,10 +95,11 @@ void InWorld::FrameStart() {
void InWorld::Update(double delta) {
//suck in and process all waiting packets
char packetBuffer[MAX_PACKET_SIZE];
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
while(network.Receive(packetBuffer)) {
HandlePacket(packetBuffer);
}
free(static_cast<void*>(packetBuffer));
//update the characters
for (auto& it : characterMap) {
@@ -254,16 +255,16 @@ void InWorld::HandlePacket(SerialPacket* const argPacket) {
HandleDisconnect(argPacket);
break;
case SerialPacketType::CHARACTER_NEW:
HandleCharacterNew(dynamic_cast<CharacterPacket*>(argPacket));
HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_DELETE:
HandleCharacterDelete(dynamic_cast<CharacterPacket*>(argPacket));
HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_UPDATE:
HandleCharacterUpdate(dynamic_cast<CharacterPacket*>(argPacket));
HandleCharacterUpdate(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::REGION_CONTENT:
HandleRegionContent(dynamic_cast<RegionPacket*>(argPacket));
HandleRegionContent(static_cast<RegionPacket*>(argPacket));
break;
//handle errors
default:
+6 -5
View File
@@ -85,10 +85,11 @@ void LobbyMenu::FrameStart() {
void LobbyMenu::Update(double delta) {
//suck in and process all waiting packets
char packetBuffer[MAX_PACKET_SIZE];
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
while(network.Receive(packetBuffer)) {
HandlePacket(packetBuffer);
}
free(static_cast<void*>(packetBuffer));
}
void LobbyMenu::FrameEnd() {
@@ -204,10 +205,10 @@ void LobbyMenu::KeyUp(SDL_KeyboardEvent const& key) {
void LobbyMenu::HandlePacket(SerialPacket* const argPacket) {
switch(argPacket->type) {
case SerialPacketType::BROADCAST_RESPONSE:
HandleBroadcastResponse(dynamic_cast<ServerPacket*>(argPacket));
HandleBroadcastResponse(static_cast<ServerPacket*>(argPacket));
break;
case SerialPacketType::JOIN_RESPONSE:
HandleJoinResponse(dynamic_cast<ClientPacket*>(argPacket));
HandleJoinResponse(static_cast<ClientPacket*>(argPacket));
break;
//handle errors
default: