improved handling of users trying to join a full game that disallows observers
This commit is contained in:
parent
8e98cd3edd
commit
4b57e1d8c5
3 changed files with 18 additions and 16 deletions
|
@ -860,22 +860,22 @@ bool game::end_turn() {
|
|||
return true;
|
||||
}
|
||||
|
||||
void game::add_player(const network::connection player, bool observer) {
|
||||
bool game::add_player(const network::connection player, bool observer) {
|
||||
if(is_member(player)) {
|
||||
ERR_GAME << "ERROR: Player is already in this game. (socket: "
|
||||
<< player << ")\n";
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
// Hack to handle the pseudo games lobby_ and not_logged_in_.
|
||||
if (owner_ == 0) {
|
||||
observers_.push_back(player);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
const player_map::iterator user = player_info_->find(player);
|
||||
if (user == player_info_->end()) {
|
||||
ERR_GAME << "ERROR: Could not find user in player_info_. (socket: "
|
||||
<< owner_ << ")\n";
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
user->second.mark_available(id_, name_);
|
||||
DBG_GAME << debug_player_info();
|
||||
|
@ -886,7 +886,7 @@ void game::add_player(const network::connection player, bool observer) {
|
|||
players_.push_back(player);
|
||||
send_and_record_server_message((user->second.name() + " has joined the game.").c_str(), player);
|
||||
} else if (!allow_observers()) {
|
||||
return; //false;
|
||||
return false;
|
||||
} else {
|
||||
if (!observer) became_observer = true;
|
||||
DBG_GAME << "adding observer...\n";
|
||||
|
@ -926,6 +926,7 @@ void game::add_player(const network::connection player, bool observer) {
|
|||
// in case someone took the last slot right before this player
|
||||
send_server_message("You are an observer.", player);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//! Removes a user from the game.
|
||||
|
|
|
@ -60,7 +60,7 @@ public:
|
|||
//! Ban and kick a user by name. He doesn't need to be in this game.
|
||||
network::connection ban_user(const simple_wml::node& ban, const player_map::const_iterator banner);
|
||||
|
||||
void add_player(const network::connection player, bool observer = false);
|
||||
bool add_player(const network::connection player, bool observer = false);
|
||||
bool remove_player(const network::connection player, const bool disconnect=false);
|
||||
|
||||
//! Adds players and observers into one vector and returns that.
|
||||
|
|
|
@ -1285,20 +1285,22 @@ void server::process_data_lobby(const network::connection sock,
|
|||
lobby_.send_server_message("Incorrect password.", sock);
|
||||
send_doc(games_and_users_list_, sock);
|
||||
return;
|
||||
} else if (observer && !(*g)->allow_observers()) {
|
||||
WRN_SERVER << network::ip_address(sock) << "\t" << pl->second.name()
|
||||
<< "\tattempted to observe game:\t\"" << (*g)->name() << "\" ("
|
||||
<< game_id << ") which doesn't allow observers.\n";
|
||||
send_doc(leave_game_doc, sock);
|
||||
lobby_.send_server_message("Attempt to observe a game that doesn't allow observers.", sock);
|
||||
send_doc(games_and_users_list_, sock);
|
||||
return;
|
||||
} else if (!(*g)->level_init()) {
|
||||
WRN_SERVER << network::ip_address(sock) << "\t" << pl->second.name()
|
||||
<< "\tattempted to join uninitialized game:\t\"" << (*g)->name()
|
||||
<< "\" (" << game_id << ").\n";
|
||||
send_doc(leave_game_doc, sock);
|
||||
lobby_.send_server_message("Attempt to observe a game that doesn't allow observers.", sock);
|
||||
lobby_.send_server_message("Attempt to join an uninitialized game.", sock);
|
||||
send_doc(games_and_users_list_, sock);
|
||||
return;
|
||||
}
|
||||
bool joined = (*g)->add_player(sock, observer);
|
||||
if (!joined) {
|
||||
WRN_SERVER << network::ip_address(sock) << "\t" << pl->second.name()
|
||||
<< "\tattempted to observe game:\t\"" << (*g)->name() << "\" ("
|
||||
<< game_id << ") which doesn't allow observers.\n";
|
||||
send_doc(leave_game_doc, sock);
|
||||
lobby_.send_server_message("Attempt to observe a game that doesn't allow observers. (You probably joined the game shortly after it filled up.)", sock);
|
||||
send_doc(games_and_users_list_, sock);
|
||||
return;
|
||||
}
|
||||
|
@ -1306,7 +1308,6 @@ void server::process_data_lobby(const network::connection sock,
|
|||
<< "\tjoined game:\t\"" << (*g)->name()
|
||||
<< "\" (" << game_id << (observer ? ") as an observer.\n" : ").\n");
|
||||
lobby_.remove_player(sock);
|
||||
(*g)->add_player(sock, observer);
|
||||
(*g)->describe_slots();
|
||||
|
||||
//send notification of changes to the game and user
|
||||
|
|
Loading…
Add table
Reference in a new issue