diff --git a/client/lobby.cpp b/client/lobby.cpp index c90fef5..3dd0ab9 100644 --- a/client/lobby.cpp +++ b/client/lobby.cpp @@ -44,7 +44,7 @@ void Lobby::FrameStart() { } void Lobby::Update(double delta) { - // + Receive(); } void Lobby::FrameEnd() { @@ -126,6 +126,62 @@ void Lobby::KeyUp(SDL_KeyboardEvent const& key) { //Utilities //------------------------- +void Lobby::Receive() { + Packet p; + while(netUtil->Receive()) { + memcpy(&p, netUtil->GetInData(), sizeof(Packet)); + switch(p.type) { + case PacketType::PING: + //quick pong + p.type = PacketType::PONG; + netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); + break; + case PacketType::PONG: + // + break; +// case PacketType::BROADCAST_REQUEST: +// // +// break; + case PacketType::BROADCAST_RESPONSE: + PushServer(p.broadcastResponse); + break; +// case PacketType::JOIN_REQUEST: +// // +// break; +// case PacketType::JOIN_RESPONSE: +// // +// break; +// case PacketType::DISCONNECT: +// // +// break; +// case PacketType::SYNCHRONIZE: +// // +// break; +// case PacketType::PLAYER_NEW: +// // +// break; +// case PacketType::PLAYER_DELETE: +// // +// break; +// case PacketType::PLAYER_MOVE: +// // +// break; + default: + throw(runtime_error("Failed to recognize the packet type")); + } + } +} + void Lobby::BroadcastNetwork() { - // + Packet p; + p.type = PacketType::BROADCAST_REQUEST; + netUtil->Send("255.255.255.255", configUtil->Int("server.port"), &p, sizeof(Packet)); + serverList.clear(); +} + +void Lobby::PushServer(BroadcastResponse& bcast) { + ServerEntry entry; + entry.name = bcast.name; + entry.address = netUtil->GetInPacket()->address; + serverList.push_back(entry); } \ No newline at end of file diff --git a/client/lobby.hpp b/client/lobby.hpp index a889592..115ba1b 100644 --- a/client/lobby.hpp +++ b/client/lobby.hpp @@ -3,6 +3,7 @@ #include "base_scene.hpp" #include "service_locator.hpp" +#include "packet_type.hpp" #include "config_utility.hpp" #include "surface_manager.hpp" @@ -39,7 +40,9 @@ protected: void KeyUp(SDL_KeyboardEvent const&); //utilities + void Receive(); void BroadcastNetwork(); + void PushServer(BroadcastResponse&); //services ConfigUtility* configUtil = ServiceLocator::Get(); diff --git a/server/server_application.cpp b/server/server_application.cpp index 0dadac0..0abb981 100644 --- a/server/server_application.cpp +++ b/server/server_application.cpp @@ -33,7 +33,7 @@ void ServerApplication::Init() { netUtil.Open(configUtil.Int("server.port"), sizeof(Packet)); //disabled for debugging -// running = true; + running = true; } void ServerApplication::Proc() { @@ -60,12 +60,10 @@ void ServerApplication::HandleNetwork() { while(netUtil.Receive()) { memcpy(&p, netUtil.GetInData(), sizeof(Packet)); switch(p.type) { - case PacketType::PING: { + case PacketType::PING: //quick pong - Packet p; p.type = PacketType::PONG; netUtil.Send(&netUtil.GetInPacket()->address, &p, sizeof(Packet)); - } break; case PacketType::PONG: //