diff --git a/src/db/dbdefs.h b/src/db/dbdefs.h new file mode 100644 index 00000000..defa67be --- /dev/null +++ b/src/db/dbdefs.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2010 by Lothar May * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +/* Server database callback for async database operations. */ + +#ifndef _DBDEFS_H_ +#define _DBDEFS_H_ + +#include + +typedef unsigned DB_id; +#define DB_ID_INVALID 0 + +struct DBPlayerData +{ + DB_id id; + std::string secret; + std::string language; + std::string last_login; +}; + +#endif diff --git a/src/db/serverdbcallback.h b/src/db/serverdbcallback.h index 0a43a734..d5323b1b 100644 --- a/src/db/serverdbcallback.h +++ b/src/db/serverdbcallback.h @@ -21,11 +21,9 @@ #ifndef _SERVERDBCALLBACK_H_ #define _SERVERDBCALLBACK_H_ +#include #include -typedef unsigned DB_id; -#define DB_ID_INVALID 0 - // Callback operations are posted using the io service, // and will therefore be executed in the io service thread. class ServerDBCallback @@ -38,7 +36,7 @@ public: virtual void QueryError(const std::string &error) = 0; - virtual void PlayerLoginSuccess(unsigned requestId, DB_id playerId, const std::string &secret) = 0; + virtual void PlayerLoginSuccess(unsigned requestId, const DBPlayerData &dbPlayerData) = 0; virtual void PlayerLoginFailed(unsigned requestId) = 0; virtual void CreateGameSuccess(unsigned requestId, DB_id gameId) = 0; diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 8ce36ea1..67bc6dc7 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -113,9 +113,9 @@ public: LOG_ERROR("DB query error: " << error); } - virtual void PlayerLoginSuccess(unsigned requestId, DB_id dbPlayerId, const std::string &secret) + virtual void PlayerLoginSuccess(unsigned requestId, const DBPlayerData &dbPlayerData) { - m_server.UserValid(requestId, dbPlayerId, secret); + m_server.UserValid(requestId, dbPlayerData); } virtual void PlayerLoginFailed(unsigned requestId) @@ -1483,11 +1483,11 @@ ServerLobbyThread::AuthenticatePlayer(SessionWrapper session) } void -ServerLobbyThread::UserValid(unsigned playerId, DB_id dbPlayerId, const string &dbSecret) +ServerLobbyThread::UserValid(unsigned playerId, const DBPlayerData &dbPlayerData) { SessionWrapper tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true); - tmpSession.playerData->SetDBId(dbPlayerId); - this->AuthChallenge(tmpSession, dbSecret); + tmpSession.playerData->SetDBId(dbPlayerData.id); + this->AuthChallenge(tmpSession, dbPlayerData.secret); } void diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index f5871734..b94484e9 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -145,7 +145,7 @@ protected: void InitAfterLogin(SessionWrapper session); void EstablishSession(SessionWrapper session); void AuthenticatePlayer(SessionWrapper session); - void UserValid(unsigned playerId, DB_id dbPlayerId, const std::string &dbSecret); + void UserValid(unsigned playerId, const DBPlayerData &dbPlayerData); void UserInvalid(unsigned playerId); void RequestPlayerAvatar(SessionWrapper session); void TimerRemoveGame(const boost::system::error_code &ec); diff --git a/src/playerdata.cpp b/src/playerdata.cpp index 4a7c2d66..a4ed0717 100644 --- a/src/playerdata.cpp +++ b/src/playerdata.cpp @@ -65,6 +65,20 @@ PlayerData::SetPassword(const string &password) m_password = password; } +std::string +PlayerData::GetCountry() const +{ + boost::mutex::scoped_lock lock(m_dataMutex); + return m_country; +} + +void +PlayerData::SetCountry(const std::string &country) +{ + boost::mutex::scoped_lock lock(m_dataMutex); + m_country = country; +} + string PlayerData::GetAvatarFile() const { diff --git a/src/playerdata.h b/src/playerdata.h index 2906e2c0..6807cc52 100644 --- a/src/playerdata.h +++ b/src/playerdata.h @@ -83,6 +83,8 @@ public: void SetName(const std::string &name); std::string GetPassword() const; void SetPassword(const std::string &password); + std::string GetCountry() const; + void SetCountry(const std::string &country); std::string GetAvatarFile() const; void SetAvatarFile(const std::string &avatarFile); MD5Buf GetAvatarMD5() const; @@ -110,6 +112,7 @@ private: int m_number; std::string m_name; std::string m_password; + std::string m_country; std::string m_avatarFile; MD5Buf m_avatarMD5; PlayerType m_type;