From: <geo...@us...> - 2013-11-27 18:38:33
|
Revision: 6542 http://sourceforge.net/p/freeorion/code/6542 Author: geoffthemedio Date: 2013-11-27 18:38:30 +0000 (Wed, 27 Nov 2013) Log Message: ----------- Passing galaxy setup info between server and clients in game start messages. Modified Paths: -------------- trunk/FreeOrion/client/AI/AIClientApp.cpp trunk/FreeOrion/client/ClientApp.cpp trunk/FreeOrion/client/ClientApp.h trunk/FreeOrion/client/human/HumanClientFSM.cpp trunk/FreeOrion/network/Message.cpp trunk/FreeOrion/network/Message.h trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/client/AI/AIClientApp.cpp =================================================================== --- trunk/FreeOrion/client/AI/AIClientApp.cpp 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/client/AI/AIClientApp.cpp 2013-11-27 18:38:30 UTC (rev 6542) @@ -156,7 +156,8 @@ m_current_turn, m_empires, m_universe, GetSpeciesManager(), GetCombatLogManager(), m_player_info, m_orders, loaded_game_data, ui_data_available, - ui_data, state_string_available, save_state_string); + ui_data, state_string_available, save_state_string, + m_galaxy_setup_data); Logger().debugStream() << "Extracted GameStart message for turn: " << m_current_turn << " with empire: " << m_empire_id; Modified: trunk/FreeOrion/client/ClientApp.cpp =================================================================== --- trunk/FreeOrion/client/ClientApp.cpp 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/client/ClientApp.cpp 2013-11-27 18:38:30 UTC (rev 6542) @@ -38,6 +38,15 @@ Universe& ClientApp::GetUniverse() { return m_universe; } +const Universe& ClientApp::GetUniverse() const +{ return m_universe; } + +GalaxySetupData& ClientApp::GetGalaxySetupData() +{ return m_galaxy_setup_data; } + +const GalaxySetupData& ClientApp::GetGalaxySetupData() const +{ return m_galaxy_setup_data; } + EmpireManager& ClientApp::Empires() { return m_empires; } Modified: trunk/FreeOrion/client/ClientApp.h =================================================================== --- trunk/FreeOrion/client/ClientApp.h 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/client/ClientApp.h 2013-11-27 18:38:30 UTC (rev 6542) @@ -7,6 +7,7 @@ #include "../universe/Universe.h" #include "../util/OrderSet.h" #include "../util/AppInterface.h" +#include "../util/MultiplayerCommon.h" /** The abstract base class for the application framework classes AIClientApp * and HumanClientApp. The static functions are designed to give both types @@ -29,22 +30,26 @@ int EmpirePlayerID(int empire_id) const; ///< returns the player ID for the player playing the empire with ID \a empire_id const std::map<int, PlayerInfo>& Players() const; ///< returns the map, indexed by player ID, of PlayerInfo structs containing info about players in the game - //@} - Universe& GetUniverse(); ///< returns client's local copy of Universe - const OrderSet& Orders() const; ///< returns Order set for this client's player - const CombatOrderSet& CombatOrders() const;///< returns CombatOrder set for this client's player - const ClientNetworking& Networking() const; ///< returns the networking object for this client's player + const Universe& GetUniverse() const; ///< returns client's local copy of Universe + const GalaxySetupData& GetGalaxySetupData() const; ///< returns the settings used in creating the current Universe + const OrderSet& Orders() const; ///< returns Order set for this client's player + const CombatOrderSet& CombatOrders() const; ///< returns CombatOrder set for this client's player + const ClientNetworking& Networking() const; ///< returns the networking object for this client's player const Networking::ClientType GetEmpireClientType(int empire_id) const; ///< returns the networking client type for the given empire_id const Networking::ClientType GetPlayerClientType(int player_id) const; ///< returns the networking client type for the given player_id const Networking::ClientType GetClientType() const; ///< returns the networking client type for this client's player + + std::string GetVisibleObjectName(TemporaryPtr<const UniverseObject> object); //@} /** \name Mutators */ //@{ - virtual void StartTurn(); ///< encodes order sets and sends turn orders message - virtual void SendCombatSetup(); ///< encodes and sends combat setup orders message - virtual void StartCombatTurn(); ///< encodes combat order sets and sends combat turn orders message + virtual void StartTurn(); ///< encodes order sets and sends turn orders message + virtual void SendCombatSetup(); ///< encodes and sends combat setup orders message + virtual void StartCombatTurn(); ///< encodes combat order sets and sends combat turn orders message + Universe& GetUniverse(); ///< returns client's local copy of Universe + GalaxySetupData& GetGalaxySetupData(); EmpireManager& Empires(); ///< returns the set of known Empires TemporaryPtr<UniverseObject>GetUniverseObject(int object_id); ObjectMap& EmpireKnownObjects(int empire_id); ///< returns the server's map for known objects of specified empire. */ @@ -58,8 +63,6 @@ void SetCurrentTurn(int turn); ///< sets the current game turn void SetSinglePlayerGame(bool sp = true); ///< sets whether the current game is single player (sp = true) or multiplayer (sp = false) - std::string GetVisibleObjectName(TemporaryPtr<const UniverseObject> object); - /** returns a universe object ID which can be used for new objects created by the client. Can return INVALID_OBJECT_ID if an ID cannot be created. */ int GetNewObjectID(); @@ -76,14 +79,15 @@ static ClientApp* GetApp(); ///< returns the singleton ClientApp object protected: - Universe m_universe; - EmpireManager m_empires; - OrderSet m_orders; - CombatOrderSet m_combat_orders; - ClientNetworking m_networking; - int m_empire_id; - int m_current_turn; - std::map<int, PlayerInfo> m_player_info; ///< indexed by player id, contains info about all players in the game + Universe m_universe; + GalaxySetupData m_galaxy_setup_data; + EmpireManager m_empires; + OrderSet m_orders; + CombatOrderSet m_combat_orders; + ClientNetworking m_networking; + int m_empire_id; + int m_current_turn; + std::map<int, PlayerInfo> m_player_info; ///< indexed by player id, contains info about all players in the game private: const ClientApp& operator=(const ClientApp&); // disabled Modified: trunk/FreeOrion/client/human/HumanClientFSM.cpp =================================================================== --- trunk/FreeOrion/client/human/HumanClientFSM.cpp 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/client/human/HumanClientFSM.cpp 2013-11-27 18:38:30 UTC (rev 6542) @@ -530,7 +530,8 @@ current_turn, Empires(), GetUniverse(), GetSpeciesManager(), GetCombatLogManager(), Client().Players(), orders, loaded_game_data, ui_data_available, - ui_data, save_state_string_available, save_state_string); + ui_data, save_state_string_available, save_state_string, + Client().GetGalaxySetupData()); Logger().debugStream() << "Extracted GameStart message for turn: " << current_turn << " with empire: " << empire_id; Modified: trunk/FreeOrion/network/Message.cpp =================================================================== --- trunk/FreeOrion/network/Message.cpp 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/network/Message.cpp 2013-11-27 18:38:30 UTC (rev 6542) @@ -282,7 +282,8 @@ int current_turn, const EmpireManager& empires, const Universe& universe, const SpeciesManager& species, const CombatLogManager& combat_logs, - const std::map<int, PlayerInfo>& players) + const std::map<int, PlayerInfo>& players, + const GalaxySetupData& galaxy_setup_data) { std::ostringstream os; { @@ -298,6 +299,7 @@ bool loaded_game_data = false; oa << BOOST_SERIALIZATION_NVP(players) << BOOST_SERIALIZATION_NVP(loaded_game_data); + oa << BOOST_SERIALIZATION_NVP(galaxy_setup_data); } return Message(Message::GAME_START, Networking::INVALID_PLAYER_ID, player_id, os.str()); } @@ -307,7 +309,8 @@ const Universe& universe, const SpeciesManager& species, const CombatLogManager& combat_logs, const std::map<int, PlayerInfo>& players, - const OrderSet& orders, const SaveGameUIData* ui_data) + const OrderSet& orders, const SaveGameUIData* ui_data, + const GalaxySetupData& galaxy_setup_data) { std::ostringstream os; { @@ -330,6 +333,7 @@ oa << boost::serialization::make_nvp("ui_data", *ui_data); bool save_state_string_available = false; oa << BOOST_SERIALIZATION_NVP(save_state_string_available); + oa << BOOST_SERIALIZATION_NVP(galaxy_setup_data); } return Message(Message::GAME_START, Networking::INVALID_PLAYER_ID, player_id, os.str()); } @@ -339,7 +343,8 @@ const Universe& universe, const SpeciesManager& species, const CombatLogManager& combat_logs, const std::map<int, PlayerInfo>& players, - const OrderSet& orders, const std::string* save_state_string) + const OrderSet& orders, const std::string* save_state_string, + const GalaxySetupData& galaxy_setup_data) { std::ostringstream os; { @@ -362,6 +367,7 @@ oa << BOOST_SERIALIZATION_NVP(save_state_string_available); if (save_state_string_available) oa << boost::serialization::make_nvp("save_state_string", *save_state_string); + oa << BOOST_SERIALIZATION_NVP(galaxy_setup_data); } return Message(Message::GAME_START, Networking::INVALID_PLAYER_ID, player_id, os.str()); } @@ -676,7 +682,7 @@ std::map<int, PlayerInfo>& players, OrderSet& orders, bool& loaded_game_data, bool& ui_data_available, SaveGameUIData& ui_data, bool& save_state_string_available, - std::string& save_state_string) + std::string& save_state_string, GalaxySetupData& galaxy_setup_data) { try { std::istringstream is(msg.Text()); @@ -712,6 +718,8 @@ ui_data_available = false; save_state_string_available = false; } + ia >> BOOST_SERIALIZATION_NVP(galaxy_setup_data); + } catch (const std::exception& err) { Logger().errorStream() << "ExtractMessageData(const Message& msg, bool& single_player_game, int& empire_id, " << "int& current_turn, EmpireManager& empires, Universe& universe, " Modified: trunk/FreeOrion/network/Message.h =================================================================== --- trunk/FreeOrion/network/Message.h 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/network/Message.h 2013-11-27 18:38:30 UTC (rev 6542) @@ -26,6 +26,7 @@ class OrderSet; struct PlayerInfo; struct SaveGameUIData; +struct GalaxySetupData; struct SinglePlayerSetupData; class ShipDesign; class System; @@ -201,25 +202,28 @@ /** creates a GAME_START message. Contains the initial game state visible to player \a player_id.*/ FO_COMMON_API Message GameStartMessage(int player_id, bool single_player_game, int empire_id, int current_turn, - const EmpireManager& empires, const Universe& universe, - const SpeciesManager& species, const CombatLogManager& combat_logs, - const std::map<int, PlayerInfo>& players); + const EmpireManager& empires, const Universe& universe, + const SpeciesManager& species, const CombatLogManager& combat_logs, + const std::map<int, PlayerInfo>& players, + const GalaxySetupData& galaxy_setup_data); /** creates a GAME_START message. Contains the initial game state visible to * player \a player_id. Also includes data loaded from a saved game. */ FO_COMMON_API Message GameStartMessage(int player_id, bool single_player_game, int empire_id, int current_turn, - const EmpireManager& empires, const Universe& universe, - const SpeciesManager& species, const CombatLogManager& combat_logs, - const std::map<int, PlayerInfo>& players, const OrderSet& orders, - const SaveGameUIData* ui_data); + const EmpireManager& empires, const Universe& universe, + const SpeciesManager& species, const CombatLogManager& combat_logs, + const std::map<int, PlayerInfo>& players, const OrderSet& orders, + const SaveGameUIData* ui_data, + const GalaxySetupData& galaxy_setup_data); /** creates a GAME_START message. Contains the initial game state visible to * player \a player_id. Also includes state string loaded from a saved game. */ FO_COMMON_API Message GameStartMessage(int player_id, bool single_player_game, int empire_id, int current_turn, - const EmpireManager& empires, const Universe& universe, - const SpeciesManager& species, const CombatLogManager& combat_logs, - const std::map<int, PlayerInfo>& players, const OrderSet& orders, - const std::string* save_state_string); + const EmpireManager& empires, const Universe& universe, + const SpeciesManager& species, const CombatLogManager& combat_logs, + const std::map<int, PlayerInfo>& players, const OrderSet& orders, + const std::string* save_state_string, + const GalaxySetupData& galaxy_setup_data); /** creates a HOST_SP_GAME acknowledgement message. The \a player_id is the ID * of the receiving player. This message should only be sent by the server.*/ @@ -243,9 +247,11 @@ FO_COMMON_API Message PlayerStatusMessage(int player_id, int about_player_id, Message::PlayerStatus player_status); /** creates a TURN_UPDATE message. */ -FO_COMMON_API Message TurnUpdateMessage(int player_id, int empire_id, int current_turn, const EmpireManager& empires, - const Universe& universe, const SpeciesManager& species, - const CombatLogManager& combat_logs, const std::map<int, PlayerInfo>& players); +FO_COMMON_API Message TurnUpdateMessage(int player_id, int empire_id, int current_turn, + const EmpireManager& empires, const Universe& universe, + const SpeciesManager& species, + const CombatLogManager& combat_logs, + const std::map<int, PlayerInfo>& players); /** create a TURN_PARTIAL_UPDATE message. */ FO_COMMON_API Message TurnPartialUpdateMessage(int player_id, int empire_id, const Universe& universe); @@ -373,12 +379,13 @@ FO_COMMON_API void ExtractMessageData(const Message& msg, MultiplayerLobbyData& lobby_data); -FO_COMMON_API void ExtractMessageData(const Message& msg, bool& single_player_game, int& empire_id, int& current_turn, - EmpireManager& empires, Universe& universe, SpeciesManager& species, - CombatLogManager& combat_logs, std::map<int, PlayerInfo>& players, - OrderSet& orders, bool& loaded_game_data, bool& ui_data_available, - SaveGameUIData& ui_data, bool& save_state_string_available, - std::string& save_state_string); +FO_COMMON_API void ExtractMessageData(const Message& msg, bool& single_player_game, int& empire_id, + int& current_turn, EmpireManager& empires, Universe& universe, + SpeciesManager& species, CombatLogManager& combat_logs, + std::map<int, PlayerInfo>& players, OrderSet& orders, + bool& loaded_game_data, bool& ui_data_available, + SaveGameUIData& ui_data, bool& save_state_string_available, + std::string& save_state_string, GalaxySetupData& galaxy_setup_data); FO_COMMON_API void ExtractMessageData(const Message& msg, std::string& player_name, Networking::ClientType& client_type); Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2013-11-26 09:10:00 UTC (rev 6541) +++ trunk/FreeOrion/server/ServerApp.cpp 2013-11-27 18:38:30 UTC (rev 6542) @@ -700,7 +700,7 @@ empire_id, m_current_turn, m_empires, m_universe, GetSpeciesManager(), GetCombatLogManager(), - player_info_map)); + player_info_map, m_galaxy_setup_data)); } } @@ -1118,13 +1118,15 @@ player_connection->SendMessage(GameStartMessage(player_id, m_single_player_game, empire_id, m_current_turn, m_empires, m_universe, GetSpeciesManager(), GetCombatLogManager(), - player_info_map, *orders, sss)); + player_info_map, *orders, sss, + m_galaxy_setup_data)); } else if (client_type == Networking::CLIENT_TYPE_HUMAN_PLAYER) { player_connection->SendMessage(GameStartMessage(player_id, m_single_player_game, empire_id, m_current_turn, m_empires, m_universe, GetSpeciesManager(), GetCombatLogManager(), - player_info_map, *orders, psgd.m_ui_data.get())); + player_info_map, *orders, psgd.m_ui_data.get(), + m_galaxy_setup_data)); } else if (client_type == Networking::CLIENT_TYPE_HUMAN_OBSERVER || client_type == Networking::CLIENT_TYPE_HUMAN_MODERATOR) @@ -1133,7 +1135,7 @@ player_connection->SendMessage(GameStartMessage(player_id, m_single_player_game, ALL_EMPIRES, m_current_turn, m_empires, m_universe, GetSpeciesManager(), GetCombatLogManager(), - player_info_map)); + player_info_map, m_galaxy_setup_data)); } else { Logger().errorStream() << "ServerApp::CommonGameInit unsupported client type: skipping game start message."; } |