server: remember client's ip in player_connections_ and use it in remove_player()
this is needed so ip is properly logged even if socket is closed or invalid
This commit is contained in:
parent
4b7a6a98ec
commit
aaabbf2687
2 changed files with 9 additions and 2 deletions
|
@ -38,9 +38,12 @@ class player_record
|
|||
mutable player player_;
|
||||
std::shared_ptr<game> game_;
|
||||
|
||||
std::string ip_address;
|
||||
|
||||
public:
|
||||
|
||||
const socket_ptr socket() const { return socket_; }
|
||||
std::string saved_client_ip() const { return ip_address; }
|
||||
player& info() const { return player_; }
|
||||
const std::string& name() const { return player_.name(); }
|
||||
const std::shared_ptr<game> get_game() const;
|
||||
|
@ -49,7 +52,7 @@ class player_record
|
|||
static void set_game(player_record&, std::shared_ptr<game>);
|
||||
static void enter_lobby(player_record&);
|
||||
|
||||
player_record(const socket_ptr socket, const player& player) : socket_(socket), player_(player) {}
|
||||
player_record(const socket_ptr socket, const player& player) : socket_(socket), player_(player), ip_address(client_address(socket)) {}
|
||||
};
|
||||
|
||||
struct socket_t{};
|
||||
|
|
|
@ -1852,11 +1852,15 @@ void send_server_message(socket_ptr socket, const std::string& message)
|
|||
|
||||
void server::remove_player(socket_ptr socket)
|
||||
{
|
||||
std::string ip = client_address(socket);
|
||||
std::string ip;
|
||||
|
||||
auto iter = player_connections_.find(socket);
|
||||
if(iter == player_connections_.end()) {
|
||||
return;
|
||||
} else {
|
||||
// client_address() is very likely to return <unknown address> at this point
|
||||
// so we remember ip in player_connections_
|
||||
ip = iter->saved_client_ip();
|
||||
}
|
||||
|
||||
const std::shared_ptr<game> g = iter->get_game();
|
||||
|
|
Loading…
Add table
Reference in a new issue