The Battle for Wesnoth  1.15.1+dev
Classes | Public Types | Static Public Member Functions | Static Private Attributes | List of all members
synced_context Class Reference

#include <synced_context.hpp>

Classes

class  server_choice
 

Public Types

enum  synced_state { UNSYNCED, SYNCED, LOCAL_CHOICE }
 
typedef std::deque< std::pair< config, game_events::queued_event > > event_list
 

Static Public Member Functions

static bool run (const std::string &commandname, const config &data, bool use_undo=true, bool show=true, synced_command::error_handler_function error_handler=default_error_function)
 Sets the context to 'synced', initialises random context, and calls the given function. More...
 
static bool run_and_store (const std::string &commandname, const config &data, bool use_undo=true, bool show=true, synced_command::error_handler_function error_handler=default_error_function)
 
static bool run_and_throw (const std::string &commandname, const config &data, bool use_undo=true, bool show=true, synced_command::error_handler_function error_handler=default_error_function)
 
static bool run_in_synced_context_if_not_already (const std::string &commandname, const config &data, bool use_undo=true, bool show=true, synced_command::error_handler_function error_handler=default_error_function)
 checks whether we are currently running in a synced context, and if not we enters it. More...
 
static synced_state get_synced_state ()
 
static bool is_synced ()
 
static bool is_unsynced ()
 
static void set_synced_state (synced_state newstate)
 
static std::string generate_random_seed ()
 
static void pull_remote_user_input ()
 called from get_user_choice while waiting for a remove user choice. More...
 
static void send_user_choice ()
 called from get_user_choice to send a recently made choice to the other clients. More...
 
static void default_error_function (const std::string &message, bool heavy)
 a function to be passed to run_in_synced_context to assert false on error (the default). More...
 
static void just_log_error_function (const std::string &message, bool heavy)
 a function to be passed to run_in_synced_context to log the error. More...
 
static void ignore_error_function (const std::string &message, bool heavy)
 a function to be passed to run_in_synced_context to ignore the error. More...
 
static std::shared_ptr< randomness::rngget_rng_for_action ()
 
static bool is_simultaneously ()
 
static void reset_is_simultaneously ()
 
static void set_is_simultaneously ()
 
static bool can_undo ()
 
static void set_last_unit_id (int id)
 
static int get_unit_id_diff ()
 
static config ask_server_choice (const server_choice &)
 
static event_listget_undo_commands ()
 
static void add_undo_commands (const config &commands, const game_events::queued_event &ctx)
 
static void reset_undo_commands ()
 

Static Private Attributes

static synced_state state_ = synced_context::UNSYNCED
 
static bool is_simultaneously_ = false
 
static int last_unit_id_ = 0
 Used to restore the unit id manager when undoing. More...
 
static event_list undo_commands_
 Actions wml to be executed when the current action is undone. More...
 

Detailed Description

Definition at line 31 of file synced_context.hpp.

Member Typedef Documentation

◆ event_list

Definition at line 153 of file synced_context.hpp.

Member Enumeration Documentation

◆ synced_state

Enumerator
UNSYNCED 
SYNCED 
LOCAL_CHOICE 

Definition at line 34 of file synced_context.hpp.

Member Function Documentation

◆ add_undo_commands()

void synced_context::add_undo_commands ( const config commands,
const game_events::queued_event ctx 
)
static

Definition at line 372 of file synced_context.cpp.

References undo_commands_.

Referenced by get_undo_commands(), and game_events::WML_HANDLER_FUNCTION().

◆ ask_server_choice()

config synced_context::ask_server_choice ( const server_choice sch)
static

◆ can_undo()

bool synced_context::can_undo ( )
static
Returns
whether there were recently no methods called that prevent undoing.

Definition at line 229 of file synced_context.cpp.

References randomness::generator, randomness::rng::get_random_calls(), is_simultaneously_, and is_synced().

Referenced by actions::recall_unit(), actions::recruit_unit(), run(), and SYNCED_COMMAND_HANDLER_FUNCTION().

