45 const std::string&
name =
"",
47 const std::string& replay_save_path =
"");
66 const std::string&
name()
const 266 template<
typename Container>
271 void record_data(std::unique_ptr<simple_wml::document> data);
313 static const std::string aborted =
"aborted";
314 static const std::string not_started =
"not started";
388 const std::string& player_name,
389 const bool player_left =
true);
392 const std::string& player_name);
460 std::string
list_users(user_vector users,
const std::string& func)
const;
529 mutable std::vector<std::unique_ptr<simple_wml::document>>
history_;
bool remove_player(const socket_ptr &player, const bool disconnect=false, const bool destruct=false)
Removes a user from the game.
void set_current_turn(int turn)
void missing_user(socket_ptr socket, const std::string &func) const
Function to log when we don't find a connection in player_info_.
void new_scenario(const socket_ptr &player)
when the host sends the new scenario of a mp campaign
const std::string & name() const
bool observers_can_label() const
player_connections & player_connections_
std::vector< std::unique_ptr< simple_wml::document > > history_
Replay data.
void handle_random_choice(const simple_wml::node &data)
void send_history(const socket_ptr &sock) const
void change_controller(const std::size_t side_num, const socket_ptr &sock, const std::string &player_name, const bool player_left=true)
Send [change_controller] message to tell all clients the new controller's name or controller type (hu...
const simple_wml::node::child_list & get_sides_list() const
void send_and_record_server_message(const std::string &message, const socket_ptr &exclude=socket_ptr())
bool player_is_banned(const socket_ptr &player, const std::string &name) const
Checks whether the connection's ip address or username is banned.
void send_observerquit(const socket_ptr &observer)
user_vector muted_observers_
void update_side_data()
Resets the side configuration according to the scenario data.
void send_and_record_server_message(const char *message, const socket_ptr &exclude=socket_ptr())
Send data to all players in this game except 'exclude'.
std::vector< socket_ptr > side_vector
void send_server_message(const std::string &message, const socket_ptr &sock=socket_ptr(), simple_wml::document *doc=nullptr) const
void process_whiteboard(simple_wml::document &data, const socket_ptr &user)
Handles incoming [whiteboard] data.
std::size_t current_side() const
int nsides_
Number of sides in the current scenario.
user_vector observers_
A vector of observers (members not owning a side).
void send_server_message(const char *message, const socket_ptr &sock=socket_ptr(), simple_wml::document *doc=nullptr) const
socket_ptr find_user(const simple_wml::string_span &name)
Shortcut to a convenience function for finding a user by name.
bool all_observers_muted_
void send_observerjoins(const socket_ptr &sock=socket_ptr())
Send [observer] tags of all the observers in the game to the user or everyone if none given...
bool is_observer(const socket_ptr &player) const
void send_leave_game(const socket_ptr &user) const
game & operator=(const game &)=delete
randomness::mt_rng rng_
A wrapper for mersenne twister rng which generates randomness for this game.
void send_to_players(simple_wml::document &data, const Container &players, socket_ptr exclude=socket_ptr())
const socket_ptr current_player() const
std::string username(const socket_ptr &pl) const
Returns the name of the user or "(unfound)".
std::vector< std::string > bans_
wesnothd::server & server
void send_data(simple_wml::document &data, const socket_ptr &exclude=socket_ptr(), std::string packet_type="")
node * child(const char *name)
node * child(const char *name)
bool process_turn(simple_wml::document &data, const socket_ptr &user)
Handles [end_turn], repackages [commands] with private [speak]s in them and sends the data...
void process_message(simple_wml::document &data, const socket_ptr &user)
void process_change_turns_wml(simple_wml::document &data, const socket_ptr &user)
Handles incoming [change_turns_wml] data.
int last_choice_request_id_
bool password_matches(const std::string &passwd) const
void start_game(const socket_ptr &starter)
bool end_turn(int new_side)
Function which should be called every time a player ends their turn (i.e.
void reset_sides()
calculates the initial value for sides_, side_controllerds_, nsides_
std::vector< CONTROLLER > side_controllers_
bool has_password() const
bool allow_observers() const
void handle_controller_choice(const simple_wml::node &data)
bool describe_slots()
Set the description to the number of available slots.
void load_next_scenario(const socket_ptr &user)
A user (player only?) asks for the next scenario to advance to.
std::string get_replay_filename()
game(wesnothd::server &server, player_connections &player_connections, const socket_ptr &host, const std::string &name="", bool save_replays=false, const std::string &replay_save_path="")
std::size_t nobservers() const
void send_data_sides(simple_wml::document &data, const simple_wml::string_span &sides, const socket_ptr &exclude=socket_ptr())
const user_vector all_game_users() const
Adds players and observers into one vector and returns that.
std::string has_same_ip(const socket_ptr &user) const
Checks whether a user has the same IP as any other members of this game.
void perform_controller_tweaks()
bool add_player(const socket_ptr &player, bool observer=false)
Add a user to the game.
bool is_player(const socket_ptr &player) const
void send_server_message_to_all(const char *message, const socket_ptr &exclude=socket_ptr())
std::string list_users(user_vector users, const std::string &func) const
Returns a comma separated list of user names.
void transfer_ai_sides(const socket_ptr &player)
bool all_observers_muted() const
bool observers_can_chat() const
socket_ptr kick_member(const simple_wml::node &kick, const socket_ptr &kicker)
Kick a member by name.
socket_ptr owner_
The game host or later owner (if the host left).
static simple_wml::node * starting_pos(simple_wml::node &data)
static const simple_wml::node * starting_pos(const simple_wml::node &data)
std::vector< std::string > name_bans_
void record_data(std::unique_ptr< simple_wml::document > data)
void send_muted_observers(const socket_ptr &user) const
std::vector< node * > child_list
void unban_user(const simple_wml::node &unban, const socket_ptr &unbanner)
bool take_side(const socket_ptr &user)
Figures out which side to take and tells that side to the game owner.
bool is_current_player(const socket_ptr &player) const
std::unique_ptr< simple_wml::document > change_controller_type(const std::size_t side_num, const socket_ptr &sock, const std::string &player_name)
std::size_t current_turn() const
void reset_last_synced_context_id()
bool is_legal_command(const simple_wml::node &command, const socket_ptr &user)
void send_data_observers(simple_wml::document &data, const socket_ptr &exclude=socket_ptr(), std::string packet_type="") const
void mute_observer(const simple_wml::node &mute, const socket_ptr &muter)
Mute an observer or give a message of all currently muted observers if no name is given...
side_vector sides_
A vector of side owners.
void notify_new_host()
In case of a host transfer, notify the new host about its status.
void handle_choice(const simple_wml::node &data, const socket_ptr &user)
void set_description(simple_wml::node *desc)
Functions to set/get the address of the game's summary description as sent to players in the lobby...
void set_password(const std::string &passwd)
std::size_t nplayers() const
void handle_add_side_wml(const simple_wml::node &req)
simple_wml::node * description_
Pointer to the game's description in the games_and_users_list_.
std::string name_
The name of the game.
std::string debug_sides_info() const
Helps debugging controller tweaks.
void send_server_message_to_all(const std::string &message, const socket_ptr &exclude=socket_ptr())
bool is_owner(const socket_ptr &player) const
void unmute_observer(const simple_wml::node &unmute, const socket_ptr &unmuter)
MAKE_ENUM(CONTROLLER,(HUMAN, "human")(AI, "ai")(EMPTY, "null"))
bmi::multi_index_container< player_record, bmi::indexed_by< bmi::ordered_unique< bmi::tag< socket_t >, bmi::const_mem_fun< player_record, const socket_ptr, &player_record::socket > >, bmi::hashed_unique< bmi::tag< name_t >, bmi::const_mem_fun< player_record, const std::string &, &player_record::name > >, bmi::ordered_non_unique< bmi::tag< game_t >, bmi::const_mem_fun< player_record, int, &player_record::game_id > > > > player_connections
const std::string & termination_reason() const
std::string replay_save_path_
user_vector players_
A vector of players (members owning a side).
std::vector< socket_ptr > user_vector
bool is_muted_observer(const socket_ptr &player) const
void transfer_side_control(const socket_ptr &sock, const simple_wml::node &cfg)
Let's a player owning a side give it to another player or observer.
std::shared_ptr< boost::asio::ip::tcp::socket > socket_ptr
void send_user_list(const socket_ptr &exclude=socket_ptr())
Function to send a list of users to all clients.
bool send_taken_side(simple_wml::document &cfg, const simple_wml::node *side) const
std::set< socket_ptr > players_not_advanced_
in multiplayer campaigns it can happen that some players are still in the previous scenario keep trac...
std::string debug_player_info() const
Helps debugging player and observer lists.
void set_name_bans(const std::vector< std::string > name_bans)
bool is_member(const socket_ptr &player) const
bool controls_side(const std::vector< int > &sides, const socket_ptr &player) const
Function which returns true iff 'player' controls any of the sides spcified in 'sides'.
Defines the MAKE_ENUM macro.
simple_wml::document level_
The current scenario data.
void mute_all_observers()
void set_termination_reason(const std::string &reason)
socket_ptr ban_user(const simple_wml::node &ban, const socket_ptr &banner)
Ban and kick a user by name.
simple_wml::document & level()
The full scenario data.
simple_wml::node * description() const