diff --git a/client/in_world.cpp b/client/in_world.cpp index 8c8f156..5646413 100644 --- a/client/in_world.cpp +++ b/client/in_world.cpp @@ -135,18 +135,18 @@ void InWorld::KeyUp(SDL_KeyboardEvent const& key) { //Utilities //------------------------- -int InWorld::HandlePacket(Packet p) { +int InWorld::HandlePacket(Packet::Packet p) { switch(p.meta.type) { - case PacketType::NONE: + case Packet::Type::NONE: //DO NOTHING return 0; break; - case PacketType::PING: + case Packet::Type::PING: //quick pong - p.meta.type = PacketType::PONG; - netUtil->Send(&p.meta.address, &p, sizeof(Packet)); + p.meta.type = Packet::Type::PONG; + netUtil->Send(&p.meta.address, &p, sizeof(Packet::Packet)); break; - case PacketType::PONG: + case Packet::Type::PONG: // break; // case PacketType::BROADCAST_REQUEST: @@ -161,7 +161,7 @@ int InWorld::HandlePacket(Packet p) { // case PacketType::JOIN_RESPONSE: // // // break; - case PacketType::DISCONNECT: + case Packet::Type::DISCONNECT: HandleDisconnection(p.disconnect); break; // case PacketType::SYNCHRONIZE: @@ -184,10 +184,10 @@ int InWorld::HandlePacket(Packet p) { void InWorld::Disconnect() { //disconnect - Packet p; - p.meta.type = PacketType::DISCONNECT; + Packet::Packet p; + p.meta.type = Packet::Type::DISCONNECT; p.disconnect.clientIndex = infoMgr->GetClientIndex(); - netUtil->Send(GAME_CHANNEL, reinterpret_cast(&p), sizeof(Packet)); + netUtil->Send(GAME_CHANNEL, reinterpret_cast(&p), sizeof(Packet::Packet)); netUtil->Unbind(GAME_CHANNEL); endQueueThread(); @@ -201,7 +201,7 @@ void InWorld::ExitGame() { cout << "The game session has ended" << endl; } -void InWorld::HandleDisconnection(::Disconnect& disconnect) { +void InWorld::HandleDisconnection(Packet::Disconnect& disconnect) { Disconnect(); SetNextScene(SceneList::MAINMENU); cout << "You have been disconnected" << endl; diff --git a/client/in_world.hpp b/client/in_world.hpp index fe8dbaf..c3e9b45 100644 --- a/client/in_world.hpp +++ b/client/in_world.hpp @@ -26,7 +26,7 @@ #include "utilities.hpp" #include "defines.hpp" #include "singleton.hpp" -#include "packet_type.hpp" +#include "packet.hpp" #include "network_queue.hpp" #include "information_manager.hpp" @@ -62,10 +62,10 @@ protected: void KeyUp(SDL_KeyboardEvent const&); //Utilities - int HandlePacket(Packet p); + int HandlePacket(Packet::Packet p); void Disconnect(); void ExitGame(); - void HandleDisconnection(::Disconnect&); + void HandleDisconnection(Packet::Disconnect&); //services ConfigUtility* configUtil = Singleton::Get(); diff --git a/client/lobby.cpp b/client/lobby.cpp index 7d1b195..0e36a80 100644 --- a/client/lobby.cpp +++ b/client/lobby.cpp @@ -155,30 +155,30 @@ void Lobby::KeyUp(SDL_KeyboardEvent const& key) { //Utilities //------------------------- -int Lobby::HandlePacket(Packet p) { +int Lobby::HandlePacket(Packet::Packet p) { switch(p.meta.type) { - case PacketType::NONE: + case Packet::Type::NONE: //DO NOTHING return 0; break; - case PacketType::PING: + case Packet::Type::PING: //quick pong - p.meta.type = PacketType::PONG; - netUtil->Send(&p.meta.address, &p, sizeof(Packet)); + p.meta.type = Packet::Type::PONG; + netUtil->Send(&p.meta.address, &p, sizeof(Packet::Packet)); break; - case PacketType::PONG: + case Packet::Type::PONG: // break; // case PacketType::BROADCAST_REQUEST: // // // break; - case PacketType::BROADCAST_RESPONSE: + case Packet::Type::BROADCAST_RESPONSE: PushServer(p.broadcastResponse); break; // case PacketType::JOIN_REQUEST: // // // break; - case PacketType::JOIN_RESPONSE: + case Packet::Type::JOIN_RESPONSE: BeginGame(p.joinResponse); break; // case PacketType::DISCONNECT: @@ -203,13 +203,13 @@ int Lobby::HandlePacket(Packet p) { } void Lobby::BroadcastNetwork() { - Packet p; - p.meta.type = PacketType::BROADCAST_REQUEST; - netUtil->Send("255.255.255.255", configUtil->Int("server.port"), &p, sizeof(Packet)); + Packet::Packet p; + p.meta.type = Packet::Type::BROADCAST_REQUEST; + netUtil->Send("255.255.255.255", configUtil->Int("server.port"), &p, sizeof(Packet::Packet)); serverList.clear(); } -void Lobby::PushServer(BroadcastResponse& bcast) { +void Lobby::PushServer(Packet::BroadcastResponse& bcast) { ServerEntry entry; entry.name = bcast.name; entry.address = bcast.meta.address; @@ -221,12 +221,12 @@ void Lobby::ConnectToServer(ServerEntry* server) { if (!server) { throw(runtime_error("No server received")); } - Packet p; - p.meta.type = PacketType::JOIN_REQUEST; - netUtil->Send(&server->address, reinterpret_cast(&p), sizeof(Packet)); + Packet::Packet p; + p.meta.type = Packet::Type::JOIN_REQUEST; + netUtil->Send(&server->address, reinterpret_cast(&p), sizeof(Packet::Packet)); } -void Lobby::BeginGame(JoinResponse& response) { +void Lobby::BeginGame(Packet::JoinResponse& response) { //should be downloading the resources here as well infoMgr->SetClientIndex(response.clientIndex); netUtil->Bind(&response.meta.address, GAME_CHANNEL); diff --git a/client/lobby.hpp b/client/lobby.hpp index d19a7cc..ebf1e5d 100644 --- a/client/lobby.hpp +++ b/client/lobby.hpp @@ -29,7 +29,7 @@ #include "singleton.hpp" #include "server_entry.hpp" -#include "packet_type.hpp" +#include "packet.hpp" #include "network_queue.hpp" #include "information_manager.hpp" @@ -63,11 +63,11 @@ protected: void KeyUp(SDL_KeyboardEvent const&); //utilities - int HandlePacket(Packet p); + int HandlePacket(Packet::Packet p); void BroadcastNetwork(); - void PushServer(BroadcastResponse&); + void PushServer(Packet::BroadcastResponse&); void ConnectToServer(ServerEntry*); - void BeginGame(JoinResponse&); + void BeginGame(Packet::JoinResponse&); //services ConfigUtility* configUtil = Singleton::Get(); diff --git a/client/scene_manager.cpp b/client/scene_manager.cpp index dfc2c6c..93f2d9f 100644 --- a/client/scene_manager.cpp +++ b/client/scene_manager.cpp @@ -89,7 +89,7 @@ void SceneManager::Init() { flags); //initiate the remaining singletons - netUtil->Open(0, sizeof(Packet)); + netUtil->Open(0, sizeof(Packet::Packet)); } void SceneManager::Proc() { diff --git a/client/scene_manager.hpp b/client/scene_manager.hpp index d2d4310..3c46637 100644 --- a/client/scene_manager.hpp +++ b/client/scene_manager.hpp @@ -25,7 +25,7 @@ #include "scene_list.hpp" #include "base_scene.hpp" #include "singleton.hpp" -#include "packet_type.hpp" +#include "packet.hpp" #include "information_manager.hpp" #include "config_utility.hpp" diff --git a/libs/common/network_queue.cpp b/libs/common/network_queue.cpp index 2c3dbaf..e340aab 100644 --- a/libs/common/network_queue.cpp +++ b/libs/common/network_queue.cpp @@ -32,7 +32,7 @@ static SDL_sem* lock = SDL_CreateSemaphore(1); static SDL_Thread* queueThread = nullptr; -static std::deque queue; +static std::deque queue; static bool running = false; @@ -41,8 +41,8 @@ static int networkQueue(void*) { while(running) { SDL_SemWait(lock); while(netUtil->Receive()) { - Packet p; - memcpy(&p, netUtil->GetInData(), sizeof(Packet)); + Packet::Packet p; + memcpy(&p, netUtil->GetInData(), sizeof(Packet::Packet)); p.meta.address = netUtil->GetInPacket()->address; queue.push_back(p); } @@ -80,19 +80,19 @@ void killQueueThread() { queueThread = nullptr; } -Packet peekNetworkPacket() { +Packet::Packet peekNetworkPacket() { SDL_SemWait(lock); - Packet p; + Packet::Packet p; if (queue.size() > 0) { - Packet p = queue[0]; + Packet::Packet p = queue[0]; } SDL_SemPost(lock); return p; } -Packet popNetworkPacket() { +Packet::Packet popNetworkPacket() { SDL_SemWait(lock); - Packet p; + Packet::Packet p; if (queue.size() > 0) { p = queue[0]; queue.pop_front(); diff --git a/libs/common/network_queue.hpp b/libs/common/network_queue.hpp index a66f435..8c870ab 100644 --- a/libs/common/network_queue.hpp +++ b/libs/common/network_queue.hpp @@ -22,13 +22,13 @@ #ifndef NETWORKQUEUE_HPP_ #define NETWORKQUEUE_HPP_ -#include "packet_type.hpp" +#include "packet.hpp" void beginQueueThread(); void endQueueThread(); void killQueueThread(); -Packet peekNetworkPacket(); -Packet popNetworkPacket(); +Packet::Packet peekNetworkPacket(); +Packet::Packet popNetworkPacket(); void flushNetworkQueue(); #endif diff --git a/libs/common/packet_type.hpp b/libs/common/packet.hpp similarity index 83% rename from libs/common/packet_type.hpp rename to libs/common/packet.hpp index ae16c46..4424e51 100644 --- a/libs/common/packet_type.hpp +++ b/libs/common/packet.hpp @@ -30,7 +30,9 @@ #pragma pack(push, 0) -enum class PacketType { +namespace Packet { + +enum class Type { NONE = 0, PING = 1, @@ -43,13 +45,11 @@ enum class PacketType { SYNCHRONIZE = 8, - PLAYER_NEW = 9, - PLAYER_DELETE = 10, - PLAYER_MOVE = 11, + PLAYER = 9, }; struct Metadata { - PacketType type; + Type type; IPaddress address; }; @@ -90,27 +90,15 @@ struct Synchronize { Metadata meta; }; -struct PlayerNew { +struct Player { Metadata meta; - int playerIndex; - //TODO Playerdata + //player data }; -struct PlayerDelete { - Metadata meta; - int playerIndex; -}; - -struct PlayerMove { - Metadata meta; - int playerIndex; - Vector2 position; - Vector2 motion; -}; union Packet { Packet() { - meta.type = PacketType::NONE; + meta.type = Type::NONE; meta.address.host = 0; meta.address.port = 0; }; @@ -124,15 +112,17 @@ union Packet { JoinResponse joinResponse; Disconnect disconnect; - PlayerNew playerNew; - PlayerDelete playerDelete; - PlayerMove playerMove; + Synchronize sync; + + Player player; #ifdef DEBUG char buffer[1024]; #endif }; +} //namespace Packet + #pragma pack(pop) #endif diff --git a/server/server_application.cpp b/server/server_application.cpp index a52c232..089a661 100644 --- a/server/server_application.cpp +++ b/server/server_application.cpp @@ -70,7 +70,7 @@ void ServerApplication::Init() { } //initiate the remaining singletons - netUtil->Open(configUtil->Int("server.port"), sizeof(Packet)); + netUtil->Open(configUtil->Int("server.port"), sizeof(Packet::Packet)); //create the threads beginQueueThread(); @@ -122,33 +122,33 @@ void ServerApplication::UpdateWorld(double delta) { //Network loop //------------------------- -int ServerApplication::HandlePacket(Packet p) { +int ServerApplication::HandlePacket(Packet::Packet p) { switch(p.meta.type) { - case PacketType::NONE: + case Packet::Type::NONE: //DO NOTHING return 0; break; - case PacketType::PING: + case Packet::Type::PING: //quick pong - p.meta.type = PacketType::PONG; - netUtil->Send(&p.meta.address, &p, sizeof(Packet)); + p.meta.type = Packet::Type::PONG; + netUtil->Send(&p.meta.address, &p, sizeof(Packet::Packet)); break; - case PacketType::PONG: + case Packet::Type::PONG: // break; - case PacketType::BROADCAST_REQUEST: + case Packet::Type::BROADCAST_REQUEST: HandleBroadcast(p.broadcastRequest); break; // case PacketType::BROADCAST_RESPONSE: // // // break; - case PacketType::JOIN_REQUEST: + case Packet::Type::JOIN_REQUEST: HandleConnection(p.joinRequest); break; // case PacketType::JOIN_RESPONSE: // // // break; - case PacketType::DISCONNECT: + case Packet::Type::DISCONNECT: HandleDisconnection(p.disconnect); break; // case PacketType::SYNCHRONIZE: @@ -169,16 +169,16 @@ int ServerApplication::HandlePacket(Packet p) { return 1; } -void ServerApplication::HandleBroadcast(BroadcastRequest& bcast) { +void ServerApplication::HandleBroadcast(Packet::BroadcastRequest& bcast) { //respond to a broadcast request with the server's data - Packet p; - p.meta.type = PacketType::BROADCAST_RESPONSE; + Packet::Packet p; + p.meta.type = Packet::Type::BROADCAST_RESPONSE; snprintf(p.broadcastResponse.name, PACKET_STRING_SIZE, "%s", configUtil->CString("server.name")); //TODO version information - netUtil->Send(&bcast.meta.address, &p, sizeof(Packet)); + netUtil->Send(&bcast.meta.address, &p, sizeof(Packet::Packet)); } -void ServerApplication::HandleConnection(JoinRequest& request) { +void ServerApplication::HandleConnection(Packet::JoinRequest& request) { if (clients.size() >= SDLNET_MAX_UDPCHANNELS) { //ignore the new connection if there's too many clients connected return; @@ -193,20 +193,20 @@ void ServerApplication::HandleConnection(JoinRequest& request) { clients[client.index] = client; //send the player their information - Packet p; - p.meta.type = PacketType::JOIN_RESPONSE; + Packet::Packet p; + p.meta.type = Packet::Type::JOIN_RESPONSE; p.joinResponse.clientIndex = client.index; //TODO: resource list - netUtil->Send(client.channel, &p, sizeof(Packet)); + netUtil->Send(client.channel, &p, sizeof(Packet::Packet)); //pretty cout << "New connection: index " << client.index << endl; cout << "number of clients: " << clients.size() << endl; } -void ServerApplication::HandleDisconnection(Disconnect& disconnect) { +void ServerApplication::HandleDisconnection(Packet::Disconnect& disconnect) { //disconnect a client (redundant message) - netUtil->Send(clients[disconnect.clientIndex].channel, &disconnect, sizeof(Packet)); + netUtil->Send(clients[disconnect.clientIndex].channel, &disconnect, sizeof(Packet::Packet)); netUtil->Unbind(clients[disconnect.clientIndex].channel); clients.erase(disconnect.clientIndex); diff --git a/server/server_application.hpp b/server/server_application.hpp index 67a9b5c..d28b819 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -23,7 +23,7 @@ #define SERVERAPPLICATION_HPP_ #include "utilities.hpp" -#include "packet_type.hpp" +#include "packet.hpp" #include "singleton.hpp" #include "network_queue.hpp" @@ -57,10 +57,10 @@ private: void UpdateWorld(double delta); //network loop - int HandlePacket(Packet p); - void HandleBroadcast(BroadcastRequest&); - void HandleConnection(JoinRequest&); - void HandleDisconnection(Disconnect&); + int HandlePacket(Packet::Packet p); + void HandleBroadcast(Packet::BroadcastRequest&); + void HandleConnection(Packet::JoinRequest&); + void HandleDisconnection(Packet::Disconnect&); //services ConfigUtility* configUtil = Singleton::Get();