Added Server and ServersManager to the online namespace and edited everything that uses those.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/uni@13279 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
8ec5adeec0
commit
ae6bc57b95
@ -24,49 +24,51 @@
|
||||
#include "utils/constants.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
|
||||
Server::SortOrder Server::m_sort_order=Server::SO_NAME; //FIXME change to some other default
|
||||
namespace online{
|
||||
Server::SortOrder Server::m_sort_order=Server::SO_NAME; //FIXME change to some other default
|
||||
|
||||
Server::Server(const XMLNode & xml)
|
||||
{
|
||||
assert(xml.getName() == "server");
|
||||
m_name = "";
|
||||
m_satisfaction_score = 0;
|
||||
m_server_id = 0;
|
||||
m_current_players = 0;
|
||||
m_max_players = 0;
|
||||
|
||||
xml.get("name", &m_lower_case_name);
|
||||
m_name = StringUtils::decodeFromHtmlEntities(m_lower_case_name);
|
||||
m_lower_case_name = StringUtils::toLowerCase(m_lower_case_name);
|
||||
|
||||
xml.get("id", &m_server_id);
|
||||
xml.get("max_players", &m_max_players);
|
||||
xml.get("current_players", &m_current_players);
|
||||
|
||||
}; // Server(const XML&)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* \brief Filter the add-on with a list of words.
|
||||
* \param words A list of words separated by ' '.
|
||||
* \return true if the add-on contains one of the words, otherwise false.
|
||||
*/
|
||||
bool Server::filterByWords(const core::stringw words) const
|
||||
{
|
||||
if (words == NULL || words.empty())
|
||||
return true;
|
||||
|
||||
std::vector<core::stringw> list = StringUtils::split(words, ' ', false);
|
||||
|
||||
for (unsigned int i = 0; i < list.size(); i++)
|
||||
Server::Server(const XMLNode & xml)
|
||||
{
|
||||
list[i].make_lower();
|
||||
|
||||
if ((core::stringw(m_name).make_lower()).find(list[i].c_str()) != -1)
|
||||
{
|
||||
assert(xml.getName() == "server");
|
||||
m_name = "";
|
||||
m_satisfaction_score = 0;
|
||||
m_server_id = 0;
|
||||
m_current_players = 0;
|
||||
m_max_players = 0;
|
||||
|
||||
xml.get("name", &m_lower_case_name);
|
||||
m_name = StringUtils::decodeFromHtmlEntities(m_lower_case_name);
|
||||
m_lower_case_name = StringUtils::toLowerCase(m_lower_case_name);
|
||||
|
||||
xml.get("id", &m_server_id);
|
||||
xml.get("max_players", &m_max_players);
|
||||
xml.get("current_players", &m_current_players);
|
||||
|
||||
}; // Server(const XML&)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* \brief Filter the add-on with a list of words.
|
||||
* \param words A list of words separated by ' '.
|
||||
* \return true if the add-on contains one of the words, otherwise false.
|
||||
*/
|
||||
bool Server::filterByWords(const core::stringw words) const
|
||||
{
|
||||
if (words == NULL || words.empty())
|
||||
return true;
|
||||
|
||||
std::vector<core::stringw> list = StringUtils::split(words, ' ', false);
|
||||
|
||||
for (unsigned int i = 0; i < list.size(); i++)
|
||||
{
|
||||
list[i].make_lower();
|
||||
|
||||
if ((core::stringw(m_name).make_lower()).find(list[i].c_str()) != -1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} // filterByWords
|
||||
|
||||
return false;
|
||||
} // filterByWords
|
||||
} // namespace online
|
||||
|
@ -31,104 +31,105 @@
|
||||
|
||||
class XMLNode;
|
||||
|
||||
/**
|
||||
* \ingroup online
|
||||
*/
|
||||
class Server
|
||||
{
|
||||
public:
|
||||
namespace online{
|
||||
/**
|
||||
* \ingroup online
|
||||
*/
|
||||
class Server
|
||||
{
|
||||
public:
|
||||
|
||||
/** Set the sort order used in the comparison function. */
|
||||
enum SortOrder { SO_SCORE = 1, // Sorted on satisfaction score
|
||||
SO_NAME = 2, // Sorted alphabetically by name
|
||||
SO_PLAYERS = 4
|
||||
};
|
||||
/** Set the sort order used in the comparison function. */
|
||||
enum SortOrder { SO_SCORE = 1, // Sorted on satisfaction score
|
||||
SO_NAME = 2, // Sorted alphabetically by name
|
||||
SO_PLAYERS = 4
|
||||
};
|
||||
|
||||
protected:
|
||||
/** The name to be displayed. */
|
||||
irr::core::stringw m_name;
|
||||
std::string m_lower_case_name; //Used for comparison
|
||||
protected:
|
||||
/** The name to be displayed. */
|
||||
irr::core::stringw m_name;
|
||||
std::string m_lower_case_name; //Used for comparison
|
||||
|
||||
uint32_t m_server_id;
|
||||
uint32_t m_server_id;
|
||||
|
||||
int m_max_players;
|
||||
int m_max_players;
|
||||
|
||||
int m_current_players;
|
||||
int m_current_players;
|
||||
|
||||
float m_satisfaction_score;
|
||||
float m_satisfaction_score;
|
||||
|
||||
/** The sort order to be used in the comparison. */
|
||||
static SortOrder m_sort_order;
|
||||
/** The sort order to be used in the comparison. */
|
||||
static SortOrder m_sort_order;
|
||||
|
||||
Server() {};
|
||||
Server() {};
|
||||
|
||||
public:
|
||||
|
||||
/** Initialises the object from an XML node. */
|
||||
Server(const XMLNode & xml);
|
||||
// ------------------------------------------------------------------------
|
||||
/** Sets the sort order used in the comparison function. It is static, so
|
||||
* that each instance can access the sort order. */
|
||||
static void setSortOrder(SortOrder so) { m_sort_order = so; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the name of the server. */
|
||||
const irr::core::stringw& getName() const { return m_name; }
|
||||
const std::string & getLowerCaseName() const { return m_lower_case_name; }
|
||||
// ------------------------------------------------------------------------
|
||||
const float getScore() const { return m_satisfaction_score; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the ID of this server. */
|
||||
const uint32_t getServerId() const { return m_server_id; }
|
||||
const int getMaxPlayers() const { return m_max_players; }
|
||||
const int getCurrentPlayers() const { return m_current_players; }
|
||||
// ------------------------------------------------------------------------
|
||||
bool filterByWords(const irr::core::stringw words) const;
|
||||
// ------------------------------------------------------------------------
|
||||
public:
|
||||
|
||||
/** Compares two servers according to the sort order currently defined.
|
||||
* \param a The addon to compare this addon to.
|
||||
*/
|
||||
bool operator<(const Server &server) const
|
||||
{
|
||||
switch(m_sort_order)
|
||||
/** Initialises the object from an XML node. */
|
||||
Server(const XMLNode & xml);
|
||||
// ------------------------------------------------------------------------
|
||||
/** Sets the sort order used in the comparison function. It is static, so
|
||||
* that each instance can access the sort order. */
|
||||
static void setSortOrder(SortOrder so) { m_sort_order = so; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the name of the server. */
|
||||
const irr::core::stringw& getName() const { return m_name; }
|
||||
const std::string & getLowerCaseName() const { return m_lower_case_name; }
|
||||
// ------------------------------------------------------------------------
|
||||
const float getScore() const { return m_satisfaction_score; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the ID of this server. */
|
||||
const uint32_t getServerId() const { return m_server_id; }
|
||||
const int getMaxPlayers() const { return m_max_players; }
|
||||
const int getCurrentPlayers() const { return m_current_players; }
|
||||
// ------------------------------------------------------------------------
|
||||
bool filterByWords(const irr::core::stringw words) const;
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/** Compares two servers according to the sort order currently defined.
|
||||
* \param a The addon to compare this addon to.
|
||||
*/
|
||||
bool operator<(const Server &server) const
|
||||
{
|
||||
case SO_SCORE:
|
||||
return m_satisfaction_score < server.getScore();
|
||||
break;
|
||||
case SO_NAME:
|
||||
// m_id is the lower case name
|
||||
return m_name < server.getName();
|
||||
break;
|
||||
case SO_PLAYERS:
|
||||
return m_current_players < server.getCurrentPlayers();
|
||||
break;
|
||||
} // switch
|
||||
return true;
|
||||
} // operator<
|
||||
switch(m_sort_order)
|
||||
{
|
||||
case SO_SCORE:
|
||||
return m_satisfaction_score < server.getScore();
|
||||
break;
|
||||
case SO_NAME:
|
||||
// m_id is the lower case name
|
||||
return m_name < server.getName();
|
||||
break;
|
||||
case SO_PLAYERS:
|
||||
return m_current_players < server.getCurrentPlayers();
|
||||
break;
|
||||
} // switch
|
||||
return true;
|
||||
} // operator<
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
/** Compares two addons according to the sort order currently defined.
|
||||
* Comparison is done for sorting in descending order.
|
||||
* \param a The addon to compare this addon to.
|
||||
*/
|
||||
bool operator>(const Server &server) const
|
||||
{
|
||||
switch(m_sort_order)
|
||||
// ------------------------------------------------------------------------
|
||||
/** Compares two addons according to the sort order currently defined.
|
||||
* Comparison is done for sorting in descending order.
|
||||
* \param a The addon to compare this addon to.
|
||||
*/
|
||||
bool operator>(const Server &server) const
|
||||
{
|
||||
case SO_SCORE:
|
||||
return m_satisfaction_score > server.getScore();
|
||||
break;
|
||||
case SO_NAME:
|
||||
return m_lower_case_name > server.getLowerCaseName();
|
||||
break;
|
||||
case SO_PLAYERS:
|
||||
return m_current_players > server.getCurrentPlayers();
|
||||
break;
|
||||
} // switch
|
||||
return true;
|
||||
} // operator>
|
||||
|
||||
}; // Server
|
||||
switch(m_sort_order)
|
||||
{
|
||||
case SO_SCORE:
|
||||
return m_satisfaction_score > server.getScore();
|
||||
break;
|
||||
case SO_NAME:
|
||||
return m_lower_case_name > server.getLowerCaseName();
|
||||
break;
|
||||
case SO_PLAYERS:
|
||||
return m_current_players > server.getCurrentPlayers();
|
||||
break;
|
||||
} // switch
|
||||
return true;
|
||||
} // operator>
|
||||
|
||||
}; // Server
|
||||
} // namespace online
|
||||
|
||||
#endif
|
||||
|
@ -26,54 +26,57 @@
|
||||
#include "config/user_config.hpp"
|
||||
#include "utils/translation.hpp"
|
||||
|
||||
static ServersManager* user_singleton = NULL;
|
||||
namespace online{
|
||||
|
||||
ServersManager* ServersManager::get()
|
||||
{
|
||||
if (user_singleton == NULL)
|
||||
user_singleton = new ServersManager();
|
||||
return user_singleton;
|
||||
} // get
|
||||
static ServersManager* user_singleton = NULL;
|
||||
|
||||
void ServersManager::deallocate()
|
||||
{
|
||||
delete user_singleton;
|
||||
user_singleton = NULL;
|
||||
} // deallocate
|
||||
|
||||
// ============================================================================
|
||||
ServersManager::ServersManager(){
|
||||
m_servers = new PtrVector<Server>;
|
||||
refresh();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
void ServersManager::refresh()
|
||||
{
|
||||
HTTPConnector * connector = new HTTPConnector((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
connector->setParameter("action",std::string("get_server_list"));
|
||||
|
||||
const XMLNode * result = connector->getXMLFromPage();
|
||||
std::string rec_success = "";
|
||||
if(result->get("success", &rec_success))
|
||||
ServersManager* ServersManager::get()
|
||||
{
|
||||
if (rec_success =="yes")
|
||||
if (user_singleton == NULL)
|
||||
user_singleton = new ServersManager();
|
||||
return user_singleton;
|
||||
} // get
|
||||
|
||||
void ServersManager::deallocate()
|
||||
{
|
||||
delete user_singleton;
|
||||
user_singleton = NULL;
|
||||
} // deallocate
|
||||
|
||||
// ============================================================================
|
||||
ServersManager::ServersManager(){
|
||||
m_servers = new PtrVector<Server>;
|
||||
refresh();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
void ServersManager::refresh()
|
||||
{
|
||||
HTTPConnector * connector = new HTTPConnector((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
connector->setParameter("action",std::string("get_server_list"));
|
||||
|
||||
const XMLNode * result = connector->getXMLFromPage();
|
||||
std::string rec_success = "";
|
||||
if(result->get("success", &rec_success))
|
||||
{
|
||||
const XMLNode * servers_xml = result->getNode("servers");
|
||||
m_servers->clearAndDeleteAll();
|
||||
for (unsigned int i = 0; i < servers_xml->getNumNodes(); i++)
|
||||
if (rec_success =="yes")
|
||||
{
|
||||
m_servers->push_back(new Server(*servers_xml->getNode(i)));
|
||||
const XMLNode * servers_xml = result->getNode("servers");
|
||||
m_servers->clearAndDeleteAll();
|
||||
for (unsigned int i = 0; i < servers_xml->getNumNodes(); i++)
|
||||
{
|
||||
m_servers->push_back(new Server(*servers_xml->getNode(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
//FIXME error message
|
||||
}
|
||||
//FIXME error message
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
Server * ServersManager::getQuickPlay()
|
||||
{
|
||||
if(m_servers->size() > 0)
|
||||
return m_servers->get(0);
|
||||
return NULL;
|
||||
}
|
||||
// ============================================================================
|
||||
Server * ServersManager::getQuickPlay()
|
||||
{
|
||||
if(m_servers->size() > 0)
|
||||
return m_servers->get(0);
|
||||
return NULL;
|
||||
}
|
||||
} // namespace online
|
||||
|
@ -23,35 +23,39 @@
|
||||
#include "online/server.hpp"
|
||||
|
||||
|
||||
// ============================================================================
|
||||
namespace online {
|
||||
|
||||
/**
|
||||
* \brief
|
||||
* \ingroup online
|
||||
*/
|
||||
class ServersManager
|
||||
{
|
||||
private:
|
||||
ServersManager();
|
||||
PtrVector<Server> * m_servers;
|
||||
bool m_not_fetched;
|
||||
Server * m_joined_server;
|
||||
/**
|
||||
* \brief
|
||||
* \ingroup online
|
||||
*/
|
||||
class ServersManager
|
||||
{
|
||||
private:
|
||||
ServersManager();
|
||||
PtrVector<Server> * m_servers;
|
||||
bool m_not_fetched;
|
||||
Server * m_joined_server;
|
||||
|
||||
public:
|
||||
// singleton
|
||||
static ServersManager* get();
|
||||
static void deallocate();
|
||||
public:
|
||||
// singleton
|
||||
static ServersManager* get();
|
||||
static void deallocate();
|
||||
|
||||
void refresh();
|
||||
PtrVector<Server> * getServers () const { return m_servers; };
|
||||
int getNumServers () const { return m_servers->size(); };
|
||||
Server * getServer (int index) const { return m_servers->get(index);};
|
||||
void sort(bool sort_desc) { m_servers->insertionSort(0, sort_desc); };
|
||||
void setJoinedServer(Server * server){ m_joined_server = server;};
|
||||
Server * getJoinedServer(){ return m_joined_server;};
|
||||
//Returns the best server to join
|
||||
Server * getQuickPlay();
|
||||
}; // class ServersManager
|
||||
|
||||
|
||||
} // namespace online
|
||||
|
||||
void refresh();
|
||||
PtrVector<Server> * getServers () const { return m_servers; };
|
||||
int getNumServers () const { return m_servers->size(); };
|
||||
Server * getServer (int index) const { return m_servers->get(index);};
|
||||
void sort(bool sort_desc) { m_servers->insertionSort(0, sort_desc); };
|
||||
void setJoinedServer(Server * server){ m_joined_server = server;};
|
||||
Server * getJoinedServer(){ return m_joined_server;};
|
||||
//Returns the best server to join
|
||||
Server * getQuickPlay();
|
||||
}; // class ServersManager
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
using namespace GUIEngine;
|
||||
using namespace irr;
|
||||
using namespace irr::gui;
|
||||
using namespace online;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include "guiengine/widgets/ribbon_widget.hpp"
|
||||
#include "guiengine/widgets/label_widget.hpp"
|
||||
#include "online/server.hpp"
|
||||
|
||||
|
||||
/**
|
||||
* \brief Dialog that allows a user to sign in
|
||||
* \ingroup states_screens
|
||||
@ -38,7 +40,7 @@ private:
|
||||
bool m_self_destroy;
|
||||
bool m_enter_lobby;
|
||||
|
||||
Server * m_server;
|
||||
online::Server * m_server;
|
||||
|
||||
GUIEngine::LabelWidget * m_name_widget;
|
||||
GUIEngine::LabelWidget * m_info_widget;
|
||||
@ -50,7 +52,7 @@ private:
|
||||
void requestJoin();
|
||||
|
||||
public:
|
||||
ServerInfoDialog(Server * server);
|
||||
ServerInfoDialog(online::Server * server);
|
||||
~ServerInfoDialog();
|
||||
|
||||
void onEnterPressedInternal();
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include "utils/translation.hpp"
|
||||
#include "online/servers_manager.hpp"
|
||||
|
||||
|
||||
using namespace online;
|
||||
using namespace GUIEngine;
|
||||
|
||||
DEFINE_SCREEN_SINGLETON( NetworkingLobby );
|
||||
|
@ -36,7 +36,7 @@ class NetworkingLobby : public GUIEngine::Screen,
|
||||
private:
|
||||
friend class GUIEngine::ScreenSingleton<NetworkingLobby>;
|
||||
|
||||
Server * m_server;
|
||||
online::Server * m_server;
|
||||
|
||||
NetworkingLobby();
|
||||
|
||||
|
@ -44,6 +44,7 @@
|
||||
|
||||
|
||||
using namespace GUIEngine;
|
||||
using namespace online;
|
||||
|
||||
DEFINE_SCREEN_SINGLETON( OnlineScreen );
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
#include "utils/string_utils.hpp"
|
||||
#include "online/servers_manager.hpp"
|
||||
|
||||
using namespace online;
|
||||
|
||||
DEFINE_SCREEN_SINGLETON( ServerSelection );
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user