diff --git a/src/online/server.cpp b/src/online/server.cpp index ad3b72984..8022e45af 100644 --- a/src/online/server.cpp +++ b/src/online/server.cpp @@ -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 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 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 diff --git a/src/online/server.hpp b/src/online/server.hpp index 80cdbe8f5..407cff648 100644 --- a/src/online/server.hpp +++ b/src/online/server.hpp @@ -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 diff --git a/src/online/servers_manager.cpp b/src/online/servers_manager.cpp index fb0ced8a4..fce355daf 100644 --- a/src/online/servers_manager.cpp +++ b/src/online/servers_manager.cpp @@ -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; - 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; + 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 diff --git a/src/online/servers_manager.hpp b/src/online/servers_manager.hpp index 912e0bda0..1b52dc4a2 100644 --- a/src/online/servers_manager.hpp +++ b/src/online/servers_manager.hpp @@ -23,35 +23,39 @@ #include "online/server.hpp" -// ============================================================================ +namespace online { -/** - * \brief - * \ingroup online - */ -class ServersManager -{ - private: - ServersManager(); - PtrVector * m_servers; - bool m_not_fetched; - Server * m_joined_server; + /** + * \brief + * \ingroup online + */ + class ServersManager + { + private: + ServersManager(); + PtrVector * 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 * 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 * 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 diff --git a/src/states_screens/dialogs/server_info_dialog.cpp b/src/states_screens/dialogs/server_info_dialog.cpp index 495438b4a..ee235b1a7 100644 --- a/src/states_screens/dialogs/server_info_dialog.cpp +++ b/src/states_screens/dialogs/server_info_dialog.cpp @@ -34,6 +34,7 @@ using namespace GUIEngine; using namespace irr; using namespace irr::gui; +using namespace online; // ----------------------------------------------------------------------------- diff --git a/src/states_screens/dialogs/server_info_dialog.hpp b/src/states_screens/dialogs/server_info_dialog.hpp index 5ee68348c..e1cbfc50e 100644 --- a/src/states_screens/dialogs/server_info_dialog.hpp +++ b/src/states_screens/dialogs/server_info_dialog.hpp @@ -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(); diff --git a/src/states_screens/networking_lobby.cpp b/src/states_screens/networking_lobby.cpp index 795d7bd7a..a610b35e6 100644 --- a/src/states_screens/networking_lobby.cpp +++ b/src/states_screens/networking_lobby.cpp @@ -37,7 +37,7 @@ #include "utils/translation.hpp" #include "online/servers_manager.hpp" - +using namespace online; using namespace GUIEngine; DEFINE_SCREEN_SINGLETON( NetworkingLobby ); diff --git a/src/states_screens/networking_lobby.hpp b/src/states_screens/networking_lobby.hpp index 12af31989..5e5d65dee 100644 --- a/src/states_screens/networking_lobby.hpp +++ b/src/states_screens/networking_lobby.hpp @@ -36,7 +36,7 @@ class NetworkingLobby : public GUIEngine::Screen, private: friend class GUIEngine::ScreenSingleton; - Server * m_server; + online::Server * m_server; NetworkingLobby(); diff --git a/src/states_screens/online_screen.cpp b/src/states_screens/online_screen.cpp index b7ebf37af..335b88f06 100644 --- a/src/states_screens/online_screen.cpp +++ b/src/states_screens/online_screen.cpp @@ -44,6 +44,7 @@ using namespace GUIEngine; +using namespace online; DEFINE_SCREEN_SINGLETON( OnlineScreen ); diff --git a/src/states_screens/server_selection.cpp b/src/states_screens/server_selection.cpp index 027bc202b..5fbf02235 100644 --- a/src/states_screens/server_selection.cpp +++ b/src/states_screens/server_selection.cpp @@ -29,6 +29,8 @@ #include "utils/string_utils.hpp" #include "online/servers_manager.hpp" +using namespace online; + DEFINE_SCREEN_SINGLETON( ServerSelection ); // ----------------------------------------------------------------------------