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:
@@ -86,10 +86,11 @@ void InCombat::FrameStart() {
|
|||||||
|
|
||||||
void InCombat::Update(double delta) {
|
void InCombat::Update(double delta) {
|
||||||
//suck in and process all waiting packets
|
//suck in and process all waiting packets
|
||||||
char packetBuffer[MAX_PACKET_SIZE];
|
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
|
||||||
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
|
while(network.Receive(packetBuffer)) {
|
||||||
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
|
HandlePacket(packetBuffer);
|
||||||
}
|
}
|
||||||
|
free(static_cast<void*>(packetBuffer));
|
||||||
|
|
||||||
//TODO: more
|
//TODO: more
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-7
@@ -95,10 +95,11 @@ void InWorld::FrameStart() {
|
|||||||
|
|
||||||
void InWorld::Update(double delta) {
|
void InWorld::Update(double delta) {
|
||||||
//suck in and process all waiting packets
|
//suck in and process all waiting packets
|
||||||
char packetBuffer[MAX_PACKET_SIZE];
|
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
|
||||||
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
|
while(network.Receive(packetBuffer)) {
|
||||||
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
|
HandlePacket(packetBuffer);
|
||||||
}
|
}
|
||||||
|
free(static_cast<void*>(packetBuffer));
|
||||||
|
|
||||||
//update the characters
|
//update the characters
|
||||||
for (auto& it : characterMap) {
|
for (auto& it : characterMap) {
|
||||||
@@ -254,16 +255,16 @@ void InWorld::HandlePacket(SerialPacket* const argPacket) {
|
|||||||
HandleDisconnect(argPacket);
|
HandleDisconnect(argPacket);
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::CHARACTER_NEW:
|
case SerialPacketType::CHARACTER_NEW:
|
||||||
HandleCharacterNew(dynamic_cast<CharacterPacket*>(argPacket));
|
HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::CHARACTER_DELETE:
|
case SerialPacketType::CHARACTER_DELETE:
|
||||||
HandleCharacterDelete(dynamic_cast<CharacterPacket*>(argPacket));
|
HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::CHARACTER_UPDATE:
|
case SerialPacketType::CHARACTER_UPDATE:
|
||||||
HandleCharacterUpdate(dynamic_cast<CharacterPacket*>(argPacket));
|
HandleCharacterUpdate(static_cast<CharacterPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::REGION_CONTENT:
|
case SerialPacketType::REGION_CONTENT:
|
||||||
HandleRegionContent(dynamic_cast<RegionPacket*>(argPacket));
|
HandleRegionContent(static_cast<RegionPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
//handle errors
|
//handle errors
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -85,10 +85,11 @@ void LobbyMenu::FrameStart() {
|
|||||||
|
|
||||||
void LobbyMenu::Update(double delta) {
|
void LobbyMenu::Update(double delta) {
|
||||||
//suck in and process all waiting packets
|
//suck in and process all waiting packets
|
||||||
char packetBuffer[MAX_PACKET_SIZE];
|
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
|
||||||
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
|
while(network.Receive(packetBuffer)) {
|
||||||
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
|
HandlePacket(packetBuffer);
|
||||||
}
|
}
|
||||||
|
free(static_cast<void*>(packetBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LobbyMenu::FrameEnd() {
|
void LobbyMenu::FrameEnd() {
|
||||||
@@ -204,10 +205,10 @@ void LobbyMenu::KeyUp(SDL_KeyboardEvent const& key) {
|
|||||||
void LobbyMenu::HandlePacket(SerialPacket* const argPacket) {
|
void LobbyMenu::HandlePacket(SerialPacket* const argPacket) {
|
||||||
switch(argPacket->type) {
|
switch(argPacket->type) {
|
||||||
case SerialPacketType::BROADCAST_RESPONSE:
|
case SerialPacketType::BROADCAST_RESPONSE:
|
||||||
HandleBroadcastResponse(dynamic_cast<ServerPacket*>(argPacket));
|
HandleBroadcastResponse(static_cast<ServerPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::JOIN_RESPONSE:
|
case SerialPacketType::JOIN_RESPONSE:
|
||||||
HandleJoinResponse(dynamic_cast<ClientPacket*>(argPacket));
|
HandleJoinResponse(static_cast<ClientPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
//handle errors
|
//handle errors
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -32,77 +32,77 @@ enum class SerialPacketType {
|
|||||||
|
|
||||||
//keep alive
|
//keep alive
|
||||||
//ping => pong
|
//ping => pong
|
||||||
PING,
|
PING = 1,
|
||||||
PONG,
|
PONG = 2,
|
||||||
|
|
||||||
//search for the server list
|
//search for the server list
|
||||||
//none => server name, player count, version info (and source address)
|
//none => server name, player count, version info (and source address)
|
||||||
BROADCAST_REQUEST,
|
BROADCAST_REQUEST = 3,
|
||||||
BROADCAST_RESPONSE,
|
BROADCAST_RESPONSE = 4,
|
||||||
|
|
||||||
//try to join the server
|
//try to join the server
|
||||||
//username, and password => client index, account index
|
//username, and password => client index, account index
|
||||||
JOIN_REQUEST,
|
JOIN_REQUEST = 5,
|
||||||
JOIN_RESPONSE,
|
JOIN_RESPONSE = 6,
|
||||||
JOIN_REJECTION,
|
JOIN_REJECTION = 7,
|
||||||
|
|
||||||
//mass update of all surrounding content
|
//mass update of all surrounding content
|
||||||
//character.x, character.y => packet barrage
|
//character.x, character.y => packet barrage
|
||||||
SYNCHRONIZE,
|
SYNCHRONIZE = 8,
|
||||||
|
|
||||||
//disconnect from the server
|
//disconnect from the server
|
||||||
//autentication, account index => disconnect that account
|
//autentication, account index => disconnect that account
|
||||||
DISCONNECT,
|
DISCONNECT = 9,
|
||||||
|
|
||||||
//shut down the server
|
//shut down the server
|
||||||
//autentication => disconnect, shutdown
|
//autentication => disconnect, shutdown
|
||||||
SHUTDOWN,
|
SHUTDOWN = 10,
|
||||||
|
|
||||||
//map data
|
//map data
|
||||||
//room index, region.x, region.y => room index, region.x, region.y, region content
|
//room index, region.x, region.y => room index, region.x, region.y, region content
|
||||||
REGION_REQUEST,
|
REGION_REQUEST = 11,
|
||||||
REGION_CONTENT,
|
REGION_CONTENT = 12,
|
||||||
|
|
||||||
//combat data
|
//combat data
|
||||||
//TODO: system incomplete
|
//TODO: system incomplete
|
||||||
COMBAT_NEW,
|
COMBAT_NEW = 13,
|
||||||
COMBAT_DELETE,
|
COMBAT_DELETE = 14,
|
||||||
COMBAT_UPDATE,
|
COMBAT_UPDATE = 15,
|
||||||
|
|
||||||
COMBAT_ENTER_REQUEST,
|
COMBAT_ENTER_REQUEST = 16,
|
||||||
COMBAT_ENTER_RESPONSE,
|
COMBAT_ENTER_RESPONSE = 17,
|
||||||
|
|
||||||
COMBAT_EXIT_REQUEST,
|
COMBAT_EXIT_REQUEST = 18,
|
||||||
COMBAT_EXIT_RESPONSE,
|
COMBAT_EXIT_RESPONSE = 19,
|
||||||
|
|
||||||
//TODO: COMBAT info
|
//TODO: COMBAT info
|
||||||
|
|
||||||
COMBAT_REJECTION,
|
COMBAT_REJECTION = 20,
|
||||||
|
|
||||||
//character data
|
//character data
|
||||||
//character data => etc.
|
//character data => etc.
|
||||||
CHARACTER_NEW,
|
CHARACTER_NEW = 21,
|
||||||
CHARACTER_DELETE,
|
CHARACTER_DELETE = 22,
|
||||||
CHARACTER_UPDATE,
|
CHARACTER_UPDATE = 23,
|
||||||
|
|
||||||
//authentication, character index => character stats
|
//authentication, character index => character stats
|
||||||
CHARACTER_STATS_REQUEST,
|
CHARACTER_STATS_REQUEST= 24,
|
||||||
CHARACTER_STATS_RESPONSE,
|
CHARACTER_STATS_RESPONSE = 25,
|
||||||
|
|
||||||
//character new => character rejection, disconnect?
|
//character new => character rejection, disconnect?
|
||||||
CHARACTER_REJECTION,
|
CHARACTER_REJECTION = 26,
|
||||||
|
|
||||||
//enemy data
|
//enemy data
|
||||||
//enemy data => etc.
|
//enemy data => etc.
|
||||||
ENEMY_NEW,
|
ENEMY_NEW = 27,
|
||||||
ENEMY_DELETE,
|
ENEMY_DELETE = 28,
|
||||||
ENEMY_UPDATE,
|
ENEMY_UPDATE = 29,
|
||||||
|
|
||||||
ENEMY_STATS_REQUEST,
|
ENEMY_STATS_REQUEST = 30,
|
||||||
ENEMY_STATS_RESPONSE,
|
ENEMY_STATS_RESPONSE = 31,
|
||||||
|
|
||||||
//enemy index => enemy doens't exist
|
//enemy index => enemy doens't exist
|
||||||
ENEMY_REJECTION,
|
ENEMY_REJECTION= 32,
|
||||||
|
|
||||||
//NOTE: more packet types go here
|
//NOTE: more packet types go here
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ void serializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::CHARACTER_UPDATE:
|
case SerialPacketType::CHARACTER_UPDATE:
|
||||||
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
||||||
case SerialPacketType::CHARACTER_STATS_RESPONSE:
|
case SerialPacketType::CHARACTER_STATS_RESPONSE:
|
||||||
serializeCharacter(dynamic_cast<CharacterPacket*>(packet), buffer);
|
serializeCharacter(static_cast<CharacterPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//client info
|
//client info
|
||||||
@@ -65,7 +65,7 @@ void serializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::SYNCHRONIZE:
|
case SerialPacketType::SYNCHRONIZE:
|
||||||
case SerialPacketType::DISCONNECT:
|
case SerialPacketType::DISCONNECT:
|
||||||
case SerialPacketType::SHUTDOWN:
|
case SerialPacketType::SHUTDOWN:
|
||||||
serializeClient(dynamic_cast<ClientPacket*>(packet), buffer);
|
serializeClient(static_cast<ClientPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//combat info
|
//combat info
|
||||||
@@ -79,7 +79,7 @@ void serializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::COMBAT_EXIT_REQUEST:
|
case SerialPacketType::COMBAT_EXIT_REQUEST:
|
||||||
case SerialPacketType::COMBAT_EXIT_RESPONSE:
|
case SerialPacketType::COMBAT_EXIT_RESPONSE:
|
||||||
|
|
||||||
serializeCombat(dynamic_cast<CombatPacket*>(packet), buffer);
|
serializeCombat(static_cast<CombatPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//enemy info
|
//enemy info
|
||||||
@@ -88,21 +88,21 @@ void serializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::ENEMY_UPDATE:
|
case SerialPacketType::ENEMY_UPDATE:
|
||||||
case SerialPacketType::ENEMY_STATS_REQUEST:
|
case SerialPacketType::ENEMY_STATS_REQUEST:
|
||||||
case SerialPacketType::ENEMY_STATS_RESPONSE:
|
case SerialPacketType::ENEMY_STATS_RESPONSE:
|
||||||
serializeEnemy(dynamic_cast<EnemyPacket*>(packet), buffer);
|
serializeEnemy(static_cast<EnemyPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//region info
|
//region info
|
||||||
case SerialPacketType::REGION_REQUEST:
|
case SerialPacketType::REGION_REQUEST:
|
||||||
serializeRegionFormat(dynamic_cast<RegionPacket*>(packet), buffer);
|
serializeRegionFormat(static_cast<RegionPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SerialPacketType::REGION_CONTENT:
|
case SerialPacketType::REGION_CONTENT:
|
||||||
serializeRegionContent(dynamic_cast<RegionPacket*>(packet), buffer);
|
serializeRegionContent(static_cast<RegionPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//server info
|
//server info
|
||||||
case SerialPacketType::BROADCAST_RESPONSE:
|
case SerialPacketType::BROADCAST_RESPONSE:
|
||||||
serializeServer(dynamic_cast<ServerPacket*>(packet), buffer);
|
serializeServer(static_cast<ServerPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::CHARACTER_UPDATE:
|
case SerialPacketType::CHARACTER_UPDATE:
|
||||||
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
||||||
case SerialPacketType::CHARACTER_STATS_RESPONSE:
|
case SerialPacketType::CHARACTER_STATS_RESPONSE:
|
||||||
deserializeCharacter(dynamic_cast<CharacterPacket*>(packet), buffer);
|
deserializeCharacter(static_cast<CharacterPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//client info
|
//client info
|
||||||
@@ -141,7 +141,7 @@ void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::SYNCHRONIZE:
|
case SerialPacketType::SYNCHRONIZE:
|
||||||
case SerialPacketType::DISCONNECT:
|
case SerialPacketType::DISCONNECT:
|
||||||
case SerialPacketType::SHUTDOWN:
|
case SerialPacketType::SHUTDOWN:
|
||||||
deserializeClient(dynamic_cast<ClientPacket*>(packet), buffer);
|
deserializeClient(static_cast<ClientPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//combat info
|
//combat info
|
||||||
@@ -155,7 +155,7 @@ void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::COMBAT_EXIT_REQUEST:
|
case SerialPacketType::COMBAT_EXIT_REQUEST:
|
||||||
case SerialPacketType::COMBAT_EXIT_RESPONSE:
|
case SerialPacketType::COMBAT_EXIT_RESPONSE:
|
||||||
|
|
||||||
serializeCombat(dynamic_cast<CombatPacket*>(packet), buffer);
|
serializeCombat(static_cast<CombatPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//enemy info
|
//enemy info
|
||||||
@@ -164,21 +164,21 @@ void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
|||||||
case SerialPacketType::ENEMY_UPDATE:
|
case SerialPacketType::ENEMY_UPDATE:
|
||||||
case SerialPacketType::ENEMY_STATS_REQUEST:
|
case SerialPacketType::ENEMY_STATS_REQUEST:
|
||||||
case SerialPacketType::ENEMY_STATS_RESPONSE:
|
case SerialPacketType::ENEMY_STATS_RESPONSE:
|
||||||
serializeEnemy(dynamic_cast<EnemyPacket*>(packet), buffer);
|
serializeEnemy(static_cast<EnemyPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//region info
|
//region info
|
||||||
case SerialPacketType::REGION_REQUEST:
|
case SerialPacketType::REGION_REQUEST:
|
||||||
deserializeRegionFormat(dynamic_cast<RegionPacket*>(packet), buffer);
|
deserializeRegionFormat(static_cast<RegionPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SerialPacketType::REGION_CONTENT:
|
case SerialPacketType::REGION_CONTENT:
|
||||||
deserializeRegionContent(dynamic_cast<RegionPacket*>(packet), buffer);
|
deserializeRegionContent(static_cast<RegionPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//server info
|
//server info
|
||||||
case SerialPacketType::BROADCAST_RESPONSE:
|
case SerialPacketType::BROADCAST_RESPONSE:
|
||||||
deserializeServer(dynamic_cast<ServerPacket*>(packet), buffer);
|
deserializeServer(static_cast<ServerPacket*>(packet), buffer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,8 +3,7 @@
|
|||||||
#MKDIR=mkdir
|
#MKDIR=mkdir
|
||||||
#RM=del /y
|
#RM=del /y
|
||||||
|
|
||||||
CXXFLAGS+=-static-libgcc -static-libstdc++
|
CXXFLAGS+=-static-libgcc -static-libstdc++ -g
|
||||||
CFLAGS+=-static-libgcc
|
|
||||||
|
|
||||||
export
|
export
|
||||||
|
|
||||||
|
|||||||
@@ -134,17 +134,18 @@ void ServerApplication::Init(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::Proc() {
|
void ServerApplication::Proc() {
|
||||||
char packetBuffer[MAX_PACKET_SIZE];
|
SerialPacket* packetBuffer = static_cast<SerialPacket*>(malloc(MAX_PACKET_SIZE));
|
||||||
while(running) {
|
while(running) {
|
||||||
//suck in the waiting packets & process them
|
//suck in the waiting packets & process them
|
||||||
while(network.Receive(reinterpret_cast<SerialPacket*>(packetBuffer))) {
|
while(network.Receive(packetBuffer)) {
|
||||||
HandlePacket(reinterpret_cast<SerialPacket*>(packetBuffer));
|
HandlePacket(packetBuffer);
|
||||||
}
|
}
|
||||||
//update the internals
|
//update the internals
|
||||||
//TODO: update the internals i.e. player positions
|
//TODO: update the internals i.e. player positions
|
||||||
//give the computer a break
|
//give the computer a break
|
||||||
SDL_Delay(10);
|
SDL_Delay(10);
|
||||||
}
|
}
|
||||||
|
free(static_cast<void*>(packetBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::Quit() {
|
void ServerApplication::Quit() {
|
||||||
@@ -168,21 +169,21 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
|
|||||||
switch(argPacket->type) {
|
switch(argPacket->type) {
|
||||||
//basic connections
|
//basic connections
|
||||||
case SerialPacketType::BROADCAST_REQUEST:
|
case SerialPacketType::BROADCAST_REQUEST:
|
||||||
HandleBroadcastRequest(dynamic_cast<SerialPacket*>(argPacket));
|
HandleBroadcastRequest(static_cast<SerialPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::JOIN_REQUEST:
|
case SerialPacketType::JOIN_REQUEST:
|
||||||
HandleJoinRequest(dynamic_cast<ClientPacket*>(argPacket));
|
HandleJoinRequest(static_cast<ClientPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::DISCONNECT:
|
case SerialPacketType::DISCONNECT:
|
||||||
HandleDisconnect(dynamic_cast<ClientPacket*>(argPacket));
|
HandleDisconnect(static_cast<ClientPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::SHUTDOWN:
|
case SerialPacketType::SHUTDOWN:
|
||||||
HandleShutdown(dynamic_cast<SerialPacket*>(argPacket));
|
HandleShutdown(static_cast<SerialPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//map management
|
//map management
|
||||||
case SerialPacketType::REGION_REQUEST:
|
case SerialPacketType::REGION_REQUEST:
|
||||||
HandleRegionRequest(dynamic_cast<RegionPacket*>(argPacket));
|
HandleRegionRequest(static_cast<RegionPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//combat management
|
//combat management
|
||||||
@@ -190,14 +191,14 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
|
|||||||
|
|
||||||
//character management
|
//character management
|
||||||
case SerialPacketType::CHARACTER_NEW:
|
case SerialPacketType::CHARACTER_NEW:
|
||||||
HandleCharacterNew(dynamic_cast<CharacterPacket*>(argPacket));
|
HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::CHARACTER_DELETE:
|
case SerialPacketType::CHARACTER_DELETE:
|
||||||
HandleCharacterDelete(dynamic_cast<CharacterPacket*>(argPacket));
|
HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
case SerialPacketType::CHARACTER_UPDATE:
|
case SerialPacketType::CHARACTER_UPDATE:
|
||||||
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
||||||
HandleCharacterUpdate(dynamic_cast<CharacterPacket*>(argPacket));
|
HandleCharacterUpdate(static_cast<CharacterPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//enemy management
|
//enemy management
|
||||||
@@ -205,12 +206,12 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
|
|||||||
|
|
||||||
//mismanagement
|
//mismanagement
|
||||||
case SerialPacketType::SYNCHRONIZE:
|
case SerialPacketType::SYNCHRONIZE:
|
||||||
HandleSynchronize(dynamic_cast<ClientPacket*>(argPacket));
|
HandleSynchronize(static_cast<ClientPacket*>(argPacket));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//handle errors
|
//handle errors
|
||||||
default:
|
default:
|
||||||
throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in the server: " + to_string_custom(int(argPacket->type))));
|
throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in the server: " + to_string_custom(static_cast<int>(argPacket->type)) ));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -228,7 +229,7 @@ void ServerApplication::HandleBroadcastRequest(SerialPacket* const argPacket) {
|
|||||||
newPacket.playerCount = characterMgr.GetContainer()->size();
|
newPacket.playerCount = characterMgr.GetContainer()->size();
|
||||||
newPacket.version = NETWORK_VERSION;
|
newPacket.version = NETWORK_VERSION;
|
||||||
|
|
||||||
network.SendTo(&argPacket->srcAddress, dynamic_cast<SerialPacket*>(&newPacket));
|
network.SendTo(&argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::HandleJoinRequest(ClientPacket* const argPacket) {
|
void ServerApplication::HandleJoinRequest(ClientPacket* const argPacket) {
|
||||||
@@ -251,7 +252,7 @@ void ServerApplication::HandleJoinRequest(ClientPacket* const argPacket) {
|
|||||||
newPacket.clientIndex = clientUID;
|
newPacket.clientIndex = clientUID;
|
||||||
newPacket.accountIndex = accountIndex;
|
newPacket.accountIndex = accountIndex;
|
||||||
|
|
||||||
network.SendTo(&newClient.address, dynamic_cast<SerialPacket*>(&newPacket));
|
network.SendTo(&newClient.address, static_cast<SerialPacket*>(&newPacket));
|
||||||
|
|
||||||
//finished this routine
|
//finished this routine
|
||||||
clientMap[clientUID++] = newClient;
|
clientMap[clientUID++] = newClient;
|
||||||
@@ -264,7 +265,7 @@ void ServerApplication::HandleDisconnect(ClientPacket* const argPacket) {
|
|||||||
//forward to the specified client
|
//forward to the specified client
|
||||||
network.SendTo(
|
network.SendTo(
|
||||||
&clientMap[ accountMgr.GetAccount(argPacket->accountIndex)->clientIndex ].address,
|
&clientMap[ accountMgr.GetAccount(argPacket->accountIndex)->clientIndex ].address,
|
||||||
dynamic_cast<SerialPacket*>(argPacket)
|
static_cast<SerialPacket*>(argPacket)
|
||||||
);
|
);
|
||||||
|
|
||||||
//save and unload this account's characters
|
//save and unload this account's characters
|
||||||
@@ -315,7 +316,7 @@ void ServerApplication::HandleRegionRequest(RegionPacket* const argPacket) {
|
|||||||
newPacket.region = roomMgr.GetRoom(argPacket->roomIndex)->pager.GetRegion(argPacket->x, argPacket->y);
|
newPacket.region = roomMgr.GetRoom(argPacket->roomIndex)->pager.GetRegion(argPacket->x, argPacket->y);
|
||||||
|
|
||||||
//send the content
|
//send the content
|
||||||
network.SendTo(&argPacket->srcAddress, dynamic_cast<SerialPacket*>(argPacket));
|
network.SendTo(&argPacket->srcAddress, static_cast<SerialPacket*>(argPacket));
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
@@ -435,7 +436,7 @@ void ServerApplication::HandleSynchronize(ClientPacket* const argPacket) {
|
|||||||
for (auto& it : *characterMgr.GetContainer()) {
|
for (auto& it : *characterMgr.GetContainer()) {
|
||||||
newPacket.characterIndex = it.first;
|
newPacket.characterIndex = it.first;
|
||||||
CopyCharacterToPacket(&newPacket, it.first);
|
CopyCharacterToPacket(&newPacket, it.first);
|
||||||
network.SendTo(&client.address, dynamic_cast<SerialPacket*>(&newPacket));
|
network.SendTo(&client.address, static_cast<SerialPacket*>(&newPacket));
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: more in HandleSynchronize()
|
//TODO: more in HandleSynchronize()
|
||||||
@@ -458,7 +459,7 @@ void ServerApplication::PumpCharacterUnload(int uid) {
|
|||||||
CharacterPacket newPacket;
|
CharacterPacket newPacket;
|
||||||
newPacket.type = SerialPacketType::CHARACTER_DELETE;
|
newPacket.type = SerialPacketType::CHARACTER_DELETE;
|
||||||
newPacket.characterIndex = uid;
|
newPacket.characterIndex = uid;
|
||||||
PumpPacket(dynamic_cast<SerialPacket*>(&newPacket));
|
PumpPacket(static_cast<SerialPacket*>(&newPacket));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::CopyCharacterToPacket(CharacterPacket* const packet, int characterIndex) {
|
void ServerApplication::CopyCharacterToPacket(CharacterPacket* const packet, int characterIndex) {
|
||||||
|
|||||||
Reference in New Issue
Block a user