diff --git a/common/server.cpp b/common/server.cpp index 06171da8..d271f695 100644 --- a/common/server.cpp +++ b/common/server.cpp @@ -158,7 +158,7 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString clients[i]->sendProtocolItem(*se); delete se; - event.mutable_user_info()->CopyFrom(session->copyUserInfo(true, true)); + event.mutable_user_info()->CopyFrom(session->copyUserInfo(true, true, true)); locker.unlock(); se = Server_ProtocolHandler::prepareSessionEvent(event); diff --git a/common/server_game.cpp b/common/server_game.cpp index efee70a7..d854cebd 100644 --- a/common/server_game.cpp +++ b/common/server_game.cpp @@ -390,7 +390,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons { QMutexLocker locker(&gameMutex); - Server_Player *newPlayer = new Server_Player(this, nextPlayerId++, userInterface->copyUserInfo(true), spectator, userInterface); + Server_Player *newPlayer = new Server_Player(this, nextPlayerId++, userInterface->copyUserInfo(true, true), spectator, userInterface); newPlayer->moveToThread(thread()); Event_Join joinEvent; diff --git a/common/server_player.cpp b/common/server_player.cpp index a248c4c1..5732ac79 100644 --- a/common/server_player.cpp +++ b/common/server_player.cpp @@ -84,7 +84,7 @@ #include Server_Player::Server_Player(Server_Game *_game, int _playerId, const ServerInfo_User &_userInfo, bool _spectator, Server_AbstractUserInterface *_userInterface) - : game(_game), userInterface(_userInterface), userInfo(new ServerInfo_User(_userInfo)), deck(0), pingTime(0), playerId(_playerId), spectator(_spectator), nextCardId(0), readyStart(false), conceded(false), sideboardLocked(true) + : ServerInfo_User_Container(_userInfo), game(_game), userInterface(_userInterface), deck(0), pingTime(0), playerId(_playerId), spectator(_spectator), nextCardId(0), readyStart(false), conceded(false), sideboardLocked(true) { } @@ -101,9 +101,6 @@ void Server_Player::prepareDestroy() userInterface->playerRemovedFromGame(game); playerMutex.unlock(); - delete userInfo; - userInfo = 0; - clearZones(); deleteLater(); @@ -244,7 +241,7 @@ void Server_Player::getProperties(ServerInfo_PlayerProperties &result, bool with { result.set_player_id(playerId); if (withUserInfo) - result.mutable_user_info()->CopyFrom(*userInfo); + copyUserInfo(*(result.mutable_user_info()), true); result.set_spectator(spectator); if (!spectator) { result.set_conceded(conceded); diff --git a/common/server_player.h b/common/server_player.h index c136ef9d..61e29bab 100644 --- a/common/server_player.h +++ b/common/server_player.h @@ -2,6 +2,7 @@ #define PLAYER_H #include "server_arrowtarget.h" +#include "serverinfo_user_container.h" #include #include #include @@ -60,13 +61,12 @@ class Command_DeckSelect; class Command_SetSideboardLock; class Command_ChangeZoneProperties; -class Server_Player : public Server_ArrowTarget { +class Server_Player : public Server_ArrowTarget, public ServerInfo_User_Container { Q_OBJECT private: class MoveCardCompareFunctor; Server_Game *game; Server_AbstractUserInterface *userInterface; - ServerInfo_User *userInfo; DeckList *deck; QMap zones; QMap counters; @@ -96,7 +96,6 @@ public: bool getSpectator() const { return spectator; } bool getConceded() const { return conceded; } void setConceded(bool _conceded) { conceded = _conceded; } - ServerInfo_User *getUserInfo() const { return userInfo; } DeckList *getDeck() const { return deck; } Server_Game *getGame() const { return game; } const QMap &getZones() const { return zones; } diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index 03251fff..5c779e50 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -448,7 +448,7 @@ Response::ResponseCode Server_ProtocolHandler::cmdGetUserInfo(const Command_GetU else return Response::RespNameNotFound; - re->mutable_user_info()->CopyFrom(infoSource->copyUserInfo(true, userInfo->user_level() & ServerInfo_User::IsModerator)); + re->mutable_user_info()->CopyFrom(infoSource->copyUserInfo(true, false, userInfo->user_level() & ServerInfo_User::IsModerator)); } rc.setResponseExtension(re); diff --git a/common/serverinfo_user_container.cpp b/common/serverinfo_user_container.cpp index 8e50568c..56ce6b67 100644 --- a/common/serverinfo_user_container.cpp +++ b/common/serverinfo_user_container.cpp @@ -30,18 +30,24 @@ void ServerInfo_User_Container::setUserInfo(const ServerInfo_User &_userInfo) userInfo->CopyFrom(_userInfo); } -ServerInfo_User ServerInfo_User_Container::copyUserInfo(bool complete, bool moderatorInfo) const +ServerInfo_User &ServerInfo_User_Container::copyUserInfo(ServerInfo_User &result, bool complete, bool internalInfo, bool sessionInfo) const { - ServerInfo_User result; if (userInfo) { result.CopyFrom(*userInfo); - if (!moderatorInfo) { + if (!sessionInfo) { result.clear_session_id(); result.clear_address(); - result.clear_id(); } + if (!internalInfo) + result.clear_id(); if (!complete) result.clear_avatar_bmp(); } - return result; + return result; +} + +ServerInfo_User ServerInfo_User_Container::copyUserInfo(bool complete, bool internalInfo, bool sessionInfo) const +{ + ServerInfo_User result; + return copyUserInfo(result, complete, internalInfo, sessionInfo); } diff --git a/common/serverinfo_user_container.h b/common/serverinfo_user_container.h index 1786bd4d..6cf87ab1 100644 --- a/common/serverinfo_user_container.h +++ b/common/serverinfo_user_container.h @@ -13,7 +13,8 @@ public: virtual ~ServerInfo_User_Container(); ServerInfo_User *getUserInfo() const { return userInfo; } void setUserInfo(const ServerInfo_User &_userInfo); - ServerInfo_User copyUserInfo(bool complete, bool moderatorInfo = false) const; + ServerInfo_User ©UserInfo(ServerInfo_User &result, bool complete, bool internalInfo = false, bool sessionInfo = false) const; + ServerInfo_User copyUserInfo(bool complete, bool internalInfo = false, bool sessionInfo = false) const; }; #endif