CurrentUser doesn't use acquire and releqse anymore. Mutexes added to the members.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/uni@13351 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
@@ -27,54 +27,41 @@
|
||||
#include "utils/log.hpp"
|
||||
#include "online/servers_manager.hpp"
|
||||
|
||||
using namespace Online;
|
||||
|
||||
namespace Online{
|
||||
static Synchronised<CurrentUser*> user_singleton(NULL);
|
||||
static CurrentUser* current_user_singleton(NULL);
|
||||
|
||||
CurrentUser* CurrentUser::acquire()
|
||||
CurrentUser* CurrentUser::get()
|
||||
{
|
||||
user_singleton.lock();
|
||||
CurrentUser * user = user_singleton.getData();
|
||||
if (user == NULL)
|
||||
{
|
||||
user_singleton.unlock();
|
||||
user = new CurrentUser();
|
||||
user_singleton.setAtomic(user);
|
||||
user_singleton.lock();
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
void CurrentUser::release()
|
||||
{
|
||||
user_singleton.unlock();
|
||||
if (current_user_singleton == NULL)
|
||||
current_user_singleton = new CurrentUser();
|
||||
return current_user_singleton;
|
||||
}
|
||||
|
||||
void CurrentUser::deallocate()
|
||||
{
|
||||
user_singleton.lock();
|
||||
CurrentUser* user = user_singleton.getData();
|
||||
delete user;
|
||||
user = NULL;
|
||||
user_singleton.unlock();
|
||||
delete current_user_singleton;
|
||||
current_user_singleton = NULL;
|
||||
} // deallocate
|
||||
|
||||
// ============================================================================
|
||||
CurrentUser::CurrentUser(){
|
||||
m_state = US_SIGNED_OUT;
|
||||
m_id = 0;
|
||||
m_name = "";
|
||||
m_token = "";
|
||||
m_save_session = false;
|
||||
CurrentUser::CurrentUser()
|
||||
: User("",0)
|
||||
{
|
||||
setState(US_SIGNED_OUT);
|
||||
setToken("");
|
||||
setSaveSession(false);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
XMLRequest * CurrentUser::requestSignUp( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
const irr::core::stringw &password_confirm,
|
||||
const irr::core::stringw &email,
|
||||
bool terms)
|
||||
const XMLRequest * CurrentUser::requestSignUp( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
const irr::core::stringw &password_confirm,
|
||||
const irr::core::stringw &email,
|
||||
bool terms)
|
||||
{
|
||||
assert(m_state == US_SIGNED_OUT || m_state == US_GUEST);
|
||||
assert(getState() == US_SIGNED_OUT || getState() == US_GUEST);
|
||||
XMLRequest * request = new XMLRequest();
|
||||
request->setURL((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
request->setParameter("action", std::string("register"));
|
||||
@@ -88,10 +75,10 @@ namespace Online{
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
CurrentUser::SignInRequest * CurrentUser::requestSavedSession()
|
||||
const CurrentUser::SignInRequest * CurrentUser::requestSavedSession()
|
||||
{
|
||||
SignInRequest * request = NULL;
|
||||
if(m_state != US_SIGNED_IN && UserConfigParams::m_saved_session)
|
||||
if(getState() != US_SIGNED_IN && UserConfigParams::m_saved_session)
|
||||
{
|
||||
request = new SignInRequest();
|
||||
request->setURL((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
@@ -99,24 +86,24 @@ namespace Online{
|
||||
request->setParameter("userid", UserConfigParams::m_saved_user);
|
||||
request->setParameter("token", UserConfigParams::m_saved_token.c_str());
|
||||
HTTPManager::get()->addRequest(request);
|
||||
m_state = US_SIGNING_IN;
|
||||
setState(US_SIGNING_IN);
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
CurrentUser::SignInRequest * CurrentUser::requestSignIn( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
bool save_session)
|
||||
const CurrentUser::SignInRequest * CurrentUser::requestSignIn( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
bool save_session)
|
||||
{
|
||||
assert(m_state == US_SIGNED_OUT);
|
||||
m_save_session = save_session;
|
||||
assert(getState() == US_SIGNED_OUT);
|
||||
setSaveSession(save_session);
|
||||
SignInRequest * request = new SignInRequest();
|
||||
request->setURL((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
request->setParameter("action",std::string("connect"));
|
||||
request->setParameter("username",username);
|
||||
request->setParameter("password",password);
|
||||
HTTPManager::get()->addRequest(request);
|
||||
m_state = US_SIGNING_IN;
|
||||
setState(US_SIGNING_IN);
|
||||
return request;
|
||||
}
|
||||
|
||||
@@ -124,39 +111,44 @@ namespace Online{
|
||||
{
|
||||
if (input->isSuccess())
|
||||
{
|
||||
int token_fetched = input->getResult()->get("token", &m_token);
|
||||
int username_fetched = input->getResult()->get("username", &m_name);
|
||||
int userid_fetched = input->getResult()->get("userid", &m_id);
|
||||
std::string token("");
|
||||
int token_fetched = input->getResult()->get("token", &token);
|
||||
setToken(token);
|
||||
irr::core::stringw username("");
|
||||
int username_fetched = input->getResult()->get("username", &username);
|
||||
setUserName(username);
|
||||
uint32_t userid(0);
|
||||
int userid_fetched = input->getResult()->get("userid", &userid);
|
||||
setUserID(userid);
|
||||
assert(token_fetched && username_fetched && userid_fetched);
|
||||
m_state = US_SIGNED_IN;
|
||||
if(m_save_session)
|
||||
setState(US_SIGNED_IN);
|
||||
if(getSaveSession())
|
||||
{
|
||||
UserConfigParams::m_saved_user = m_id;
|
||||
UserConfigParams::m_saved_token = m_token;
|
||||
UserConfigParams::m_saved_user = getUserID();
|
||||
UserConfigParams::m_saved_token = getToken();
|
||||
UserConfigParams::m_saved_session = true;
|
||||
m_save_session = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
m_state = US_SIGNED_OUT;
|
||||
setState(US_SIGNED_OUT);
|
||||
}
|
||||
|
||||
void CurrentUser::SignInRequest::callback()
|
||||
{
|
||||
CurrentUser::acquire()->signIn(this);
|
||||
CurrentUser::release();
|
||||
CurrentUser::get()->signIn(this);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
CurrentUser::ServerCreationRequest * CurrentUser::requestServerCreation(const irr::core::stringw &name, int max_players)
|
||||
const CurrentUser::ServerCreationRequest * CurrentUser::requestServerCreation( const irr::core::stringw &name,
|
||||
int max_players)
|
||||
{
|
||||
assert(m_state == US_SIGNED_IN);
|
||||
assert(getState() == US_SIGNED_IN);
|
||||
ServerCreationRequest * request = new ServerCreationRequest();
|
||||
request->setURL((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
request->setParameter("action", std::string("create_server"));
|
||||
request->setParameter("token", m_token);
|
||||
request->setParameter("userid", m_id);
|
||||
request->setParameter("token", getToken());
|
||||
request->setParameter("userid", getUserID());
|
||||
request->setParameter("name", name);
|
||||
request->setParameter("max_players", max_players);
|
||||
HTTPManager::get()->addRequest(request);
|
||||
@@ -174,15 +166,15 @@ namespace Online{
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
CurrentUser::SignOutRequest * CurrentUser::requestSignOut(){
|
||||
assert(m_state == US_SIGNED_IN || m_state == US_GUEST);
|
||||
const CurrentUser::SignOutRequest * CurrentUser::requestSignOut(){
|
||||
assert(getState() == US_SIGNED_IN || getState() == US_GUEST);
|
||||
SignOutRequest * request = new SignOutRequest();
|
||||
request->setURL((std::string)UserConfigParams::m_server_multiplayer + "client-user.php");
|
||||
request->setParameter("action",std::string("disconnect"));
|
||||
request->setParameter("token",m_token);
|
||||
request->setParameter("userid",m_id);
|
||||
request->setParameter("token", getToken());
|
||||
request->setParameter("userid", getUserID());
|
||||
HTTPManager::get()->addRequest(request);
|
||||
m_state = US_SIGNING_OUT;
|
||||
setState(US_SIGNING_OUT);
|
||||
return request;
|
||||
}
|
||||
|
||||
@@ -192,10 +184,10 @@ namespace Online{
|
||||
{
|
||||
Log::warn("CurrentUser::signOut", "%s", _("There were some connection issues while signing out. Report a bug if this caused issues."));
|
||||
}
|
||||
m_token = "";
|
||||
m_name = "";
|
||||
m_id = 0;
|
||||
m_state = US_SIGNED_OUT;
|
||||
setToken("");
|
||||
setUserName("");
|
||||
setUserID(0);
|
||||
setState(US_SIGNED_OUT);
|
||||
UserConfigParams::m_saved_user = 0;
|
||||
UserConfigParams::m_saved_token = "";
|
||||
UserConfigParams::m_saved_session = false;
|
||||
@@ -203,19 +195,18 @@ namespace Online{
|
||||
|
||||
void CurrentUser::SignOutRequest::callback()
|
||||
{
|
||||
CurrentUser::acquire()->signOut(this);
|
||||
CurrentUser::release();
|
||||
CurrentUser::get()->signOut(this);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
CurrentUser::ServerJoinRequest * CurrentUser::requestServerJoin(uint32_t server_id){
|
||||
assert(m_state == US_SIGNED_IN || m_state == US_GUEST);
|
||||
const CurrentUser::ServerJoinRequest * CurrentUser::requestServerJoin(uint32_t server_id){
|
||||
assert(getState() == US_SIGNED_IN || getState() == US_GUEST);
|
||||
ServerJoinRequest * request = new ServerJoinRequest();
|
||||
request->setURL((std::string)UserConfigParams::m_server_multiplayer + "address-management.php");
|
||||
request->setParameter("action",std::string("request-connection"));
|
||||
request->setParameter("token", m_token);
|
||||
request->setParameter("id", m_id);
|
||||
request->setParameter("token", getToken());
|
||||
request->setParameter("id", getUserID());
|
||||
request->setParameter("server_id", server_id);
|
||||
HTTPManager::get()->addRequest(request);
|
||||
return request;
|
||||
@@ -234,12 +225,11 @@ namespace Online{
|
||||
|
||||
// ============================================================================
|
||||
|
||||
irr::core::stringw CurrentUser::getUserName() const
|
||||
const irr::core::stringw CurrentUser::getUserName() const
|
||||
{
|
||||
if((m_state == US_SIGNED_IN ) || (m_state == US_GUEST))
|
||||
return m_name;
|
||||
if((getState() == US_SIGNED_IN ) || (getState() == US_GUEST))
|
||||
return getUserName();
|
||||
else
|
||||
return _("Currently not signed in");
|
||||
}
|
||||
|
||||
} // namespace Online
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "utils/types.hpp"
|
||||
#include "online/server.hpp"
|
||||
#include "http_manager.hpp"
|
||||
#include "utils/synchronised.hpp"
|
||||
|
||||
|
||||
namespace Online{
|
||||
@@ -75,7 +76,7 @@ namespace Online{
|
||||
Synchronised<uint32_t> m_created_server_id;
|
||||
public:
|
||||
ServerCreationRequest() : XMLRequest(RT_SERVER_CREATION) {}
|
||||
uint32_t getCreatedServerID() {return m_created_server_id.getAtomic();}
|
||||
const uint32_t getCreatedServerID() const {return m_created_server_id.getAtomic();}
|
||||
};
|
||||
|
||||
class ServerJoinRequest : public XMLRequest {
|
||||
@@ -86,9 +87,17 @@ namespace Online{
|
||||
|
||||
|
||||
private:
|
||||
std::string m_token;
|
||||
bool m_save_session;
|
||||
UserState m_state;
|
||||
Synchronised<std::string> m_token;
|
||||
Synchronised<bool> m_save_session;
|
||||
Synchronised<UserState> m_state;
|
||||
|
||||
UserState getState() const { return m_state.getAtomic(); }
|
||||
bool getSaveSession() const { return m_save_session.getAtomic(); }
|
||||
const std::string getToken() const { return m_token.getAtomic(); }
|
||||
|
||||
void setState (UserState user_state) { m_state.setAtomic(user_state); }
|
||||
void setSaveSession (bool save_session) { m_save_session.setAtomic(save_session); }
|
||||
void setToken (const std::string & token) { m_token.setAtomic(token); }
|
||||
|
||||
CurrentUser();
|
||||
|
||||
@@ -98,32 +107,28 @@ namespace Online{
|
||||
|
||||
public:
|
||||
//Singleton
|
||||
static CurrentUser* acquire();
|
||||
static void release();
|
||||
static void deallocate();
|
||||
static CurrentUser * get();
|
||||
static void deallocate();
|
||||
|
||||
SignInRequest * requestSavedSession();
|
||||
SignInRequest * requestSignIn( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
bool save_session);
|
||||
SignOutRequest * requestSignOut();
|
||||
ServerCreationRequest * requestServerCreation( const irr::core::stringw &name, int max_players);
|
||||
ServerJoinRequest * requestServerJoin( uint32_t server_id);
|
||||
const SignInRequest * requestSavedSession();
|
||||
const SignInRequest * requestSignIn( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
bool save_session);
|
||||
const SignOutRequest * requestSignOut();
|
||||
const ServerCreationRequest * requestServerCreation( const irr::core::stringw &name, int max_players);
|
||||
const ServerJoinRequest * requestServerJoin( uint32_t server_id);
|
||||
|
||||
|
||||
// Register
|
||||
XMLRequest * requestSignUp( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
const irr::core::stringw &password_ver,
|
||||
const irr::core::stringw &email,
|
||||
bool terms);
|
||||
const XMLRequest * requestSignUp( const irr::core::stringw &username,
|
||||
const irr::core::stringw &password,
|
||||
const irr::core::stringw &password_ver,
|
||||
const irr::core::stringw &email,
|
||||
bool terms);
|
||||
|
||||
/** Returns the username if signed in. */
|
||||
irr::core::stringw getUserName() const;
|
||||
bool isSignedIn() const { return m_state == US_SIGNED_IN; }
|
||||
bool isGuest() const { return m_state == US_GUEST; }
|
||||
bool isSigningIn() const { return m_state == US_SIGNING_IN; }
|
||||
UserState getUserState() { return m_state; }
|
||||
const irr::core::stringw getUserName() const;
|
||||
const UserState getUserState() const { return m_state.getAtomic(); }
|
||||
|
||||
}; // class CurrentUser
|
||||
|
||||
|
||||
@@ -59,13 +59,15 @@ namespace Online{
|
||||
//Negative numbers are reserved for special requests ment for the HTTP Manager
|
||||
assert(type >= 0);
|
||||
m_url.setAtomic("");
|
||||
m_parameters = new Parameters;
|
||||
MutexLocker(m_parameters);
|
||||
m_parameters.getData() = new Parameters;
|
||||
m_progress.setAtomic(0);
|
||||
}
|
||||
|
||||
HTTPRequest::~HTTPRequest()
|
||||
{
|
||||
delete m_parameters;
|
||||
MutexLocker(m_parameters);
|
||||
delete m_parameters.getData();
|
||||
}
|
||||
|
||||
bool HTTPRequest::isAllowedToAdd()
|
||||
@@ -96,9 +98,10 @@ namespace Online{
|
||||
curl_easy_setopt(curl_session, CURLOPT_URL, m_url.getAtomic().c_str());
|
||||
Parameters::iterator iter;
|
||||
std::string postString = "";
|
||||
for (iter = m_parameters->begin(); iter != m_parameters->end(); ++iter)
|
||||
m_parameters.lock();
|
||||
for (iter = m_parameters.getData()->begin(); iter != m_parameters.getData()->end(); ++iter)
|
||||
{
|
||||
if(iter != m_parameters->begin())
|
||||
if(iter != m_parameters.getData()->begin())
|
||||
postString.append("&");
|
||||
char * escaped = curl_easy_escape(curl_session , iter->first.c_str(), iter->first.size());
|
||||
postString.append(escaped);
|
||||
@@ -108,6 +111,7 @@ namespace Online{
|
||||
postString.append(escaped);
|
||||
curl_free(escaped);
|
||||
}
|
||||
m_parameters.unlock();
|
||||
curl_easy_setopt(curl_session, CURLOPT_POSTFIELDS, postString.c_str());
|
||||
std::string readBuffer;
|
||||
curl_easy_setopt(curl_session, CURLOPT_WRITEFUNCTION, &HTTPRequest::WriteCallback);
|
||||
@@ -199,18 +203,21 @@ namespace Online{
|
||||
{
|
||||
m_info.setAtomic("");
|
||||
m_success.setAtomic(false);
|
||||
m_result = NULL;
|
||||
MutexLocker(m_result);
|
||||
m_result.getData() = NULL;
|
||||
}
|
||||
|
||||
XMLRequest::~XMLRequest()
|
||||
{
|
||||
delete m_result;
|
||||
MutexLocker(m_result);
|
||||
delete m_result.getData();
|
||||
}
|
||||
|
||||
|
||||
void XMLRequest::operation()
|
||||
{
|
||||
m_result = file_manager->createXMLTreeFromString(downloadPage());
|
||||
MutexLocker(m_result);
|
||||
m_result.getData() = file_manager->createXMLTreeFromString(downloadPage());
|
||||
}
|
||||
|
||||
void XMLRequest::afterOperation()
|
||||
@@ -227,8 +234,22 @@ namespace Online{
|
||||
}
|
||||
else
|
||||
info = _("Unable to connect to the server. Check your internet connection or try again later.");
|
||||
m_info.setAtomic(info);
|
||||
m_info.lock();
|
||||
m_info.getData() = info;
|
||||
m_info.unlock();
|
||||
m_success.setAtomic(success);
|
||||
HTTPRequest::afterOperation();
|
||||
}
|
||||
|
||||
const XMLNode * XMLRequest::getResult() const
|
||||
{
|
||||
MutexLocker(m_result);
|
||||
return m_result.getData();
|
||||
}
|
||||
|
||||
const irr::core::stringw & XMLRequest::getInfo() const
|
||||
{
|
||||
MutexLocker(m_info);
|
||||
return m_info.getData();
|
||||
}
|
||||
} // namespace Online
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace Online{
|
||||
* (everything ok) at the end. */
|
||||
Synchronised<float> m_progress;
|
||||
Synchronised<std::string> m_url;
|
||||
Parameters * m_parameters;
|
||||
Synchronised<Parameters *> m_parameters;
|
||||
|
||||
virtual void afterOperation() OVERRIDE;
|
||||
/** Executed when a request has finished. */
|
||||
@@ -149,14 +149,17 @@ namespace Online{
|
||||
virtual ~HTTPRequest();
|
||||
|
||||
void setParameter(const std::string & name, const std::string &value){
|
||||
(*m_parameters)[name] = value;
|
||||
MutexLocker(m_parameters);
|
||||
(*m_parameters.getData())[name] = value;
|
||||
};
|
||||
void setParameter(const std::string & name, const irr::core::stringw &value){
|
||||
(*m_parameters)[name] = irr::core::stringc(value.c_str()).c_str();
|
||||
MutexLocker(m_parameters);
|
||||
(*m_parameters.getData())[name] = irr::core::stringc(value.c_str()).c_str();
|
||||
}
|
||||
template <typename T>
|
||||
void setParameter(const std::string & name, const T& value){
|
||||
(*m_parameters)[name] = StringUtils::toString(value);
|
||||
MutexLocker(m_parameters);
|
||||
(*m_parameters.getData())[name] = StringUtils::toString(value);
|
||||
}
|
||||
|
||||
/** Returns the current progress. */
|
||||
@@ -179,9 +182,9 @@ namespace Online{
|
||||
|
||||
class XMLRequest : public HTTPRequest
|
||||
{
|
||||
private:
|
||||
Synchronised<XMLNode *> m_result;
|
||||
protected :
|
||||
|
||||
XMLNode * m_result;
|
||||
Synchronised<irr::core::stringw> m_info;
|
||||
Synchronised<bool> m_success;
|
||||
|
||||
@@ -192,13 +195,8 @@ namespace Online{
|
||||
XMLRequest(int type = 0, bool manage_memory = false, int priority = 1);
|
||||
virtual ~XMLRequest();
|
||||
|
||||
virtual XMLNode * getResult() const { return m_result; }
|
||||
const irr::core::stringw getInfo() const {
|
||||
m_info.lock();
|
||||
const irr::core::stringw info = m_info.getData();
|
||||
m_info.unlock();
|
||||
return info;
|
||||
}
|
||||
const XMLNode * getResult() const;
|
||||
const irr::core::stringw & getInfo() const;
|
||||
bool isSuccess() const { return m_success.getAtomic(); }
|
||||
|
||||
};
|
||||
|
||||
@@ -47,16 +47,14 @@ namespace Online{
|
||||
|
||||
// ============================================================================
|
||||
ServersManager::ServersManager(){
|
||||
m_info_message.setAtomic("");
|
||||
m_last_load_time.setAtomic(0.0f);
|
||||
m_joined_server.setAtomic(NULL);
|
||||
}
|
||||
|
||||
ServersManager::~ServersManager(){
|
||||
cleanUpServers();
|
||||
m_joined_server.lock();
|
||||
MutexLocker(m_joined_server);
|
||||
delete m_joined_server.getData();
|
||||
m_joined_server.unlock();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
@@ -96,7 +94,6 @@ namespace Online{
|
||||
}
|
||||
m_last_load_time.setAtomic(Time::getRealTime());
|
||||
}
|
||||
m_info_message.setAtomic(input->getInfo());
|
||||
//FIXME error message
|
||||
}
|
||||
|
||||
@@ -116,20 +113,18 @@ namespace Online{
|
||||
// ============================================================================
|
||||
void ServersManager::setJoinedServer(uint32_t id)
|
||||
{
|
||||
m_joined_server.lock();
|
||||
MutexLocker(m_joined_server);
|
||||
delete m_joined_server.getData();
|
||||
//It's a copy!
|
||||
m_joined_server.getData() = new Server(*getServerByID(id));
|
||||
m_joined_server.unlock();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
void ServersManager::unsetJoinedServer()
|
||||
{
|
||||
m_joined_server.lock();
|
||||
MutexLocker(m_joined_server);
|
||||
delete m_joined_server.getData();
|
||||
m_joined_server.getData() = NULL;
|
||||
m_joined_server.unlock();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
@@ -146,21 +141,21 @@ namespace Online{
|
||||
// ============================================================================
|
||||
int ServersManager::getNumServers () const
|
||||
{
|
||||
MutexLocker locker(m_sorted_servers);
|
||||
MutexLocker(m_sorted_servers);
|
||||
return m_sorted_servers.getData().size();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
const Server * ServersManager::getServerBySort (int index) const
|
||||
{
|
||||
MutexLocker locker(m_sorted_servers);
|
||||
MutexLocker(m_sorted_servers);
|
||||
return m_sorted_servers.getData().get(index);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
const Server * ServersManager::getServerByID (uint32_t id) const
|
||||
{
|
||||
MutexLocker locker(m_mapped_servers);
|
||||
MutexLocker(m_mapped_servers);
|
||||
return m_mapped_servers.getData().at(id);
|
||||
}
|
||||
|
||||
@@ -172,9 +167,8 @@ namespace Online{
|
||||
|
||||
// ============================================================================
|
||||
void ServersManager::sort(bool sort_desc){
|
||||
m_sorted_servers.lock();
|
||||
MutexLocker(m_sorted_servers);
|
||||
m_sorted_servers.getData().insertionSort(0, sort_desc);
|
||||
m_sorted_servers.unlock();
|
||||
}
|
||||
|
||||
} // namespace Online
|
||||
|
||||
@@ -59,7 +59,6 @@ namespace Online {
|
||||
/** This is a pointer to a copy of the server, the moment it got joined */
|
||||
Synchronised<Server *> m_joined_server;
|
||||
|
||||
Synchronised<irr::core::stringw> m_info_message;
|
||||
Synchronised<float> m_last_load_time;
|
||||
void refresh(RefreshRequest * input);
|
||||
void cleanUpServers();
|
||||
|
||||
@@ -22,10 +22,15 @@
|
||||
#include <sstream>
|
||||
#include <stdlib.h>
|
||||
|
||||
using namespace Online;
|
||||
|
||||
namespace Online{
|
||||
// ============================================================================
|
||||
User::User(const irr::core::stringw &username)
|
||||
User::User ( const irr::core::stringw & username,
|
||||
const uint32_t & userid
|
||||
)
|
||||
{
|
||||
m_name = username;
|
||||
setUserName(username);
|
||||
setUserID(userid);
|
||||
}
|
||||
} // namespace Online
|
||||
|
||||
@@ -32,19 +32,22 @@ namespace Online{
|
||||
class User
|
||||
{
|
||||
private:
|
||||
Synchronised<irr::core::stringw> m_name;
|
||||
Synchronised<uint32_t> m_id;
|
||||
|
||||
protected:
|
||||
irr::core::stringw m_name;
|
||||
uint32_t m_id;
|
||||
User(){}
|
||||
void setUserName (const irr::core::stringw & name) { m_name.setAtomic(name); }
|
||||
void setUserID (const uint32_t & id) { m_id.setAtomic(id); }
|
||||
|
||||
public:
|
||||
|
||||
User(const irr::core::stringw &username);
|
||||
User( const irr::core::stringw & username,
|
||||
const uint32_t & userid
|
||||
);
|
||||
|
||||
|
||||
irr::core::stringw getUserName() const { return m_name; }
|
||||
uint32_t getUserID() const { return m_id; }
|
||||
const irr::core::stringw getUserName() const { return m_name.getAtomic(); }
|
||||
const uint32_t getUserID() const { return m_id.getAtomic(); }
|
||||
|
||||
|
||||
}; // class User
|
||||
|
||||
@@ -56,8 +56,7 @@ void CreateServerScreen::loadedFromFile()
|
||||
|
||||
m_name_widget = getWidget<TextBoxWidget>("name");
|
||||
assert(m_name_widget != NULL);
|
||||
m_name_widget->setText(CurrentUser::acquire()->getUserName() + _("'s server"));
|
||||
CurrentUser::release();
|
||||
m_name_widget->setText(CurrentUser::get()->getUserName() + _("'s server"));
|
||||
m_max_players_widget = getWidget<SpinnerWidget>("max_players");
|
||||
assert(m_max_players_widget != NULL);
|
||||
m_max_players_widget->setValue(8);
|
||||
@@ -137,8 +136,7 @@ void CreateServerScreen::serverCreationRequest()
|
||||
else
|
||||
{
|
||||
//m_options_widget->setDeactivated();
|
||||
m_server_creation_request = Online::CurrentUser::acquire()->requestServerCreation(name, max_players);
|
||||
Online::CurrentUser::release();
|
||||
m_server_creation_request = Online::CurrentUser::get()->requestServerCreation(name, max_players);
|
||||
return;
|
||||
}
|
||||
sfx_manager->quickSound("anvil");
|
||||
|
||||
@@ -46,7 +46,7 @@ private:
|
||||
GUIEngine::IconButtonWidget * m_create_widget;
|
||||
GUIEngine::IconButtonWidget * m_cancel_widget;
|
||||
|
||||
Online::CurrentUser::ServerCreationRequest * m_server_creation_request;
|
||||
const Online::CurrentUser::ServerCreationRequest * m_server_creation_request;
|
||||
|
||||
/** \brief Sets which widget has to be focused. Depends on the user state. */
|
||||
void setInitialFocus();
|
||||
|
||||
@@ -115,8 +115,7 @@ void LoginDialog::login()
|
||||
else
|
||||
{
|
||||
m_options_widget->setDeactivated();
|
||||
m_sign_in_request = Online::CurrentUser::acquire()->requestSignIn(username,password, m_remember_widget->getState());
|
||||
Online::CurrentUser::release();
|
||||
m_sign_in_request = Online::CurrentUser::get()->requestSignIn(username,password, m_remember_widget->getState());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ private:
|
||||
|
||||
bool m_self_destroy;
|
||||
bool m_open_registration_dialog;
|
||||
Online::CurrentUser::SignInRequest * m_sign_in_request;
|
||||
const Online::CurrentUser::SignInRequest * m_sign_in_request;
|
||||
GUIEngine::LabelWidget * m_message_widget;
|
||||
GUIEngine::TextBoxWidget * m_username_widget;
|
||||
GUIEngine::TextBoxWidget * m_password_widget;
|
||||
|
||||
@@ -214,8 +214,7 @@ bool RegistrationDialog::processTermsEvent(const std::string& eventSource){
|
||||
m_options_widget->setDeactivated();
|
||||
m_info_widget->setDefaultColor();
|
||||
m_info_widget->setText(Messages::signingUp(), false);
|
||||
m_sign_up_request = CurrentUser::acquire()->requestSignUp(m_username, m_password, m_password_confirm, m_email, true);
|
||||
CurrentUser::release();
|
||||
m_sign_up_request = CurrentUser::get()->requestSignUp(m_username, m_password, m_password_confirm, m_email, true);
|
||||
return true;
|
||||
}
|
||||
else if (eventSource == m_accept_terms_widget->m_properties[PROP_ID])
|
||||
|
||||
@@ -56,8 +56,8 @@ private:
|
||||
bool m_show_registration_terms;
|
||||
bool m_show_registration_activation;
|
||||
|
||||
Online::XMLRequest * m_sign_up_request;
|
||||
Online::XMLRequest * m_activation_request;
|
||||
const Online::XMLRequest * m_sign_up_request;
|
||||
const Online::XMLRequest * m_activation_request;
|
||||
|
||||
//Saved user input :
|
||||
irr::core::stringw m_username;
|
||||
|
||||
@@ -40,10 +40,9 @@ using namespace Online;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
ServerInfoDialog::ServerInfoDialog(uint32_t server_id, bool from_server_creation) :
|
||||
ModalDialog(0.8f,0.8f)
|
||||
ServerInfoDialog::ServerInfoDialog(const uint32_t server_id, bool from_server_creation)
|
||||
: ModalDialog(0.8f,0.8f), m_server_id(server_id)
|
||||
{
|
||||
m_server_id = server_id;
|
||||
m_self_destroy = false;
|
||||
m_enter_lobby = false;
|
||||
m_from_server_creation = from_server_creation;
|
||||
@@ -77,8 +76,7 @@ ServerInfoDialog::~ServerInfoDialog()
|
||||
// -----------------------------------------------------------------------------
|
||||
void ServerInfoDialog::requestJoin()
|
||||
{
|
||||
m_server_join_request = Online::CurrentUser::acquire()->requestServerJoin(m_server_id);
|
||||
Online::CurrentUser::release();
|
||||
m_server_join_request = Online::CurrentUser::get()->requestServerJoin(m_server_id);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
@@ -42,11 +42,11 @@ private:
|
||||
bool m_self_destroy;
|
||||
bool m_enter_lobby;
|
||||
bool m_from_server_creation;
|
||||
Online::CurrentUser::ServerJoinRequest * m_server_join_request;
|
||||
const Online::CurrentUser::ServerJoinRequest * m_server_join_request;
|
||||
|
||||
float m_load_timer;
|
||||
|
||||
uint32_t m_server_id;
|
||||
const uint32_t m_server_id;
|
||||
|
||||
GUIEngine::LabelWidget * m_name_widget;
|
||||
GUIEngine::LabelWidget * m_info_widget;
|
||||
@@ -58,7 +58,7 @@ private:
|
||||
void requestJoin();
|
||||
|
||||
public:
|
||||
ServerInfoDialog(uint32_t server_id, bool just_created = false);
|
||||
ServerInfoDialog(const uint32_t server_id, bool just_created = false);
|
||||
~ServerInfoDialog();
|
||||
|
||||
void onEnterPressedInternal();
|
||||
|
||||
@@ -52,10 +52,9 @@ DEFINE_SCREEN_SINGLETON( OnlineScreen );
|
||||
OnlineScreen::OnlineScreen() : Screen("online/main.stkgui")
|
||||
{
|
||||
m_recorded_state = CurrentUser::US_SIGNED_OUT;
|
||||
CurrentUser::SignInRequest * request = CurrentUser::acquire()->requestSavedSession();
|
||||
const CurrentUser::SignInRequest * request = CurrentUser::get()->requestSavedSession();
|
||||
if(request != NULL)
|
||||
m_requests.push_back(request);
|
||||
CurrentUser::release();
|
||||
} // OnlineScreen
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -97,8 +96,7 @@ void OnlineScreen::loadedFromFile()
|
||||
bool OnlineScreen::hasStateChanged()
|
||||
{
|
||||
CurrentUser::UserState previous_state = m_recorded_state;
|
||||
m_recorded_state = CurrentUser::acquire()->getUserState();
|
||||
CurrentUser::release();
|
||||
m_recorded_state = CurrentUser::get()->getUserState();
|
||||
if (previous_state != m_recorded_state)
|
||||
return true;
|
||||
return false;
|
||||
@@ -145,8 +143,7 @@ void OnlineScreen::init()
|
||||
Screen::init();
|
||||
setInitialFocus();
|
||||
DemoWorld::resetIdleTime();
|
||||
m_online_status_widget->setText(Messages::signedInAs(CurrentUser::acquire()->getUserName()), false);
|
||||
CurrentUser::release();
|
||||
m_online_status_widget->setText(Messages::signedInAs(CurrentUser::get()->getUserName()), false);
|
||||
|
||||
} // init
|
||||
|
||||
@@ -207,8 +204,7 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name, const
|
||||
}
|
||||
else if (selection == "sign_out")
|
||||
{
|
||||
CurrentUser::acquire()->requestSignOut();
|
||||
CurrentUser::release();
|
||||
CurrentUser::get()->requestSignOut();
|
||||
}
|
||||
else if (selection == "register")
|
||||
{
|
||||
|
||||
@@ -54,7 +54,7 @@ private:
|
||||
|
||||
Online::CurrentUser::UserState m_recorded_state;
|
||||
|
||||
PtrVector<Online::XMLRequest> m_requests;
|
||||
PtrVector<const Online::XMLRequest> m_requests;
|
||||
|
||||
/** \brief Checks if the recorded state differs from the actual state and sets it. */
|
||||
bool hasStateChanged();
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
|
||||
|
||||
class ISynchronised
|
||||
{
|
||||
public :
|
||||
@@ -122,17 +120,18 @@ private:
|
||||
void operator=(const Synchronised<TYPE>& v) {}
|
||||
};
|
||||
|
||||
#define MutexLocker(x) MutexLockerHelper __dummy(x);
|
||||
|
||||
class MutexLocker
|
||||
class MutexLockerHelper
|
||||
{
|
||||
const ISynchronised * m_synchronised;
|
||||
public:
|
||||
MutexLocker(const ISynchronised & synchronised){
|
||||
MutexLockerHelper(const ISynchronised & synchronised){
|
||||
m_synchronised = &synchronised;
|
||||
m_synchronised->lock();
|
||||
}
|
||||
|
||||
~MutexLocker(){
|
||||
~MutexLockerHelper(){
|
||||
m_synchronised->unlock();
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user