diff --git a/client/in_combat.cpp b/client/in_combat.cpp index 207b97e..b10164f 100644 --- a/client/in_combat.cpp +++ b/client/in_combat.cpp @@ -85,11 +85,10 @@ void InCombat::FrameStart() { } void InCombat::Update(double delta) { - SerialPacket packet; - - //suck in all waiting packets - while(network.Receive(&packet)) { - HandlePacket(packet); + //suck in and process all waiting packets + char packetBuffer[MAX_PACKET_SIZE]; + while(network.Receive(reinterpret_cast(packetBuffer))) { + HandlePacket(reinterpret_cast(packetBuffer)); } //TODO: more @@ -154,19 +153,19 @@ void InCombat::KeyUp(SDL_KeyboardEvent const& key) { //Network handlers //------------------------- -void InCombat::HandlePacket(SerialPacket packet) { - switch(packet.meta.type) { - case SerialPacket::Type::DISCONNECT: - HandleDisconnect(packet); +void InCombat::HandlePacket(SerialPacket* const argPacket) { + switch(argPacket->type) { + case SerialPacketType::DISCONNECT: + HandleDisconnect(argPacket); break; //handle errors default: - throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in InCombat: " + to_string_custom(int(packet.meta.type)))); + throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in InCombat: " + to_string_custom(static_cast(argPacket->type)) )); break; } } -void InCombat::HandleDisconnect(SerialPacket) { +void InCombat::HandleDisconnect(SerialPacket* const) { SetNextScene(SceneList::RESTART); } @@ -177,52 +176,56 @@ void InCombat::HandleDisconnect(SerialPacket) { //------------------------- void InCombat::RequestSynchronize() { - SerialPacket packet; + ClientPacket newPacket; //request a sync - packet.meta.type = SerialPacket::Type::SYNCHRONIZE; - packet.clientInfo.clientIndex = clientIndex; - packet.clientInfo.accountIndex = accountIndex; - packet.clientInfo.characterIndex = characterIndex; + newPacket.type = SerialPacketType::SYNCHRONIZE; + newPacket.clientIndex = clientIndex; + newPacket.accountIndex = accountIndex; - network.SendTo(Channels::SERVER, &packet); + network.SendTo(Channels::SERVER, &newPacket); } void InCombat::SendPlayerUpdate() { - SerialPacket packet; + CharacterPacket newPacket; //pack the packet - packet.meta.type = SerialPacket::Type::CHARACTER_UPDATE; - packet.characterInfo.clientIndex = clientIndex; - packet.characterInfo.accountIndex = accountIndex; - packet.characterInfo.characterIndex = characterIndex; -// packet.characterInfo.position = localCharacter->position; -// packet.characterInfo.motion = localCharacter->motion; - //TODO: stats + newPacket.type = SerialPacketType::CHARACTER_UPDATE; - network.SendTo(Channels::SERVER, &packet); + newPacket.characterIndex = characterIndex; + //handle, avatar + newPacket.accountIndex = accountIndex; +// newPacket.roomIndex = localCharacter->roomIndex; +// newPacket.origin = localCharacter->origin; +// newPacket.motion = localCharacter->motion; +// newPacket.stats = localCharacter->stats; + + //TODO: equipment + //TODO: items + //TODO: buffs + //TODO: debuffs + + network.SendTo(Channels::SERVER, &newPacket); } void InCombat::RequestDisconnect() { - SerialPacket packet; + ClientPacket newPacket; //send a disconnect request - packet.meta.type = SerialPacket::Type::DISCONNECT; - packet.clientInfo.clientIndex = clientIndex; - packet.clientInfo.accountIndex = accountIndex; - packet.clientInfo.characterIndex = characterIndex; + newPacket.type = SerialPacketType::DISCONNECT; + newPacket.clientIndex = clientIndex; + newPacket.accountIndex = accountIndex; - network.SendTo(Channels::SERVER, &packet); + network.SendTo(Channels::SERVER, &newPacket); } void InCombat::RequestShutdown() { - SerialPacket packet; + ClientPacket newPacket; //send a shutdown request - packet.meta.type = SerialPacket::Type::SHUTDOWN; - packet.clientInfo.clientIndex = clientIndex; - packet.clientInfo.accountIndex = accountIndex; - packet.clientInfo.characterIndex = characterIndex; + newPacket.type = SerialPacketType::SHUTDOWN; + newPacket.clientIndex = clientIndex; + newPacket.accountIndex = accountIndex; - network.SendTo(Channels::SERVER, &packet); + network.SendTo(Channels::SERVER, &newPacket); } diff --git a/client/in_combat.hpp b/client/in_combat.hpp index ea8dad1..d345037 100644 --- a/client/in_combat.hpp +++ b/client/in_combat.hpp @@ -73,8 +73,8 @@ protected: void KeyUp(SDL_KeyboardEvent const&); //Network handlers - void HandlePacket(SerialPacket); - void HandleDisconnect(SerialPacket); + void HandlePacket(SerialPacket* const); + void HandleDisconnect(SerialPacket* const); //TODO: more network handlers //Server control diff --git a/client/in_world.cpp b/client/in_world.cpp index dd739e5..3aadc51 100644 --- a/client/in_world.cpp +++ b/client/in_world.cpp @@ -267,7 +267,7 @@ void InWorld::HandlePacket(SerialPacket* const argPacket) { break; //handle errors default: - throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in InWorld: " + to_string_custom(int(argPacket->type)) )); + throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in InWorld: " + to_string_custom(static_cast(argPacket->type)) )); break; } }