Skip to content

Commit

Permalink
wesnothd: add game::get_player_versions()
Browse files Browse the repository at this point in the history
helper function to get the minimum/mximum used client version.
  • Loading branch information
gfgtdf committed Nov 17, 2018
1 parent b51c7df commit 2de6b80
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/server/game.cpp
Expand Up @@ -123,6 +123,7 @@ game::game(player_connections& player_connections,
, replay_save_path_(replay_save_path)
, rng_()
, last_choice_request_id_(-1) /* or maybe 0 ? it shouldn't matter*/
, player_versions_(boost::none)
{
assert(owner_);
players_.push_back(owner_);
Expand Down Expand Up @@ -452,6 +453,7 @@ void game::reset_sides()

void game::update_side_data()
{
player_versions_ = boost::none;
// Added by iceiceice: since level_ will now reflect how an observer views the replay start
// position and not the current position, the sides_, side_controllers_, players_ info should
// not be updated from the level_ after the game has started. Controller changes are now stored
Expand Down Expand Up @@ -524,6 +526,7 @@ void game::update_side_data()

void game::transfer_side_control(const socket_ptr& sock, const simple_wml::node& cfg)
{
player_versions_ = boost::none;
DBG_GAME << "transfer_side_control...\n";

if(!is_player(sock) && sock != owner_) {
Expand Down Expand Up @@ -621,6 +624,7 @@ void game::transfer_side_control(const socket_ptr& sock, const simple_wml::node&
void game::change_controller(
const size_t side_index, const socket_ptr& sock, const std::string& player_name, const bool player_left)
{
player_versions_ = boost::none;
DBG_GAME << __func__ << "...\n";

const std::string& side = lexical_cast_default<std::string, size_t>(side_index + 1);
Expand Down Expand Up @@ -1377,6 +1381,7 @@ void game::update_turn_data()
// maybe return a string with an error message.
bool game::add_player(const socket_ptr& player, bool observer)
{
player_versions_ = boost::none;
if(is_member(player)) {
ERR_GAME << "ERROR: Player is already in this game. (socket: " << player << ")\n";
return false;
Expand Down Expand Up @@ -1461,6 +1466,7 @@ bool game::add_player(const socket_ptr& player, bool observer)

bool game::remove_player(const socket_ptr& player, const bool disconnect, const bool destruct)
{
player_versions_ = boost::none;
if(!is_member(player)) {
ERR_GAME << "ERROR: User is not in this game. (socket: " << player << ")\n";
return false;
Expand Down Expand Up @@ -2037,4 +2043,24 @@ void game::send_server_message(const char* message, const socket_ptr& sock, simp
send_to_player(sock, doc);
}
}
const game::version_range& game::get_player_versions() const
{
if(!player_versions_) {
for(const socket_ptr& user_ptr : all_game_users()) {
const auto pl = player_connections_.find(user_ptr);
if(pl != player_connections_.end()) {
version_info ver(pl->info().version());
if(player_versions_) {
player_versions_->oldest = std::min(player_versions_->oldest, ver);
player_versions_->newest = std::max(player_versions_->newest, ver);
}
else {
player_versions_ = version_range{ver, ver};
}
}
}
}
assert(player_versions_);
return *player_versions_;
}
} // namespace wesnothd
6 changes: 6 additions & 0 deletions src/server/game.hpp
Expand Up @@ -19,8 +19,10 @@
#include "player_connection.hpp"
#include "simple_wml.hpp"
#include "utils/make_enum.hpp"
#include "game_version.hpp"

#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/optional.hpp>

#include <map>
#include <vector>
Expand Down Expand Up @@ -434,6 +436,8 @@ class game
/** Function to log when we don't find a connection in player_info_. */
void missing_user(socket_ptr socket, const std::string& func) const;

struct version_range { version_info oldest; version_info newest; };
const version_range& get_player_versions() const;
/** calculates the initial value for sides_, side_controllerds_, nsides_*/
void reset_sides();

Expand Down Expand Up @@ -516,6 +520,8 @@ class game
/** A wrapper for mersenne twister rng which generates randomness for this game */
randomness::mt_rng rng_;
int last_choice_request_id_;
mutable boost::optional<version_range> player_versions_;

};

} // namespace wesnothd

0 comments on commit 2de6b80

Please sign in to comment.