◆ default_error_function()

void synced_context::default_error_function ( const std::string &  message,
bool  heavy 
)
static

a function to be passed to run_in_synced_context to assert false on error (the default).

Definition at line 148 of file synced_context.cpp.

References ERR_REPLAY.

◆ generate_random_seed()

std::string synced_context::generate_random_seed ( )
static

Definition at line 205 of file synced_context.cpp.

References ask_server_choice(), and config_attribute_value::str().

Referenced by get_rng_for_action().

◆ get_rng_for_action()

std::shared_ptr< randomness::rng > synced_context::get_rng_for_action ( )
static
Returns
a rng_deterministic if in determinsic mode otherwise a rng_synced.

Definition at line 260 of file synced_context.cpp.

References resources::classification, resources::gamedata, generate_random_seed(), game_classification::random_mode, and game_data::rng().

◆ get_synced_state()

synced_context::synced_state synced_context::get_synced_state ( )
static

◆ get_undo_commands()

static event_list& synced_context::get_undo_commands ( )
inlinestatic

◆ get_unit_id_diff()

int synced_context::get_unit_id_diff ( )
static

◆ ignore_error_function()

void synced_context::ignore_error_function ( const std::string &  message,
bool  heavy 
)
static

a function to be passed to run_in_synced_context to ignore the error.

Definition at line 159 of file synced_context.cpp.

References DBG_REPLAY.

Referenced by ai::recall_result::do_execute(), wb::recall::execute(), and events::menu_handler::recall().

◆ is_simultaneously()

bool synced_context::is_simultaneously ( )
static
Returns
whether we already sent data about the current action to other clients. which means we cannot undo it. returns is_simultaneously_

Definition at line 213 of file synced_context.cpp.

References is_simultaneously_.

Referenced by user_choice_manager::ask_local_choice(), and turn_info::send_data().

◆ is_synced()

bool synced_context::is_synced ( )
static
Returns
whether we are currently executing a synced action like recruit, start, recall, disband, movement, attack, init_side, end_turn, fire_event, lua_ai, auto_shroud or similar.

Definition at line 169 of file synced_context.cpp.

References get_synced_state(), and SYNCED.

Referenced by actions::undo_list::apply_shroud_changes(), ask_server_choice(), can_undo(), game_display::display_unit_hex(), ai::attack_result::do_execute(), do_replay_handle(), get_unit_id_diff(), mp_sync::get_user_choice(), mp_sync::get_user_choice_multiple_sides(), game_display::highlight_hex(), unit::mark_clone(), side_filter::match_internal(), and unit::set_underlying_id().

◆ is_unsynced()

bool synced_context::is_unsynced ( )
static
Returns
whether we are not currently executing a synced action like recruit, start, recall, disband, movement, attack, init_side, end_turn, fire_event, lua_ai, auto_shroud or similar. and not doing a local choice.

Definition at line 174 of file synced_context.cpp.

References get_synced_state(), and UNSYNCED.

Referenced by turn_info::send_data().

◆ just_log_error_function()

void synced_context::just_log_error_function ( const std::string &  message,
bool  heavy 
)
static

a function to be passed to run_in_synced_context to log the error.

Definition at line 154 of file synced_context.cpp.

References ERR_REPLAY.

◆ pull_remote_user_input()

void synced_context::pull_remote_user_input ( )
static

called from get_user_choice while waiting for a remove user choice.

Definition at line 249 of file synced_context.cpp.

References syncmp_registry::pull_remote_choice().

Referenced by ask_server_choice(), and user_choice_manager::pull().

◆ reset_is_simultaneously()

void synced_context::reset_is_simultaneously ( )
static

◆ reset_undo_commands()

void synced_context::reset_undo_commands ( )
static

◆ run()

bool synced_context::run ( const std::string &  commandname,
const config data,
bool  use_undo = true,
bool  show = true,
synced_command::error_handler_function  error_handler = default_error_function 
)
static

