diff --git a/client/lobby_menu.cpp b/client/lobby_menu.cpp index 157f651..2355122 100644 --- a/client/lobby_menu.cpp +++ b/client/lobby_menu.cpp @@ -71,7 +71,13 @@ void LobbyMenu::FrameStart() { } void LobbyMenu::Update(double delta) { - // + //suck in all waiting packets + NetworkPacket packet; + while(network.Receive()) { + memcpy(&packet, network.GetInData(), sizeof(NetworkPacket)); + packet.meta.srcAddress = network.GetInPacket()->address; + HandlePacket(packet); + } } void LobbyMenu::FrameEnd() { @@ -82,6 +88,9 @@ void LobbyMenu::Render(SDL_Surface* const screen) { search.DrawTo(screen); join.DrawTo(screen); back.DrawTo(screen); + for (int i = 0; i < serverInfo.size(); i++) { + font.DrawStringTo(serverInfo[i].name, screen, 300, 50 + i*font.GetCharH()); + } } //------------------------- @@ -106,10 +115,15 @@ void LobbyMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) { NetworkPacket packet; packet.meta.type = NetworkPacket::Type::BROADCAST_REQUEST; network.Send(config["server.host"].c_str(), config.Int("server.port"), reinterpret_cast(&packet), sizeof(NetworkPacket)); + + //reset the server list + serverInfo.clear(); } + if (join.MouseButtonUp(button) == Button::State::HOVER) { //TODO: join the selected server } + if (back.MouseButtonUp(button) == Button::State::HOVER) { SetNextScene(SceneList::MAINMENU); } @@ -118,8 +132,8 @@ void LobbyMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) { void LobbyMenu::KeyDown(SDL_KeyboardEvent const& key) { switch(key.keysym.sym) { case SDLK_ESCAPE: - QuitEvent(); - break; + SetNextScene(SceneList::MAINMENU); + break; } } @@ -129,35 +143,18 @@ void LobbyMenu::KeyUp(SDL_KeyboardEvent const& key) { void LobbyMenu::HandlePacket(NetworkPacket packet) { switch(packet.meta.type) { -// case NetworkPacket::Type::PING: -// //NOT USED -// break; -// case NetworkPacket::Type::PONG: -// //NOT USED -// break; - case NetworkPacket::Type::BROADCAST_REQUEST: - // - break; - case NetworkPacket::Type::BROADCAST_RESPONSE: - // - break; - case NetworkPacket::Type::JOIN_REQUEST: - // + case NetworkPacket::Type::BROADCAST_RESPONSE: { + ServerInfo server; + server.name = packet.serverInfo.name; + server.address = packet.meta.srcAddress; + serverInfo.push_back(server); + } break; case NetworkPacket::Type::JOIN_RESPONSE: // break; - case NetworkPacket::Type::DISCONNECT: - // - break; - case NetworkPacket::Type::SYNCHRONIZE: - // - break; //handle errors - case NetworkPacket::Type::NONE: - throw(std::runtime_error("NetworkPacket::Type::NONE encountered")); - break; default: throw(std::runtime_error("Unknown NetworkPacket::Type encountered")); break; diff --git a/client/main_menu.cpp b/client/main_menu.cpp index 1ac3ff0..1fd8118 100644 --- a/client/main_menu.cpp +++ b/client/main_menu.cpp @@ -113,7 +113,7 @@ void MainMenu::KeyDown(SDL_KeyboardEvent const& key) { switch(key.keysym.sym) { case SDLK_ESCAPE: QuitEvent(); - break; + break; } } diff --git a/client/options_menu.cpp b/client/options_menu.cpp index f22bb09..ec59b39 100644 --- a/client/options_menu.cpp +++ b/client/options_menu.cpp @@ -92,8 +92,8 @@ void OptionsMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) { void OptionsMenu::KeyDown(SDL_KeyboardEvent const& key) { switch(key.keysym.sym) { case SDLK_ESCAPE: - QuitEvent(); - break; + SetNextScene(SceneList::MAINMENU); + break; } } diff --git a/server/server_application.cpp b/server/server_application.cpp index bdf8cb4..f35e50a 100644 --- a/server/server_application.cpp +++ b/server/server_application.cpp @@ -40,6 +40,9 @@ using namespace std; //Define the network thread //------------------------- +/* This thread sucks in the packets sent to the server, and pushes them onto the queue. + * This function is declared as a friend of ServerApplication, because I'm lazy +*/ int networkQueueThread(void* ptr) { ServerApplication* app = reinterpret_cast(ptr); NetworkPacket packet; @@ -152,24 +155,15 @@ void ServerApplication::Quit() { void ServerApplication::HandlePacket(NetworkPacket packet) { switch(packet.meta.type) { -// case NetworkPacket::Type::PING: -// //NOT USED -// break; -// case NetworkPacket::Type::PONG: -// //NOT USED -// break; case NetworkPacket::Type::BROADCAST_REQUEST: - cout << "Recieved a request" << endl; + //send back the server's name + packet.meta.type = NetworkPacket::Type::BROADCAST_RESPONSE; + snprintf(packet.serverInfo.name, PACKET_STRING_SIZE, "%s", config["server.name"].c_str()); + networkUtil.Send(&packet.meta.srcAddress, &packet, sizeof(NetworkPacket)); break; -// case NetworkPacket::Type::BROADCAST_RESPONSE: -// // -// break; case NetworkPacket::Type::JOIN_REQUEST: // break; -// case NetworkPacket::Type::JOIN_RESPONSE: -// // -// break; case NetworkPacket::Type::DISCONNECT: // break; @@ -178,11 +172,8 @@ void ServerApplication::HandlePacket(NetworkPacket packet) { break; //handle errors - case NetworkPacket::Type::NONE: - throw(runtime_error("NetworkPacket::Type::NONE encountered")); - break; default: throw(runtime_error("Unknown NetworkPacket::Type encountered")); break; } -} \ No newline at end of file +} diff --git a/server/server_application.hpp b/server/server_application.hpp index bfa34c1..e4c21ac 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -22,16 +22,20 @@ #ifndef SERVERAPPLICATION_HPP_ #define SERVERAPPLICATION_HPP_ -#include "config_utility.hpp" +//networking #include "network_packet.hpp" #include "thread_safe_queue.hpp" #include "udp_network_utility.hpp" -#include "world_room.hpp" +//APIs #include "sqlite3/sqlite3.h" #include "SDL/SDL.h" #include "SDL/SDL_thread.h" +//misc +#include "config_utility.hpp" +#include "world_room.hpp" + //The main application class class ServerApplication { public: @@ -47,10 +51,6 @@ public: private: void HandlePacket(NetworkPacket); - //members - bool running = true; - ConfigUtility config; - //networking UDPNetworkUtility networkUtil; ThreadSafeQueue networkQueue; @@ -58,6 +58,11 @@ private: //database sqlite3* database = nullptr; + + //misc + bool running = true; + ConfigUtility config; + WorldRoom worldRoom; }; #endif diff --git a/server/world_room.cpp b/server/world_room.cpp index 7fb94a5..91e02bc 100644 --- a/server/world_room.cpp +++ b/server/world_room.cpp @@ -26,6 +26,10 @@ using namespace std; +//------------------------- +//Define the WorldRoom's thread +//------------------------- + int worldRoomThread(void* ptr) { WorldRoom* room = reinterpret_cast(ptr); try { @@ -40,6 +44,10 @@ int worldRoomThread(void* ptr) { return 0; } +//------------------------- +//Define the WorldRoom's methods +//------------------------- + WorldRoom::WorldRoom() { // } @@ -62,37 +70,14 @@ void WorldRoom::Quit() { void WorldRoom::HandlePacket(NetworkPacket packet) { switch(packet.meta.type) { - case NetworkPacket::Type::PING: - //NOT USED - break; - case NetworkPacket::Type::PONG: - //NOT USED - break; -// case NetworkPacket::Type::BROADCAST_REQUEST: -// // -// break; -// case NetworkPacket::Type::BROADCAST_RESPONSE: -// // -// break; -// case NetworkPacket::Type::JOIN_REQUEST: -// // -// break; -// case NetworkPacket::Type::JOIN_RESPONSE: -// // -// break; -// case NetworkPacket::Type::DISCONNECT: -// // -// break; + // case NetworkPacket::Type::SYNCHRONIZE: // // // break; //handle errors - case NetworkPacket::Type::NONE: - throw(runtime_error("NetworkPacket::Type::NONE encountered")); - break; default: throw(runtime_error("Unknown NetworkPacket::Type encountered")); break; } -} \ No newline at end of file +}