Replaced all non-related GUI code actions done after a reply to request callbacks. Servers manager now allows getting by ID and sort index.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/uni@13326 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
unitraxx
2013-07-23 16:34:38 +00:00
parent 182cd15477
commit cdab5caf35
8 changed files with 97 additions and 26 deletions

View File

@@ -163,7 +163,13 @@ namespace Online{
void CurrentUser::ServerCreationRequest::callback()
{
//FIXME
if(isSuccess())
{
Server * server = new Server(*getResult()->getNode("server"));
ServersManager::acquire()->addServer(server);
ServersManager::release();
m_created_server_id.setAtomic(server->getServerId());
}
}
// ============================================================================
@@ -216,6 +222,14 @@ namespace Online{
void CurrentUser::ServerJoinRequest::callback()
{
if(isSuccess())
{
uint32_t server_id;
getResult()->get("serverid", &server_id);
ServersManager::acquire()->setJoinedServer(server_id);
ServersManager::release();
}
//FIXME needs changes for actual valid joining
}
// ============================================================================

View File

@@ -72,8 +72,10 @@ namespace Online{
class ServerCreationRequest : public XMLRequest {
virtual void callback ();
Synchronised<uint32_t> m_created_server_id;
public:
ServerCreationRequest() : XMLRequest(RT_SERVER_CREATION) {}
uint32_t getCreatedServerID() {return m_created_server_id.getAtomic();}
};
class ServerJoinRequest : public XMLRequest {

View File

@@ -62,17 +62,23 @@ namespace Online{
// ============================================================================
ServersManager::ServersManager(){
m_servers = new PtrVector<Server>;
m_info_message = "";
m_last_load_time = 0.0f;
m_joined_server = NULL;
}
ServersManager::~ServersManager(){
m_servers->clearAndDeleteAll();
cleanUpServers();
delete m_joined_server;
}
// ============================================================================
void ServersManager::cleanUpServers()
{
m_sorted_servers.clearAndDeleteAll();
m_mapped_servers.clear();
}
// ============================================================================
ServersManager::RefreshRequest * ServersManager::refreshRequest()
{
@@ -92,10 +98,10 @@ namespace Online{
if (input->isSuccess())
{
const XMLNode * servers_xml = input->getResult()->getNode("servers");
m_servers->clearAndDeleteAll();
cleanUpServers();
for (unsigned int i = 0; i < servers_xml->getNumNodes(); i++)
{
m_servers->push_back(new Server(*servers_xml->getNode(i)));
addServer(new Server(*servers_xml->getNode(i)));
}
m_last_load_time = Time::getRealTime();
}
@@ -112,8 +118,48 @@ namespace Online{
// ============================================================================
Server * ServersManager::getQuickPlay()
{
if(m_servers->size() > 0)
return m_servers->get(0);
if(m_sorted_servers.size() > 0)
return getServerBySort(0);
return NULL;
}
// ============================================================================
void ServersManager::setJoinedServer(uint32_t id)
{
delete m_joined_server;
//It's a copy!
m_joined_server = new Server(*getServerByID(id));
}
// ============================================================================
void ServersManager::unsetJoinedServer()
{
delete m_joined_server;
m_joined_server = NULL;
}
// ============================================================================
void ServersManager::addServer(Server * server)
{
m_sorted_servers.push_back(server);
m_mapped_servers[server->getServerId()] = server;
}
// ============================================================================
int ServersManager::getNumServers ()
{
return m_sorted_servers.size();
}
// ============================================================================
Server * ServersManager::getServerBySort (int index)
{
return m_sorted_servers.get(index);
}
// ============================================================================
Server * ServersManager::getServerByID (uint32_t id)
{
return m_mapped_servers[id];
}
} // namespace Online

View File

@@ -20,6 +20,7 @@
#define HEADER_SERVERS_MANAGER_HPP
#include "utils/ptr_vector.hpp"
#include "utils/types.hpp"
#include "online/server.hpp"
#include "http_manager.hpp"
@@ -49,12 +50,18 @@ namespace Online {
private:
ServersManager();
~ServersManager();
PtrVector<Server> * m_servers;
bool m_not_fetched;
/** Sorted vector of servers */
PtrVector<Server> m_sorted_servers;
/** Maps server id's to the same servers*/
std::map<uint32_t, Server*> m_mapped_servers;
/** This is a pointer to a copy of the server, the moment it got joined */
Server * m_joined_server;
bool m_not_fetched;
irr::core::stringw m_info_message;
float m_last_load_time;
void refresh(RefreshRequest * input);
void cleanUpServers();
public:
// Singleton
@@ -63,11 +70,13 @@ namespace Online {
static void deallocate();
RefreshRequest * refreshRequest();
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; }
void setJoinedServer(uint32_t server_id);
void unsetJoinedServer();
void addServer(Server * server);
int getNumServers ();
Server * getServerByID (uint32_t server_id);
Server * getServerBySort (int index);
void sort(bool sort_desc) { m_sorted_servers.insertionSort(0, sort_desc); }
Server * getJoinedServer() { return m_joined_server; }
//Returns the best server to join
Server * getQuickPlay();

View File

@@ -97,8 +97,7 @@ void CreateServerScreen::onUpdate(float delta, irr::video::IVideoDriver* driver
if(m_server_creation_request->isSuccess())
{
if (m_enter_server){
Server * server = new Server(*m_server_creation_request->getResult()->getNode("server"));
new ServerInfoDialog(server,true);
new ServerInfoDialog(m_server_creation_request->getCreatedServerID(),true);
}
else
{

View File

@@ -40,10 +40,10 @@ using namespace Online;
// -----------------------------------------------------------------------------
ServerInfoDialog::ServerInfoDialog(Server * server, bool join) :
ServerInfoDialog::ServerInfoDialog(uint32_t server_id, bool join) :
ModalDialog(0.8f,0.8f)
{
m_server = server;
m_server_id = server_id;
m_self_destroy = false;
m_enter_lobby = false;
m_server_join_request = NULL;
@@ -52,8 +52,9 @@ ServerInfoDialog::ServerInfoDialog(Server * server, bool join) :
m_name_widget = getWidget<LabelWidget>("name");
assert(m_name_widget != NULL);
Server * server = ServersManager::acquire()->getServerByID(m_server_id);
m_name_widget->setText(server->getName(),false);
ServersManager::release();
m_info_widget = getWidget<LabelWidget>("info");
assert(m_info_widget != NULL);
@@ -76,7 +77,7 @@ ServerInfoDialog::~ServerInfoDialog()
// -----------------------------------------------------------------------------
void ServerInfoDialog::requestJoin()
{
m_server_join_request = Online::CurrentUser::acquire()->requestServerJoin(m_server->getServerId());
m_server_join_request = Online::CurrentUser::acquire()->requestServerJoin(m_server_id);
Online::CurrentUser::release();
}
@@ -123,8 +124,6 @@ void ServerInfoDialog::onUpdate(float dt)
{
if(m_server_join_request->isSuccess())
{
ServersManager::acquire()->setJoinedServer(m_server);
ServersManager::release();
m_enter_lobby = true;
}
else

View File

@@ -27,6 +27,7 @@
#include "guiengine/widgets/label_widget.hpp"
#include "online/server.hpp"
#include "online/current_user.hpp"
#include "utils/types.hpp"
/**
@@ -44,7 +45,7 @@ private:
float m_load_timer;
Online::Server * m_server;
uint32_t m_server_id;
GUIEngine::LabelWidget * m_name_widget;
GUIEngine::LabelWidget * m_info_widget;
@@ -56,7 +57,7 @@ private:
void requestJoin();
public:
ServerInfoDialog(Online::Server * server, bool join = false);
ServerInfoDialog(uint32_t server_id, bool join = false);
~ServerInfoDialog();
void onEnterPressedInternal();

View File

@@ -117,7 +117,7 @@ void ServerSelection::loadList()
manager->sort(m_sort_desc);
for(int i=0; i < manager->getNumServers(); i++)
{
Server * server = manager->getServer(i);
Server * server = manager->getServerBySort(i);
core::stringw num_players;
num_players.append(StringUtils::toWString(server->getCurrentPlayers()));
num_players.append("/");
@@ -162,8 +162,9 @@ void ServerSelection::eventCallback( GUIEngine::Widget* widget,
else if (name == m_server_list_widget->m_properties[GUIEngine::PROP_ID])
{
m_selected_index = m_server_list_widget->getSelectionID();
new ServerInfoDialog(ServersManager::acquire()->getServer(m_selected_index));
uint32_t server_id = ServersManager::acquire()->getServerBySort(m_selected_index)->getServerId();
ServersManager::release();
new ServerInfoDialog(server_id);
}
} // eventCallback