diff --git a/client/lobby.cpp b/client/lobby.cpp index 4e33bea..87bbf09 100644 --- a/client/lobby.cpp +++ b/client/lobby.cpp @@ -137,15 +137,15 @@ void Lobby::KeyUp(SDL_KeyboardEvent const& key) { //------------------------- int Lobby::HandlePacket(Packet p) { - switch(p.type) { + switch(p.meta.type) { case PacketType::NONE: //DO NOTHING return 0; break; case PacketType::PING: //quick pong - p.type = PacketType::PONG; - netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); + p.meta.type = PacketType::PONG; + netUtil->Send(&p.meta.address, &p, sizeof(Packet)); break; case PacketType::PONG: // @@ -185,7 +185,7 @@ int Lobby::HandlePacket(Packet p) { void Lobby::BroadcastNetwork() { Packet p; - p.type = PacketType::BROADCAST_REQUEST; + p.meta.type = PacketType::BROADCAST_REQUEST; netUtil->Send("255.255.255.255", configUtil->Int("server.port"), &p, sizeof(Packet)); serverList.clear(); } @@ -193,7 +193,7 @@ void Lobby::BroadcastNetwork() { void Lobby::PushServer(BroadcastResponse& bcast) { ServerEntry entry; entry.name = bcast.name; - entry.address = netUtil->GetInPacket()->address; + entry.address = bcast.meta.address; serverList.push_back(entry); } @@ -203,7 +203,7 @@ void Lobby::ConnectToServer(ServerEntry* server) { throw(runtime_error("No server received")); } Packet p; - p.type = PacketType::JOIN_REQUEST; + p.meta.type = PacketType::JOIN_REQUEST; snprintf(p.joinRequest.playerHandle, PACKET_STRING_SIZE, "%s", configUtil->CString("handle")); snprintf(p.joinRequest.playerAvatar, PACKET_STRING_SIZE, "%s", configUtil->CString("avatar")); netUtil->Send(&server->address, reinterpret_cast(&p), sizeof(Packet)); diff --git a/libs/common/network_queue.cpp b/libs/common/network_queue.cpp index 4253dec..80758f8 100644 --- a/libs/common/network_queue.cpp +++ b/libs/common/network_queue.cpp @@ -22,6 +22,7 @@ static int networkQueue(void*) { while(netUtil->Receive()) { Packet p; memcpy(&p, netUtil->GetInData(), sizeof(Packet)); + p.meta.address = netUtil->GetInPacket()->address; queue.push_back(p); } SDL_SemPost(lock); diff --git a/libs/common/packet_type.hpp b/libs/common/packet_type.hpp index f58a41c..d8af71a 100644 --- a/libs/common/packet_type.hpp +++ b/libs/common/packet_type.hpp @@ -3,6 +3,8 @@ #include "vector2.hpp" +#include "SDL_net/SDL_net.h" + #define PACKET_STRING_SIZE 100 #pragma pack(push, 0) @@ -25,66 +27,75 @@ enum class PacketType { PLAYER_MOVE = 11, }; -struct Ping { +struct Metadata { PacketType type; + IPaddress address; +}; + +struct Ping { + Metadata meta; }; struct Pong { - PacketType type; + Metadata meta; }; struct BroadcastRequest { - PacketType type; + Metadata meta; }; struct BroadcastResponse { - PacketType type; + Metadata meta; char name[PACKET_STRING_SIZE]; //TODO: version }; struct JoinRequest { - PacketType type; + Metadata meta; char playerHandle[PACKET_STRING_SIZE]; char playerAvatar[PACKET_STRING_SIZE]; //TODO: player data }; struct JoinResponse { - PacketType type; + Metadata meta; int playerIndex; //resource list }; struct Disconnect { - PacketType type; + Metadata meta; }; struct Synchronize { - PacketType type; + Metadata meta; }; struct PlayerNew { - PacketType type; + Metadata meta; int playerIndex; //TODO Playerdata }; struct PlayerDelete { - PacketType type; + Metadata meta; int playerIndex; }; struct PlayerMove { - PacketType type; + Metadata meta; int playerIndex; Vector2 position; Vector2 motion; }; union Packet { - Packet() { type = PacketType::NONE; }; - PacketType type; + Packet() { + meta.type = PacketType::NONE; + meta.address.host = 0; + meta.address.port = 0; + }; + Metadata meta; Ping ping; Pong pong; diff --git a/server/server_application.cpp b/server/server_application.cpp index e158869..c7003c9 100644 --- a/server/server_application.cpp +++ b/server/server_application.cpp @@ -112,15 +112,15 @@ void ServerApplication::UpdateWorld(double delta) { //------------------------- int ServerApplication::HandlePacket(Packet p) { - switch(p.type) { + switch(p.meta.type) { case PacketType::NONE: //DO NOTHING return 0; break; case PacketType::PING: //quick pong - p.type = PacketType::PONG; - netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); + p.meta.type = PacketType::PONG; + netUtil->Send(&p.meta.address, &p, sizeof(Packet)); break; case PacketType::PONG: // @@ -161,10 +161,10 @@ int ServerApplication::HandlePacket(Packet p) { void ServerApplication::Broadcast(BroadcastRequest& bcast) { //respond to a broadcast request with the server's data Packet p; - p.type = PacketType::BROADCAST_RESPONSE; + p.meta.type = PacketType::BROADCAST_RESPONSE; snprintf(p.broadcastResponse.name, PACKET_STRING_SIZE, "%s", configUtil->CString("server.name")); //TODO version information - netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); + netUtil->Send(&bcast.meta.address, &p, sizeof(Packet)); } void ServerApplication::HandleConnection(JoinRequest& request) { diff --git a/test/main.cpp b/test/main.cpp index 4a86fd0..24d0efa 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -4,8 +4,8 @@ using namespace std; -int main() { +int main(int, char**) { Packet p; - cout << int(p.type) << endl; + cout << int(p.meta.type) << endl; return 0; } \ No newline at end of file