The client is receiving the list of servers
This commit is contained in:
+22
-25
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user