pass const struct by ref instead of by value

cppcheck (via Codacy) reports the lowest-quality C++ is src/sever/game.hpp with 41 warnings.

There is no need to copy the const socket_ptr struct all over place to pass-by-value. It's const, so we can pass-by-reference and save time and memory.
This commit is contained in:
Gregory A Lundberg 2018-01-24 14:53:04 -06:00
parent 99051100a4
commit 36e92900c3
No known key found for this signature in database
GPG key ID: 149484078AE8AE9E
2 changed files with 91 additions and 91 deletions

View file

@ -92,7 +92,7 @@ void game::missing_user(socket_ptr /*socket*/, const std::string& func) const
} }
game::game(player_connections& player_connections, game::game(player_connections& player_connections,
socket_ptr host, const socket_ptr& host,
const std::string& name, const std::string& name,
bool save_replays, bool save_replays,
const std::string& replay_save_path) const std::string& replay_save_path)
@ -170,12 +170,12 @@ bool game::registered_users_only() const
return get_multiplayer(level_.root())["registered_users_only"].to_bool(true); return get_multiplayer(level_.root())["registered_users_only"].to_bool(true);
} }
bool game::is_observer(const socket_ptr player) const bool game::is_observer(const socket_ptr& player) const
{ {
return std::find(observers_.begin(), observers_.end(), player) != observers_.end(); return std::find(observers_.begin(), observers_.end(), player) != observers_.end();
} }
bool game::is_muted_observer(const socket_ptr player) const bool game::is_muted_observer(const socket_ptr& player) const
{ {
if(!is_observer(player)) { if(!is_observer(player)) {
return false; return false;
@ -188,7 +188,7 @@ bool game::is_muted_observer(const socket_ptr player) const
return std::find(muted_observers_.begin(), muted_observers_.end(), player) != muted_observers_.end(); return std::find(muted_observers_.begin(), muted_observers_.end(), player) != muted_observers_.end();
} }
bool game::is_player(const socket_ptr player) const bool game::is_player(const socket_ptr& player) const
{ {
return std::find(players_.begin(), players_.end(), player) != players_.end(); return std::find(players_.begin(), players_.end(), player) != players_.end();
} }
@ -210,7 +210,7 @@ std::string describe_turns(int turn, int num_turns)
} // anon namespace } // anon namespace
std::string game::username(const socket_ptr player) const std::string game::username(const socket_ptr& player) const
{ {
const auto iter = player_connections_.find(player); const auto iter = player_connections_.find(player);
if(iter != player_connections_.end()) { if(iter != player_connections_.end()) {
@ -306,7 +306,7 @@ void game::perform_controller_tweaks()
// not to send them at all, although not if it complicates the server code. // not to send them at all, although not if it complicates the server code.
} }
void game::start_game(const socket_ptr starter) void game::start_game(const socket_ptr& starter)
{ {
const simple_wml::node::child_list& sides = get_sides_list(); const simple_wml::node::child_list& sides = get_sides_list();
DBG_GAME << "****\n Starting game. sides = " << std::endl; DBG_GAME << "****\n Starting game. sides = " << std::endl;
@ -413,7 +413,7 @@ bool game::send_taken_side(simple_wml::document& cfg, const simple_wml::node* si
return true; return true;
} }
bool game::take_side(const socket_ptr user) bool game::take_side(const socket_ptr& user)
{ {
DBG_GAME << "take_side...\n"; DBG_GAME << "take_side...\n";
@ -537,7 +537,7 @@ void game::update_side_data()
DBG_GAME << debug_player_info(); DBG_GAME << debug_player_info();
} }
void game::transfer_side_control(const socket_ptr sock, const simple_wml::node& cfg) void game::transfer_side_control(const socket_ptr& sock, const simple_wml::node& cfg)
{ {
DBG_GAME << "transfer_side_control...\n"; DBG_GAME << "transfer_side_control...\n";
@ -561,7 +561,7 @@ void game::transfer_side_control(const socket_ptr sock, const simple_wml::node&
} }
const simple_wml::string_span& newplayer_name = cfg["player"]; const simple_wml::string_span& newplayer_name = cfg["player"];
const socket_ptr old_player = sides_[side_num - 1]; const socket_ptr& old_player = sides_[side_num - 1];
const auto oldplayer = player_connections_.find(old_player); const auto oldplayer = player_connections_.find(old_player);
if(oldplayer == player_connections_.end()) { if(oldplayer == player_connections_.end()) {
missing_user(old_player, __func__); missing_user(old_player, __func__);
@ -634,7 +634,7 @@ void game::transfer_side_control(const socket_ptr sock, const simple_wml::node&
} }
void game::change_controller( void game::change_controller(
const size_t side_index, const socket_ptr sock, const std::string& player_name, const bool player_left) const size_t side_index, const socket_ptr& sock, const std::string& player_name, const bool player_left)
{ {
DBG_GAME << __func__ << "...\n"; DBG_GAME << __func__ << "...\n";
@ -718,7 +718,7 @@ bool game::describe_slots()
} }
} }
bool game::player_is_banned(const socket_ptr sock) const bool game::player_is_banned(const socket_ptr& sock) const
{ {
auto ban = std::find(bans_.begin(), bans_.end(), client_address(sock)); auto ban = std::find(bans_.begin(), bans_.end(), client_address(sock));
return ban != bans_.end(); return ban != bans_.end();
@ -734,7 +734,7 @@ void game::mute_all_observers()
} }
} }
void game::send_muted_observers(const socket_ptr user) const void game::send_muted_observers(const socket_ptr& user) const
{ {
if(all_observers_muted_) { if(all_observers_muted_) {
send_server_message("All observers are muted.", user); send_server_message("All observers are muted.", user);
@ -746,7 +746,7 @@ void game::send_muted_observers(const socket_ptr user) const
send_server_message("Muted observers: " + muted_nicks, user); send_server_message("Muted observers: " + muted_nicks, user);
} }
void game::mute_observer(const simple_wml::node& mute, const socket_ptr muter) void game::mute_observer(const simple_wml::node& mute, const socket_ptr& muter)
{ {
if(muter != owner_) { if(muter != owner_) {
send_server_message("You cannot mute: not the game host.", muter); send_server_message("You cannot mute: not the game host.", muter);
@ -759,7 +759,7 @@ void game::mute_observer(const simple_wml::node& mute, const socket_ptr muter)
return; return;
} }
const socket_ptr user = find_user(username); const socket_ptr& user = find_user(username);
/** /**
* @todo FIXME: Maybe rather save muted nicks as a set of strings and * @todo FIXME: Maybe rather save muted nicks as a set of strings and
@ -788,7 +788,7 @@ void game::mute_observer(const simple_wml::node& mute, const socket_ptr muter)
send_and_record_server_message(username.to_string() + " has been muted."); send_and_record_server_message(username.to_string() + " has been muted.");
} }
void game::unmute_observer(const simple_wml::node& unmute, const socket_ptr unmuter) void game::unmute_observer(const simple_wml::node& unmute, const socket_ptr& unmuter)
{ {
if(unmuter != owner_) { if(unmuter != owner_) {
send_server_message("You cannot unmute: not the game host.", unmuter); send_server_message("You cannot unmute: not the game host.", unmuter);
@ -802,7 +802,7 @@ void game::unmute_observer(const simple_wml::node& unmute, const socket_ptr unmu
return; return;
} }
const socket_ptr user = find_user(username); const socket_ptr& user = find_user(username);
if(!user || !is_observer(user)) { if(!user || !is_observer(user)) {
send_server_message("Observer '" + username.to_string() + "' not found.", unmuter); send_server_message("Observer '" + username.to_string() + "' not found.", unmuter);
return; return;
@ -820,13 +820,13 @@ void game::unmute_observer(const simple_wml::node& unmute, const socket_ptr unmu
send_and_record_server_message(username.to_string() + " has been unmuted."); send_and_record_server_message(username.to_string() + " has been unmuted.");
} }
void game::send_leave_game(socket_ptr user) const void game::send_leave_game(const socket_ptr& user) const
{ {
static simple_wml::document leave_game("[leave_game]\n[/leave_game]\n", simple_wml::INIT_COMPRESSED); static simple_wml::document leave_game("[leave_game]\n[/leave_game]\n", simple_wml::INIT_COMPRESSED);
send_to_player(user, leave_game); send_to_player(user, leave_game);
} }
socket_ptr game::kick_member(const simple_wml::node& kick, const socket_ptr kicker) socket_ptr game::kick_member(const simple_wml::node& kick, const socket_ptr& kicker)
{ {
if(kicker != owner_) { if(kicker != owner_) {
send_server_message("You cannot kick: not the game host", kicker); send_server_message("You cannot kick: not the game host", kicker);
@ -834,7 +834,7 @@ socket_ptr game::kick_member(const simple_wml::node& kick, const socket_ptr kick
} }
const simple_wml::string_span& username = kick["username"]; const simple_wml::string_span& username = kick["username"];
const socket_ptr user = find_user(username); const socket_ptr& user = find_user(username);
if(!user || !is_member(user)) { if(!user || !is_member(user)) {
send_server_message("'" + username.to_string() + "' is not a member of this game.", kicker); send_server_message("'" + username.to_string() + "' is not a member of this game.", kicker);
@ -858,7 +858,7 @@ socket_ptr game::kick_member(const simple_wml::node& kick, const socket_ptr kick
return user; return user;
} }
socket_ptr game::ban_user(const simple_wml::node& ban, const socket_ptr banner) socket_ptr game::ban_user(const simple_wml::node& ban, const socket_ptr& banner)
{ {
if(banner != owner_) { if(banner != owner_) {
send_server_message("You cannot ban: not the game host", banner); send_server_message("You cannot ban: not the game host", banner);
@ -866,7 +866,7 @@ socket_ptr game::ban_user(const simple_wml::node& ban, const socket_ptr banner)
} }
const simple_wml::string_span& username = ban["username"]; const simple_wml::string_span& username = ban["username"];
const socket_ptr user = find_user(username); const socket_ptr& user = find_user(username);
if(!user) { if(!user) {
send_server_message("User '" + username.to_string() + "' not found.", banner); send_server_message("User '" + username.to_string() + "' not found.", banner);
@ -899,7 +899,7 @@ socket_ptr game::ban_user(const simple_wml::node& ban, const socket_ptr banner)
return socket_ptr(); return socket_ptr();
} }
void game::unban_user(const simple_wml::node& unban, const socket_ptr unbanner) void game::unban_user(const simple_wml::node& unban, const socket_ptr& unbanner)
{ {
if(unbanner != owner_) { if(unbanner != owner_) {
send_server_message("You cannot unban: not the game host.", unbanner); send_server_message("You cannot unban: not the game host.", unbanner);
@ -907,7 +907,7 @@ void game::unban_user(const simple_wml::node& unban, const socket_ptr unbanner)
} }
const simple_wml::string_span& username = unban["username"]; const simple_wml::string_span& username = unban["username"];
const socket_ptr user = find_user(username); const socket_ptr& user = find_user(username);
if(!user) { if(!user) {
send_server_message("User '" + username.to_string() + "' not found.", unbanner); send_server_message("User '" + username.to_string() + "' not found.", unbanner);
@ -928,7 +928,7 @@ void game::unban_user(const simple_wml::node& unban, const socket_ptr unbanner)
send_and_record_server_message(username.to_string() + " has been unbanned."); send_and_record_server_message(username.to_string() + " has been unbanned.");
} }
void game::process_message(simple_wml::document& data, const socket_ptr user) void game::process_message(simple_wml::document& data, const socket_ptr& user)
{ {
if(!owner_) { if(!owner_) {
ERR_GAME << "No owner in game::process_message" << std::endl; ERR_GAME << "No owner in game::process_message" << std::endl;
@ -944,7 +944,7 @@ void game::process_message(simple_wml::document& data, const socket_ptr user)
send_data(data, user, "game message"); send_data(data, user, "game message");
} }
bool game::is_legal_command(const simple_wml::node& command, const socket_ptr user) bool game::is_legal_command(const simple_wml::node& command, const socket_ptr& user)
{ {
const bool is_player = this->is_player(user); const bool is_player = this->is_player(user);
const bool is_host = user == owner_; const bool is_host = user == owner_;
@ -996,7 +996,7 @@ bool game::is_legal_command(const simple_wml::node& command, const socket_ptr us
return false; return false;
} }
bool game::process_turn(simple_wml::document& data, const socket_ptr user) bool game::process_turn(simple_wml::document& data, const socket_ptr& user)
{ {
// DBG_GAME << "processing commands: '" << cfg << "'\n"; // DBG_GAME << "processing commands: '" << cfg << "'\n";
if(!started_) { if(!started_) {
@ -1202,7 +1202,7 @@ void game::handle_controller_choice(const simple_wml::node& req)
record_data(mdata); record_data(mdata);
} }
void game::handle_choice(const simple_wml::node& data, const socket_ptr user) void game::handle_choice(const simple_wml::node& data, const socket_ptr& user)
{ {
// note, that during end turn events, it's side=1 for the server but side= side_count() on the clients. // note, that during end turn events, it's side=1 for the server but side= side_count() on the clients.
@ -1236,7 +1236,7 @@ void game::handle_choice(const simple_wml::node& data, const socket_ptr user)
} }
} }
void game::process_whiteboard(simple_wml::document& data, const socket_ptr user) void game::process_whiteboard(simple_wml::document& data, const socket_ptr& user)
{ {
if(!started_ || !is_player(user)) { if(!started_ || !is_player(user)) {
return; return;
@ -1263,7 +1263,7 @@ void game::process_whiteboard(simple_wml::document& data, const socket_ptr user)
send_data_sides(data, to_sides, user, "whiteboard"); send_data_sides(data, to_sides, user, "whiteboard");
} }
void game::process_change_turns_wml(simple_wml::document& data, const socket_ptr user) void game::process_change_turns_wml(simple_wml::document& data, const socket_ptr& user)
{ {
if(!started_ || !is_player(user)) { if(!started_ || !is_player(user)) {
return; return;
@ -1318,7 +1318,7 @@ bool game::end_turn()
///@todo differentiate between "observers not allowed" and "player already in the game" errors. ///@todo differentiate between "observers not allowed" and "player already in the game" errors.
// maybe return a string with an error message. // maybe return a string with an error message.
bool game::add_player(const socket_ptr player, bool observer) bool game::add_player(const socket_ptr& player, bool observer)
{ {
if(is_member(player)) { if(is_member(player)) {
ERR_GAME << "ERROR: Player is already in this game. (socket: " << player << ")\n"; ERR_GAME << "ERROR: Player is already in this game. (socket: " << player << ")\n";
@ -1402,7 +1402,7 @@ bool game::add_player(const socket_ptr player, bool observer)
return true; return true;
} }
bool game::remove_player(const socket_ptr player, const bool disconnect, const bool destruct) bool game::remove_player(const socket_ptr& player, const bool disconnect, const bool destruct)
{ {
if(!is_member(player)) { if(!is_member(player)) {
ERR_GAME << "ERROR: User is not in this game. (socket: " << player << ")\n"; ERR_GAME << "ERROR: User is not in this game. (socket: " << player << ")\n";
@ -1511,7 +1511,7 @@ bool game::remove_player(const socket_ptr player, const bool disconnect, const b
return false; return false;
} }
void game::send_user_list(const socket_ptr exclude) const void game::send_user_list(const socket_ptr& exclude) const
{ {
// If the game hasn't started yet, then send all players a list of the users in the game. // If the game hasn't started yet, then send all players a list of the users in the game.
if(started_ /*|| description_ == nullptr*/) { if(started_ /*|| description_ == nullptr*/) {
@ -1538,7 +1538,7 @@ void game::send_user_list(const socket_ptr exclude) const
send_data(cfg, exclude); send_data(cfg, exclude);
} }
void game::load_next_scenario(const socket_ptr user) void game::load_next_scenario(const socket_ptr& user)
{ {
send_server_message_to_all(player_connections_.find(user)->info().name() + " advances to the next scenario", user); send_server_message_to_all(player_connections_.find(user)->info().name() + " advances to the next scenario", user);
@ -1588,7 +1588,7 @@ void game::load_next_scenario(const socket_ptr user)
send_observerjoins(user); send_observerjoins(user);
} }
void game::send_data(simple_wml::document& data, const socket_ptr exclude, std::string /*packet_type*/) const void game::send_data(simple_wml::document& data, const socket_ptr& exclude, std::string /*packet_type*/) const
{ {
send_to_players(data, all_game_users(), exclude); send_to_players(data, all_game_users(), exclude);
} }
@ -1615,7 +1615,7 @@ struct controls_side_helper
void game::send_data_sides(simple_wml::document& data, void game::send_data_sides(simple_wml::document& data,
const simple_wml::string_span& sides, const simple_wml::string_span& sides,
const socket_ptr exclude, const socket_ptr& exclude,
std::string /*packet_type*/) const std::string /*packet_type*/) const
{ {
std::vector<int> sides_vec = ::split<int>(sides, ::split_conv_impl()); std::vector<int> sides_vec = ::split<int>(sides, ::split_conv_impl());
@ -1630,7 +1630,7 @@ void game::send_data_sides(simple_wml::document& data,
send_to_players(data, filtered_players, exclude); send_to_players(data, filtered_players, exclude);
} }
bool game::controls_side(const std::vector<int>& sides, const socket_ptr player) const bool game::controls_side(const std::vector<int>& sides, const socket_ptr& player) const
{ {
for(int side : sides) { for(int side : sides) {
size_t side_index = side - 1; size_t side_index = side - 1;
@ -1643,7 +1643,7 @@ bool game::controls_side(const std::vector<int>& sides, const socket_ptr player)
return false; return false;
} }
std::string game::has_same_ip(socket_ptr user, bool observer) const std::string game::has_same_ip(const socket_ptr& user, bool observer) const
{ {
const user_vector users = observer ? players_ : all_game_users(); const user_vector users = observer ? players_ : all_game_users();
const std::string ip = client_address(user); const std::string ip = client_address(user);
@ -1662,7 +1662,7 @@ std::string game::has_same_ip(socket_ptr user, bool observer) const
return clones; return clones;
} }
void game::send_observerjoins(const socket_ptr sock) const void game::send_observerjoins(const socket_ptr& sock) const
{ {
for(const socket_ptr& ob : observers_) { for(const socket_ptr& ob : observers_) {
if(ob == sock) { if(ob == sock) {
@ -1682,7 +1682,7 @@ void game::send_observerjoins(const socket_ptr sock) const
} }
} }
void game::send_observerquit(const socket_ptr observer) const void game::send_observerquit(const socket_ptr& observer) const
{ {
simple_wml::document observer_quit; simple_wml::document observer_quit;
@ -1694,7 +1694,7 @@ void game::send_observerquit(const socket_ptr observer) const
send_data(observer_quit, observer); send_data(observer_quit, observer);
} }
void game::send_history(const socket_ptr socket) const void game::send_history(const socket_ptr& socket) const
{ {
if(history_.empty()) { if(history_.empty()) {
return; return;
@ -1916,7 +1916,7 @@ socket_ptr game::find_user(const simple_wml::string_span& name)
} }
} }
void game::send_and_record_server_message(const char* message, const socket_ptr exclude) void game::send_and_record_server_message(const char* message, const socket_ptr& exclude)
{ {
simple_wml::document* doc = new simple_wml::document; simple_wml::document* doc = new simple_wml::document;
send_server_message(message, socket_ptr(), doc); send_server_message(message, socket_ptr(), doc);
@ -1929,14 +1929,14 @@ void game::send_and_record_server_message(const char* message, const socket_ptr
} }
} }
void game::send_server_message_to_all(const char* message, socket_ptr exclude) const void game::send_server_message_to_all(const char* message, const socket_ptr& exclude) const
{ {
simple_wml::document doc; simple_wml::document doc;
send_server_message(message, socket_ptr(), &doc); send_server_message(message, socket_ptr(), &doc);
send_data(doc, exclude, "message"); send_data(doc, exclude, "message");
} }
void game::send_server_message(const char* message, socket_ptr sock, simple_wml::document* docptr) const void game::send_server_message(const char* message, const socket_ptr& sock, simple_wml::document* docptr) const
{ {
simple_wml::document docbuf; simple_wml::document docbuf;
if(docptr == nullptr) { if(docptr == nullptr) {

View file

@ -42,7 +42,7 @@ public:
) )
game(player_connections& player_connections, game(player_connections& player_connections,
socket_ptr host, const socket_ptr& host,
const std::string& name = "", const std::string& name = "",
bool save_replays = false, bool save_replays = false,
const std::string& replay_save_path = ""); const std::string& replay_save_path = "");
@ -59,23 +59,23 @@ public:
return name_; return name_;
} }
bool is_owner(const socket_ptr player) const bool is_owner(const socket_ptr& player) const
{ {
return (player == owner_); return (player == owner_);
} }
bool is_member(const socket_ptr player) const bool is_member(const socket_ptr& player) const
{ {
return is_player(player) || is_observer(player); return is_player(player) || is_observer(player);
} }
bool allow_observers() const; bool allow_observers() const;
bool registered_users_only() const; bool registered_users_only() const;
bool is_observer(const socket_ptr player) const; bool is_observer(const socket_ptr& player) const;
bool is_player(const socket_ptr player) const; bool is_player(const socket_ptr& player) const;
/** Checks whether the connection's ip address is banned. */ /** Checks whether the connection's ip address is banned. */
bool player_is_banned(const socket_ptr player) const; bool player_is_banned(const socket_ptr& player) const;
bool level_init() const bool level_init() const
{ {
@ -141,9 +141,9 @@ public:
* Mute an observer or give a message of all currently muted observers if no * Mute an observer or give a message of all currently muted observers if no
* name is given. * name is given.
*/ */
void mute_observer(const simple_wml::node& mute, const socket_ptr muter); void mute_observer(const simple_wml::node& mute, const socket_ptr& muter);
void unmute_observer(const simple_wml::node& unmute, const socket_ptr unmuter); void unmute_observer(const simple_wml::node& unmute, const socket_ptr& unmuter);
/** /**
* Kick a member by name. * Kick a member by name.
@ -151,7 +151,7 @@ public:
* @return The network handle of the removed member if * @return The network handle of the removed member if
* successful, null pointer otherwise. * successful, null pointer otherwise.
*/ */
socket_ptr kick_member(const simple_wml::node& kick, const socket_ptr kicker); socket_ptr kick_member(const simple_wml::node& kick, const socket_ptr& kicker);
/** /**
* Ban and kick a user by name. * Ban and kick a user by name.
@ -161,16 +161,16 @@ public:
* @return The network handle of the banned player if he * @return The network handle of the banned player if he
* was in this game, null pointer otherwise. * was in this game, null pointer otherwise.
*/ */
socket_ptr ban_user(const simple_wml::node& ban, const socket_ptr banner); socket_ptr ban_user(const simple_wml::node& ban, const socket_ptr& banner);
void unban_user(const simple_wml::node& unban, const socket_ptr unbanner); void unban_user(const simple_wml::node& unban, const socket_ptr& unbanner);
/** /**
* Add a user to the game. * Add a user to the game.
* *
* @return True iff the user successfully joined the game. * @return True iff the user successfully joined the game.
*/ */
bool add_player(const socket_ptr player, bool observer = false); bool add_player(const socket_ptr& player, bool observer = false);
/** /**
* Removes a user from the game. * Removes a user from the game.
@ -179,12 +179,12 @@ public:
* no more players or the host left on a not yet * no more players or the host left on a not yet
* started game. * started game.
*/ */
bool remove_player(const socket_ptr player, const bool disconnect = false, const bool destruct = false); bool remove_player(const socket_ptr& player, const bool disconnect = false, const bool destruct = false);
/** Adds players and observers into one vector and returns that. */ /** Adds players and observers into one vector and returns that. */
const user_vector all_game_users() const; const user_vector all_game_users() const;
void start_game(const socket_ptr starter); void start_game(const socket_ptr& starter);
// this is performed just before starting and before [start_game] signal // this is performed just before starting and before [start_game] signal
// send scenario_diff's specific to each client so that they locally // send scenario_diff's specific to each client so that they locally
@ -194,7 +194,7 @@ public:
void update_game(); void update_game();
/** A user (player only?) asks for the next scenario to advance to. */ /** A user (player only?) asks for the next scenario to advance to. */
void load_next_scenario(const socket_ptr user); // const void load_next_scenario(const socket_ptr& user); // const
// iceiceice: I unmarked this const because I want to send and record server messages when I fail to tweak sides // iceiceice: I unmarked this const because I want to send and record server messages when I fail to tweak sides
// properly // properly
@ -203,9 +203,9 @@ public:
void update_side_data(); void update_side_data();
/** Let's a player owning a side give it to another player or observer. */ /** Let's a player owning a side give it to another player or observer. */
void transfer_side_control(const socket_ptr sock, const simple_wml::node& cfg); void transfer_side_control(const socket_ptr& sock, const simple_wml::node& cfg);
void process_message(simple_wml::document& data, const socket_ptr user); void process_message(simple_wml::document& data, const socket_ptr& user);
/** /**
* Handles [end_turn], repackages [commands] with private [speak]s in them * Handles [end_turn], repackages [commands] with private [speak]s in them
@ -216,12 +216,12 @@ public:
* *
* @returns True if the turn ended. * @returns True if the turn ended.
*/ */
bool process_turn(simple_wml::document& data, const socket_ptr user); bool process_turn(simple_wml::document& data, const socket_ptr& user);
/** Handles incoming [whiteboard] data. */ /** Handles incoming [whiteboard] data. */
void process_whiteboard(simple_wml::document& data, const socket_ptr user); void process_whiteboard(simple_wml::document& data, const socket_ptr& user);
/** Handles incoming [change_turns_wml] data. */ /** Handles incoming [change_turns_wml] data. */
void process_change_turns_wml(simple_wml::document& data, const socket_ptr user); void process_change_turns_wml(simple_wml::document& data, const socket_ptr& user);
/** /**
* Set the description to the number of available slots. * Set the description to the number of available slots.
@ -230,29 +230,29 @@ public:
*/ */
bool describe_slots(); bool describe_slots();
void send_server_message_to_all(const char* message, socket_ptr exclude = socket_ptr()) const; void send_server_message_to_all(const char* message, const socket_ptr& exclude = socket_ptr()) const;
void send_server_message_to_all(const std::string& message, socket_ptr exclude = socket_ptr()) const void send_server_message_to_all(const std::string& message, const socket_ptr& exclude = socket_ptr()) const
{ {
send_server_message_to_all(message.c_str(), exclude); send_server_message_to_all(message.c_str(), exclude);
} }
void send_server_message( void send_server_message(
const char* message, socket_ptr sock = socket_ptr(), simple_wml::document* doc = nullptr) const; const char* message, const socket_ptr& sock = socket_ptr(), simple_wml::document* doc = nullptr) const;
void send_server_message( void send_server_message(
const std::string& message, socket_ptr sock = socket_ptr(), simple_wml::document* doc = nullptr) const const std::string& message, const socket_ptr& sock = socket_ptr(), simple_wml::document* doc = nullptr) const
{ {
send_server_message(message.c_str(), sock, doc); send_server_message(message.c_str(), sock, doc);
} }
/** Send data to all players in this game except 'exclude'. */ /** Send data to all players in this game except 'exclude'. */
void send_and_record_server_message(const char* message, const socket_ptr exclude = socket_ptr()); void send_and_record_server_message(const char* message, const socket_ptr& exclude = socket_ptr());
void send_and_record_server_message(const std::string& message, const socket_ptr exclude = socket_ptr()) void send_and_record_server_message(const std::string& message, const socket_ptr& exclude = socket_ptr())
{ {
send_and_record_server_message(message.c_str(), exclude); send_and_record_server_message(message.c_str(), exclude);
} }
void send_data( void send_data(
simple_wml::document& data, const socket_ptr exclude = socket_ptr(), std::string packet_type = "") const; simple_wml::document& data, const socket_ptr& exclude = socket_ptr(), std::string packet_type = "") const;
void clear_history(); void clear_history();
void record_data(simple_wml::document* data); void record_data(simple_wml::document* data);
@ -295,7 +295,7 @@ public:
void set_termination_reason(const std::string& reason); void set_termination_reason(const std::string& reason);
void handle_choice(const simple_wml::node& data, const socket_ptr user); void handle_choice(const simple_wml::node& data, const socket_ptr& user);
void handle_random_choice(const simple_wml::node& data); void handle_random_choice(const simple_wml::node& data);
@ -309,7 +309,7 @@ public:
/** /**
* Function which returns true iff 'player' controls any of the sides spcified in 'sides'. * Function which returns true iff 'player' controls any of the sides spcified in 'sides'.
*/ */
bool controls_side(const std::vector<int>& sides, const socket_ptr player) const; bool controls_side(const std::vector<int>& sides, const socket_ptr& player) const;
private: private:
// forbidden operations // forbidden operations
@ -321,23 +321,23 @@ private:
return (nsides_ ? end_turn_ % nsides_ : 0); return (nsides_ ? end_turn_ % nsides_ : 0);
} }
socket_ptr current_player() const const socket_ptr current_player() const
{ {
return (nsides_ ? sides_[current_side()] : socket_ptr()); return (nsides_ ? sides_[current_side()] : socket_ptr());
} }
bool is_current_player(const socket_ptr player) const bool is_current_player(const socket_ptr& player) const
{ {
return (current_player() == player); return (current_player() == player);
} }
bool is_muted_observer(const socket_ptr player) const; bool is_muted_observer(const socket_ptr& player) const;
bool all_observers_muted() const bool all_observers_muted() const
{ {
return all_observers_muted_; return all_observers_muted_;
} }
void send_muted_observers(const socket_ptr user) const; void send_muted_observers(const socket_ptr& user) const;
bool send_taken_side(simple_wml::document& cfg, const simple_wml::node* side) const; bool send_taken_side(simple_wml::document& cfg, const simple_wml::node* side) const;
@ -350,37 +350,37 @@ private:
* First we look for a side where save_id= or current_player= matches the * First we look for a side where save_id= or current_player= matches the
* new user's name then we search for the first controller="network" side. * new user's name then we search for the first controller="network" side.
*/ */
bool take_side(const socket_ptr user); bool take_side(const socket_ptr& user);
/** /**
* Send [change_controller] message to tell all clients the new controller's name * Send [change_controller] message to tell all clients the new controller's name
* or controller type (human or ai). * or controller type (human or ai).
*/ */
void change_controller(const size_t side_num, void change_controller(const size_t side_num,
const socket_ptr sock, const socket_ptr& sock,
const std::string& player_name, const std::string& player_name,
const bool player_left = true); const bool player_left = true);
void transfer_ai_sides(const socket_ptr player); void transfer_ai_sides(const socket_ptr& player);
void send_leave_game(socket_ptr user) const; void send_leave_game(const socket_ptr& user) const;
/** /**
@param sides a comma sperated list of side numbers to which the package should be sent, @param sides a comma sperated list of side numbers to which the package should be sent,
*/ */
void send_data_sides(simple_wml::document& data, void send_data_sides(simple_wml::document& data,
const simple_wml::string_span& sides, const simple_wml::string_span& sides,
const socket_ptr exclude = socket_ptr(), const socket_ptr& exclude = socket_ptr(),
std::string packet_type = "") const; std::string packet_type = "") const;
void send_data_observers( void send_data_observers(
simple_wml::document& data, const socket_ptr exclude = socket_ptr(), std::string packet_type = "") const; simple_wml::document& data, const socket_ptr& exclude = socket_ptr(), std::string packet_type = "") const;
/** /**
* Send [observer] tags of all the observers in the game to the user or * Send [observer] tags of all the observers in the game to the user or
* everyone if none given. * everyone if none given.
*/ */
void send_observerjoins(const socket_ptr sock = socket_ptr()) const; void send_observerjoins(const socket_ptr& sock = socket_ptr()) const;
void send_observerquit(const socket_ptr observer) const; void send_observerquit(const socket_ptr& observer) const;
void send_history(const socket_ptr sock) const; void send_history(const socket_ptr& sock) const;
/** In case of a host transfer, notify the new host about its status. */ /** In case of a host transfer, notify the new host about its status. */
void notify_new_host(); void notify_new_host();
@ -398,14 +398,14 @@ private:
return true; return true;
} }
bool is_legal_command(const simple_wml::node& command, const socket_ptr user); bool is_legal_command(const simple_wml::node& command, const socket_ptr& user);
/** /**
* Checks whether a user has the same IP as members of this game. * Checks whether a user has the same IP as members of this game.
* If observer is true it only checks against players. * If observer is true it only checks against players.
* @return A comma separated string of members with matching IPs. * @return A comma separated string of members with matching IPs.
*/ */
std::string has_same_ip(const socket_ptr user, bool observer) const; std::string has_same_ip(const socket_ptr& user, bool observer) const;
/** /**
* Function which should be called every time a player ends their turn * Function which should be called every time a player ends their turn
@ -420,10 +420,10 @@ private:
* *
* Only sends data if the game is initialized but not yet started. * Only sends data if the game is initialized but not yet started.
*/ */
void send_user_list(const socket_ptr exclude = socket_ptr()) const; void send_user_list(const socket_ptr& exclude = socket_ptr()) const;
/** Returns the name of the user or "(unfound)". */ /** Returns the name of the user or "(unfound)". */
std::string username(const socket_ptr pl) const; std::string username(const socket_ptr& pl) const;
/** Returns a comma separated list of user names. */ /** Returns a comma separated list of user names. */
std::string list_users(user_vector users, const std::string& func) const; std::string list_users(user_vector users, const std::string& func) const;
@ -511,7 +511,7 @@ private:
struct game_is_member struct game_is_member
{ {
game_is_member(socket_ptr sock) game_is_member(const socket_ptr& sock)
: sock_(sock) : sock_(sock)
{ {
} }
@ -522,7 +522,7 @@ struct game_is_member
} }
private: private:
socket_ptr sock_; const socket_ptr& sock_;
}; };
struct game_id_matches struct game_id_matches