Sets the context to 'synced', initialises random context, and calls the given function.

The plan is that in replay and in real game the same function is called. however, if you cannot call this function you can also use set_scontext_synced directly (use it like it's used in this method).

movement commands are currently treated specially, that's because actions::move_unit returns a value and some function use that value. maybe i should add a way here to return a value.

ai's attacks are also treated special because the ai wants to pass advancement_aspects.

redoing does normally not take place in a synced context, because we saved the dependent=true replaycommands in the replaystack data. also there are no events of similar fired when redoing an action (in most cases).

Parameters
use_undothis parameter is used to ignore undos during an ai move to optimize.
error_handleran error handler for the case that data contains invalid data.
Returns
true if the action was successful.

Definition at line 55 of file synced_context.cpp.

References can_undo(), play_controller::check_victory(), resources::controller, DBG_REPLAY, set_scontext_synced::do_final_checkup(), synced_command::registry(), and resources::undo_stack.

Referenced by do_replay_handle(), actions::undo_list::redo(), and run_and_store().

◆ run_and_store()

bool synced_context::run_and_store ( const std::string &  commandname,
const config data,
bool  use_undo = true,
bool  show = true,
synced_command::error_handler_function  error_handler = default_error_function 
)
static

◆ run_and_throw()

bool synced_context::run_and_throw ( const std::string &  commandname,
const config data,
bool  use_undo = true,
bool  show = true,
synced_command::error_handler_function  error_handler = default_error_function 
)
static

◆ run_in_synced_context_if_not_already()

bool synced_context::run_in_synced_context_if_not_already ( const std::string &  commandname,
const config data,
bool  use_undo = true,
bool  show = true,
synced_command::error_handler_function  error_handler = default_error_function 
)
static

checks whether we are currently running in a synced context, and if not we enters it.

this is never called from so_replay_handle.

Definition at line 115 of file synced_context.cpp.

References ERR_REPLAY, get_synced_state(), LOCAL_CHOICE, synced_command::registry(), run_and_throw(), SYNCED, and UNSYNCED.

Referenced by ai::recall_result::do_execute(), ai::recruit_result::do_execute(), game_events::wml_menu_item::fire_event(), and game_events::WML_HANDLER_FUNCTION().

◆ send_user_choice()

void synced_context::send_user_choice ( )
static

called from get_user_choice to send a recently made choice to the other clients.

Does not receive any data from the network any sends data.

Definition at line 254 of file synced_context.cpp.

References is_simultaneously_, and syncmp_registry::send_user_choice().

Referenced by user_choice_manager::ask_local_choice().

◆ set_is_simultaneously()

void synced_context::set_is_simultaneously ( )
static

◆ set_last_unit_id()

void synced_context::set_last_unit_id ( int  id)
static

Definition at line 237 of file synced_context.cpp.

References last_unit_id_.

Referenced by set_scontext_synced_base::set_scontext_synced_base().

◆ set_synced_state()

void synced_context::set_synced_state ( synced_state  newstate)
static

Member Data Documentation

◆ is_simultaneously_

bool synced_context::is_simultaneously_ = false
staticprivate

◆ last_unit_id_

int synced_context::last_unit_id_ = 0
staticprivate

Used to restore the unit id manager when undoing.

Definition at line 174 of file synced_context.hpp.

Referenced by get_unit_id_diff(), and set_last_unit_id().

◆ state_

synced_context::synced_state synced_context::state_ = synced_context::UNSYNCED
staticprivate

Definition at line 161 of file synced_context.hpp.

Referenced by get_synced_state(), and set_synced_state().

◆ undo_commands_

synced_context::event_list synced_context::undo_commands_
staticprivate

Actions wml to be executed when the current action is undone.

Definition at line 178 of file synced_context.hpp.

Referenced by add_undo_commands(), get_undo_commands(), and reset_undo_commands().


The documentation for this class was generated from the following files: