Preparing admin functions in PokerTH client.
This commit is contained in:
@@ -549,6 +549,7 @@ AbstractClientStateReceiving::HandlePacket(boost::shared_ptr<ClientThread> clien
|
||||
tmpInfo.playerName = netInfo.playername();
|
||||
tmpInfo.ptype = netInfo.ishuman() ? PLAYER_TYPE_HUMAN : PLAYER_TYPE_COMPUTER;
|
||||
tmpInfo.isGuest = netInfo.playerrights() == netPlayerRightsGuest;
|
||||
tmpInfo.isAdmin = netInfo.playerrights() == netPlayerRightsAdmin;
|
||||
if (netInfo.has_countrycode()) {
|
||||
tmpInfo.countryCode = netInfo.countrycode();
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ NetPacket::~NetPacket()
|
||||
}
|
||||
|
||||
boost::shared_ptr<NetPacket>
|
||||
NetPacket::Create(char *data, size_t dataSize)
|
||||
NetPacket::Create(const char *data, size_t dataSize)
|
||||
{
|
||||
boost::shared_ptr<NetPacket> tmpPacket;
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*****************************************************************************/
|
||||
|
||||
#include <net/serverbanmanager.h>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -43,6 +44,15 @@ ServerBanManager::~ServerBanManager()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
ServerBanManager::SetAdminPlayerIds(const std::list<DB_id> adminList)
|
||||
{
|
||||
boost::mutex::scoped_lock lock(m_banMutex);
|
||||
m_adminPlayers.resize(adminList.size());
|
||||
copy(adminList.begin(), adminList.end(), m_adminPlayers.begin());
|
||||
sort(m_adminPlayers.begin(), m_adminPlayers.end());
|
||||
}
|
||||
|
||||
void
|
||||
ServerBanManager::BanPlayerName(const std::string &playerName, unsigned durationHours)
|
||||
{
|
||||
@@ -140,6 +150,20 @@ ServerBanManager::ClearBanList()
|
||||
m_banIPAddressMap.clear();
|
||||
}
|
||||
|
||||
bool
|
||||
ServerBanManager::IsAdminPlayer(DB_id playerId) const
|
||||
{
|
||||
bool retVal = false;
|
||||
if (playerId != DB_ID_INVALID) {
|
||||
boost::mutex::scoped_lock lock(m_banMutex);
|
||||
|
||||
if (binary_search(m_adminPlayers.begin(), m_adminPlayers.end(), playerId)) {
|
||||
retVal = true;
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
bool
|
||||
ServerBanManager::IsPlayerBanned(const std::string &name) const
|
||||
{
|
||||
|
||||
@@ -146,16 +146,16 @@ public:
|
||||
LOG_MSG("Successfully connected to database.");
|
||||
}
|
||||
|
||||
virtual void ConnectFailed(const string &error) {
|
||||
virtual void ConnectFailed(string error) {
|
||||
LOG_ERROR("DB connect error: " << error);
|
||||
}
|
||||
|
||||
virtual void QueryError(const std::string &error) {
|
||||
virtual void QueryError(string error) {
|
||||
LOG_ERROR("DB query error: " << error);
|
||||
}
|
||||
|
||||
virtual void PlayerLoginSuccess(unsigned requestId, const DBPlayerData &dbPlayerData) {
|
||||
m_server.UserValid(requestId, dbPlayerData);
|
||||
virtual void PlayerLoginSuccess(unsigned requestId, boost::shared_ptr<DBPlayerData> dbPlayerData) {
|
||||
m_server.UserValid(requestId, *dbPlayerData);
|
||||
}
|
||||
|
||||
virtual void PlayerLoginFailed(unsigned requestId) {
|
||||
@@ -199,6 +199,10 @@ public:
|
||||
m_server.SendReportGameResult(requestId, replyId, false);
|
||||
}
|
||||
|
||||
virtual void PlayerAdminList(unsigned requestId, std::list<DB_id> adminList) {
|
||||
m_server.GetBanManager().SetAdminPlayerIds(adminList);
|
||||
}
|
||||
|
||||
private:
|
||||
ServerLobbyThread &m_server;
|
||||
};
|
||||
@@ -242,6 +246,7 @@ ServerLobbyThread::Init(const string &logDir)
|
||||
m_serverConfig.readConfigString("DBServerPassword"),
|
||||
m_serverConfig.readConfigString("DBServerDatabaseName"),
|
||||
m_serverConfig.readConfigString("DBServerEncryptionKey"));
|
||||
m_database->AsyncQueryAdminPlayers(0);
|
||||
|
||||
GetBanManager().InitGameNameBadWordList(m_serverConfig.readConfigStringList("GameNameBadWordList"));
|
||||
}
|
||||
@@ -1074,6 +1079,10 @@ ServerLobbyThread::HandleNetPacketAuthClientResponse(boost::shared_ptr<SessionDa
|
||||
GetSender().Send(session, packet);
|
||||
// The last message is only for server verification.
|
||||
// We are done now, the user has logged in.
|
||||
boost::shared_ptr<PlayerData> tmpPlayerData = session->GetPlayerData();
|
||||
if (GetBanManager().IsAdminPlayer(tmpPlayerData->GetDBId())) {
|
||||
session->GetPlayerData()->SetRights(PLAYER_RIGHTS_ADMIN);
|
||||
}
|
||||
CheckAvatarBlacklist(session);
|
||||
} else
|
||||
SessionError(session, ERR_NET_INVALID_PASSWORD);
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ public:
|
||||
NetPacket(PokerTHMessage *msg);
|
||||
~NetPacket();
|
||||
|
||||
static boost::shared_ptr<NetPacket> Create(char *data, size_t dataSize);
|
||||
static boost::shared_ptr<NetPacket> Create(const char *data, size_t dataSize);
|
||||
|
||||
const PokerTHMessage *GetMsg() const {
|
||||
return m_msg;
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#ifndef _SERVERBANMANAGER_H_
|
||||
#define _SERVERBANMANAGER_H_
|
||||
|
||||
#include <db/dbdefs.h>
|
||||
#include <boost/asio.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
@@ -47,6 +48,8 @@ public:
|
||||
ServerBanManager(boost::shared_ptr<boost::asio::io_service> ioService);
|
||||
virtual ~ServerBanManager();
|
||||
|
||||
void SetAdminPlayerIds(const std::list<DB_id> adminList);
|
||||
|
||||
void BanPlayerName(const std::string &playerName, unsigned durationHours = 0);
|
||||
void BanPlayerRegex(const std::string &playerRegex, unsigned durationHours = 0);
|
||||
void BanIPAddress(const std::string &ipAddress, unsigned durationHours);
|
||||
@@ -54,6 +57,7 @@ public:
|
||||
void GetBanList(std::list<std::string> &list) const;
|
||||
void ClearBanList();
|
||||
|
||||
bool IsAdminPlayer(DB_id playerId) const;
|
||||
bool IsPlayerBanned(const std::string &name) const;
|
||||
bool IsIPAddressBanned(const std::string &ipAddress) const;
|
||||
|
||||
@@ -75,6 +79,7 @@ protected:
|
||||
typedef std::map<unsigned, TimedPlayerBan> RegexMap;
|
||||
typedef std::map<unsigned, TimedIPBan> IPAddressMap;
|
||||
typedef std::list<boost::regex> RegexList;
|
||||
typedef std::vector<DB_id> DBPlayerIdList;
|
||||
|
||||
boost::shared_ptr<boost::asio::deadline_timer> InternalRegisterTimedBan(unsigned timerId, unsigned durationHours);
|
||||
void TimerRemoveBan(const boost::system::error_code &ec, unsigned banId, boost::shared_ptr<boost::asio::deadline_timer> timer);
|
||||
@@ -87,6 +92,7 @@ private:
|
||||
RegexMap m_banPlayerNameMap;
|
||||
RegexList m_gameNameBadWordFilter;
|
||||
IPAddressMap m_banIPAddressMap;
|
||||
DBPlayerIdList m_adminPlayers;
|
||||
unsigned m_curBanId;
|
||||
mutable boost::mutex m_banMutex;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user