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:
@@ -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
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user