The client is receiving the list of servers

This commit is contained in:
Kayne Ruse
2013-11-22 23:19:29 +11:00
parent cb9aef95ec
commit e3605e4dc5
6 changed files with 55 additions and 77 deletions
+22 -25
View File
@@ -71,7 +71,13 @@ void LobbyMenu::FrameStart() {
} }
void LobbyMenu::Update(double delta) { 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() { void LobbyMenu::FrameEnd() {
@@ -82,6 +88,9 @@ void LobbyMenu::Render(SDL_Surface* const screen) {
search.DrawTo(screen); search.DrawTo(screen);
join.DrawTo(screen); join.DrawTo(screen);
back.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; NetworkPacket packet;
packet.meta.type = NetworkPacket::Type::BROADCAST_REQUEST; packet.meta.type = NetworkPacket::Type::BROADCAST_REQUEST;
network.Send(config["server.host"].c_str(), config.Int("server.port"), reinterpret_cast<void*>(&packet), sizeof(NetworkPacket)); network.Send(config["server.host"].c_str(), config.Int("server.port"), reinterpret_cast<void*>(&packet), sizeof(NetworkPacket));
//reset the server list
serverInfo.clear();
} }
if (join.MouseButtonUp(button) == Button::State::HOVER) { if (join.MouseButtonUp(button) == Button::State::HOVER) {
//TODO: join the selected server //TODO: join the selected server
} }
if (back.MouseButtonUp(button) == Button::State::HOVER) { if (back.MouseButtonUp(button) == Button::State::HOVER) {
SetNextScene(SceneList::MAINMENU); SetNextScene(SceneList::MAINMENU);
} }
@@ -118,7 +132,7 @@ void LobbyMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) {
void LobbyMenu::KeyDown(SDL_KeyboardEvent const& key) { void LobbyMenu::KeyDown(SDL_KeyboardEvent const& key) {
switch(key.keysym.sym) { switch(key.keysym.sym) {
case SDLK_ESCAPE: case SDLK_ESCAPE:
QuitEvent(); SetNextScene(SceneList::MAINMENU);
break; break;
} }
} }
@@ -129,35 +143,18 @@ void LobbyMenu::KeyUp(SDL_KeyboardEvent const& key) {
void LobbyMenu::HandlePacket(NetworkPacket packet) { void LobbyMenu::HandlePacket(NetworkPacket packet) {
switch(packet.meta.type) { switch(packet.meta.type) {
// case NetworkPacket::Type::PING: case NetworkPacket::Type::BROADCAST_RESPONSE: {
// //NOT USED ServerInfo server;
// break; server.name = packet.serverInfo.name;
// case NetworkPacket::Type::PONG: server.address = packet.meta.srcAddress;
// //NOT USED serverInfo.push_back(server);
// break; }
case NetworkPacket::Type::BROADCAST_REQUEST:
//
break;
case NetworkPacket::Type::BROADCAST_RESPONSE:
//
break;
case NetworkPacket::Type::JOIN_REQUEST:
//
break; break;
case NetworkPacket::Type::JOIN_RESPONSE: case NetworkPacket::Type::JOIN_RESPONSE:
// //
break; break;
case NetworkPacket::Type::DISCONNECT:
//
break;
case NetworkPacket::Type::SYNCHRONIZE:
//
break;
//handle errors //handle errors
case NetworkPacket::Type::NONE:
throw(std::runtime_error("NetworkPacket::Type::NONE encountered"));
break;
default: default:
throw(std::runtime_error("Unknown NetworkPacket::Type encountered")); throw(std::runtime_error("Unknown NetworkPacket::Type encountered"));
break; break;
+1 -1
View File
@@ -92,7 +92,7 @@ void OptionsMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) {
void OptionsMenu::KeyDown(SDL_KeyboardEvent const& key) { void OptionsMenu::KeyDown(SDL_KeyboardEvent const& key) {
switch(key.keysym.sym) { switch(key.keysym.sym) {
case SDLK_ESCAPE: case SDLK_ESCAPE:
QuitEvent(); SetNextScene(SceneList::MAINMENU);
break; break;
} }
} }
+7 -16
View File
@@ -40,6 +40,9 @@ using namespace std;
//Define the network thread //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) { int networkQueueThread(void* ptr) {
ServerApplication* app = reinterpret_cast<ServerApplication*>(ptr); ServerApplication* app = reinterpret_cast<ServerApplication*>(ptr);
NetworkPacket packet; NetworkPacket packet;
@@ -152,24 +155,15 @@ void ServerApplication::Quit() {
void ServerApplication::HandlePacket(NetworkPacket packet) { void ServerApplication::HandlePacket(NetworkPacket packet) {
switch(packet.meta.type) { switch(packet.meta.type) {
// case NetworkPacket::Type::PING:
// //NOT USED
// break;
// case NetworkPacket::Type::PONG:
// //NOT USED
// break;
case NetworkPacket::Type::BROADCAST_REQUEST: 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; break;
// case NetworkPacket::Type::BROADCAST_RESPONSE:
// //
// break;
case NetworkPacket::Type::JOIN_REQUEST: case NetworkPacket::Type::JOIN_REQUEST:
// //
break; break;
// case NetworkPacket::Type::JOIN_RESPONSE:
// //
// break;
case NetworkPacket::Type::DISCONNECT: case NetworkPacket::Type::DISCONNECT:
// //
break; break;
@@ -178,9 +172,6 @@ void ServerApplication::HandlePacket(NetworkPacket packet) {
break; break;
//handle errors //handle errors
case NetworkPacket::Type::NONE:
throw(runtime_error("NetworkPacket::Type::NONE encountered"));
break;
default: default:
throw(runtime_error("Unknown NetworkPacket::Type encountered")); throw(runtime_error("Unknown NetworkPacket::Type encountered"));
break; break;
+11 -6
View File
@@ -22,16 +22,20 @@
#ifndef SERVERAPPLICATION_HPP_ #ifndef SERVERAPPLICATION_HPP_
#define SERVERAPPLICATION_HPP_ #define SERVERAPPLICATION_HPP_
#include "config_utility.hpp" //networking
#include "network_packet.hpp" #include "network_packet.hpp"
#include "thread_safe_queue.hpp" #include "thread_safe_queue.hpp"
#include "udp_network_utility.hpp" #include "udp_network_utility.hpp"
#include "world_room.hpp"
//APIs
#include "sqlite3/sqlite3.h" #include "sqlite3/sqlite3.h"
#include "SDL/SDL.h" #include "SDL/SDL.h"
#include "SDL/SDL_thread.h" #include "SDL/SDL_thread.h"
//misc
#include "config_utility.hpp"
#include "world_room.hpp"
//The main application class //The main application class
class ServerApplication { class ServerApplication {
public: public:
@@ -47,10 +51,6 @@ public:
private: private:
void HandlePacket(NetworkPacket); void HandlePacket(NetworkPacket);
//members
bool running = true;
ConfigUtility config;
//networking //networking
UDPNetworkUtility networkUtil; UDPNetworkUtility networkUtil;
ThreadSafeQueue<NetworkPacket> networkQueue; ThreadSafeQueue<NetworkPacket> networkQueue;
@@ -58,6 +58,11 @@ private:
//database //database
sqlite3* database = nullptr; sqlite3* database = nullptr;
//misc
bool running = true;
ConfigUtility config;
WorldRoom worldRoom;
}; };
#endif #endif
+9 -24
View File
@@ -26,6 +26,10 @@
using namespace std; using namespace std;
//-------------------------
//Define the WorldRoom's thread
//-------------------------
int worldRoomThread(void* ptr) { int worldRoomThread(void* ptr) {
WorldRoom* room = reinterpret_cast<WorldRoom*>(ptr); WorldRoom* room = reinterpret_cast<WorldRoom*>(ptr);
try { try {
@@ -40,6 +44,10 @@ int worldRoomThread(void* ptr) {
return 0; return 0;
} }
//-------------------------
//Define the WorldRoom's methods
//-------------------------
WorldRoom::WorldRoom() { WorldRoom::WorldRoom() {
// //
} }
@@ -62,35 +70,12 @@ void WorldRoom::Quit() {
void WorldRoom::HandlePacket(NetworkPacket packet) { void WorldRoom::HandlePacket(NetworkPacket packet) {
switch(packet.meta.type) { 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: // case NetworkPacket::Type::SYNCHRONIZE:
// // // //
// break; // break;
//handle errors //handle errors
case NetworkPacket::Type::NONE:
throw(runtime_error("NetworkPacket::Type::NONE encountered"));
break;
default: default:
throw(runtime_error("Unknown NetworkPacket::Type encountered")); throw(runtime_error("Unknown NetworkPacket::Type encountered"));
break; break;