#include <a_sysconf_impl.hpp>
Реальный класс агента, осуществляющего управление конфигурацией прикладной системы
Открытые типы | |
typedef std::map< std::string, ref_dll_t > | dll_map_t |
Тип карты загруженных DLL. | |
typedef std::map< std::string, ref_coop_t > | coop_map_t |
Тип карты известных sysconf коопераций. | |
typedef std::map< std::string, coop_factory_t * > | factory_map_t |
Тип карты известных sysconf фабрик коопераций. | |
typedef so_sysconf_2::a_sysconf_t::msg_reg_coop | msg_script_reg_coop |
typedef so_sysconf_2::a_sysconf_t::msg_make_coop | msg_script_make_coop |
Открытые члены | |
a_sysconf_impl_t (sysconf_logger_t *logger) | |
Инициализирующий конструктор. | |
void | evt_add_coop_handler (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_add_coop_handler *cmd) |
Обрабтка появления нового управлятора кооперации. | |
void | evt_add_coop_factory (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_add_coop_factory *cmd) |
Обрабтка появления новой фабрики коопераций. | |
void | evt_load_dll (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_load_dll *cmd) |
Обработчик команды загрузки DLL. | |
void | evt_unload_dll (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_unload_dll *cmd) |
Обработчик команды выгрузки DLL. | |
void | evt_reg_coop (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_reg_coop *cmd) |
Обработчик команды регистрации кооперации. | |
void | evt_script_reg_coop (const so_4::rt::event_data_t &data, const msg_script_reg_coop *cmd) |
Реакция на сообщение msg_script_reg_coop. | |
void | evt_query_transaction (const so_4::rt::event_data_t &data, const msg_query_transaction &cmds) |
Обработчик запроса на выполнение следующей команды текущей транзакции. | |
void | evt_finish_transaction (const so_4::rt::event_data_t &data, const msg_finish_transaction &cmds) |
Обработчик окончания транзакции. | |
void | evt_timeout (const so_4::rt::event_data_t &data, const msg_timeout &msg) |
Обработчик таймаута события. | |
void | evt_make_coop (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_make_coop *cmd) |
void | evt_script_make_coop (const so_4::rt::event_data_t &data, const msg_script_make_coop *cmd) |
Реакция на сообщение msg_script_make_coop. | |
void | evt_dereg_coop (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_dereg_coop *cmd) |
Обработчик команды дерегистрации кооперации. | |
void | evt_restart_coop (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_restart_coop *cmd) |
Обработчик команды перерегистрации кооперации. | |
void | evt_rereg_coop (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_rereg_coop *cmd) |
void | evt_coop_deregistered (const so_4::rt::event_data_t &data, const so_4::rt::msg_coop_deregistered *cmd) |
Обработчик уведомления о дерегистрации кооперации. | |
void | evt_shutdown_enabled (const so_4::rt::event_data_t &data) |
Обработчик завершения работы подсистемы. | |
void | evt_coop_deregistered_when_shutdown (const so_4::rt::event_data_t &data, const so_4::rt::msg_coop_deregistered *cmd) |
void | evt_query_sysconf_info (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_query_sysconf_info *) |
Обработчик запроса текущего состояния подсистемы. | |
void | evt_event (const so_4::rt::event_data_t &data, const a_sysconf_t::msg_event *evt) |
Обработчик сообщения о том, что произошло именованное событие. | |
Открытые статические члены | |
static const std::string & | agent_name () |
Имя единственного агента данного типа. | |
Закрытые члены | |
void | init_rereg (coop_t &coop, const std::string &cfg_file) |
Для кооперации coop устанавливает информацию о перерегистрации. | |
void | do_reg_coop (const std::string &coop_name, const std::string &cfg_file) |
Регистрация кооперации. | |
void | do_make_coop (const std::string &coop_name, const std::string &factory_name, const std::string &cfg_file) |
Создание кооперации при помощи фабрики. | |
bool | do_dereg_coop (const std::string &coop_name) |
Дерегистрация кооперации. | |
void | dec_dll_ref_count (const std::string &coop_name, const std::string &dll_alias) |
void | rereg_coop_if_needed (rereg_info_t *rereg_info, const std::string &coop_name, const std::string &factory_name="") |
Если необходимо, повторно перерегистрирует кооперацию. | |
void | process_deregistered_coop (const std::string &coop_name) |
Обработка дерегистрированной кооперации. | |
void | dereg_all_coops () |
Дерегистрация всех коопераций. | |
void | check_shutdown_possibility () |
Проверка возможности завершения работы. | |
void | remove_all_dll_coops (const std::string &dll_alias) |
void | remove_all_dll_factories (const std::string &dll_alias) |
void | send_msg_sysconf_info (const sysconf_info_t &info, const so_4::rt::comm_channel_t &to) const |
void | send_msg_sysconf_info (const sysconf_info_t &info) const |
sysconf_info_t | make_sysconf_info () const |
void | inform_about_sysconf_changes () const |
bool | is_from_current_trn (long cmd_trn_id, std::ostringstream &err_stream) |
Закрытые данные | |
dll_map_t | m_dll_map |
Словарь загруженных DLL. | |
coop_map_t | m_coop_map |
Словарь доступных коопераций. | |
factory_map_t | m_factory_map |
Словарь доступных фабрик коопераций. | |
std::auto_ptr< sysconf_logger_t > | m_logger |
Журнализатор. | |
long | m_trn_id |
ID текущей транзакции. | |
bool | m_is_in_trn |
Флаг состояния транзакции. | |
script::cmd_list_t | m_cmds_rest |
Список команд к выполнению после ожидания некоторого события. | |
Классы | |
struct | msg_finish_transaction |
Сообщение об окончании транзакции. Подробнее... | |
struct | msg_query_transaction |
Сообщение о выполнении очередной команды текущей транзакции. Подробнее... | |
struct | msg_timeout |
Сообщение об истечении таймаута события. Подробнее... |
typedef std::map< std::string, coop_factory_t * > so_sysconf_2::impl::a_sysconf_impl_t::factory_map_t |
Тип карты известных sysconf фабрик коопераций.
typedef so_sysconf_2::a_sysconf_t::msg_reg_coop so_sysconf_2::impl::a_sysconf_impl_t::msg_script_reg_coop |
Сообщение о регистрации кооперации из конфигурационного файла.
Отсылается при выполнении команд в режиме транзакции. Если будут отсылаться сообщения msg_make_coop, то не будут успевать обрабатываться сообщения msg_add_coop_handler, отсылаемые из загруженных DLL.
typedef so_sysconf_2::a_sysconf_t::msg_make_coop so_sysconf_2::impl::a_sysconf_impl_t::msg_script_make_coop |
Сообщение о создании кооперации с помощью фабрики из конфигурационного файла.
Отсылается при выполнении команд в режиме транзакции. Если будут отсылаться сообщения msg_reg_coop, то не будут успевать обрабатываться сообщения msg_add_coop_handler, отсылаемые из загруженных DLL.
so_sysconf_2::impl::a_sysconf_impl_t::a_sysconf_impl_t | ( | sysconf_logger_t * | logger | ) |
Инициализирующий конструктор.
logger | Журнализатор событий. Может быть null. Если отличен от null, то уничтожается в деструкторе. |
const std::string & so_sysconf_2::impl::a_sysconf_impl_t::agent_name | ( | ) | [static] |
Имя единственного агента данного типа.
В системе должен быть только один агент с таким именем.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_add_coop_handler | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_add_coop_handler * | cmd | |||
) |
Обрабтка появления нового управлятора кооперации.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_add_coop_factory | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_add_coop_factory * | cmd | |||
) |
Обрабтка появления новой фабрики коопераций.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_load_dll | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_load_dll * | cmd | |||
) |
Обработчик команды загрузки DLL.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_unload_dll | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_unload_dll * | cmd | |||
) |
Обработчик команды выгрузки DLL.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_reg_coop | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_reg_coop * | cmd | |||
) |
Обработчик команды регистрации кооперации.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_script_reg_coop | ( | const so_4::rt::event_data_t & | data, | |
const msg_script_reg_coop * | cmd | |||
) |
Реакция на сообщение msg_script_reg_coop.
Это сообщение преобразовывается в нормальное сообщение msg_reg_coop.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_query_transaction | ( | const so_4::rt::event_data_t & | data, | |
const msg_query_transaction & | cmds | |||
) |
Обработчик запроса на выполнение следующей команды текущей транзакции.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_finish_transaction | ( | const so_4::rt::event_data_t & | data, | |
const msg_finish_transaction & | cmds | |||
) |
Обработчик окончания транзакции.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_timeout | ( | const so_4::rt::event_data_t & | data, | |
const msg_timeout & | msg | |||
) |
Обработчик таймаута события.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_make_coop | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_make_coop * | cmd | |||
) |
Обработчик команды создания кооперации при помощи фабрики.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_script_make_coop | ( | const so_4::rt::event_data_t & | data, | |
const msg_script_make_coop * | cmd | |||
) |
Реакция на сообщение msg_script_make_coop.
Это сообщение преобразовывается в нормальное сообщение msg_make_coop.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_dereg_coop | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_dereg_coop * | cmd | |||
) |
Обработчик команды дерегистрации кооперации.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_restart_coop | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_restart_coop * | cmd | |||
) |
Обработчик команды перерегистрации кооперации.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_rereg_coop | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_rereg_coop * | cmd | |||
) |
Обработчик команды перерегистрации кооперации с новым конфигурационным файлом.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_coop_deregistered | ( | const so_4::rt::event_data_t & | data, | |
const so_4::rt::msg_coop_deregistered * | cmd | |||
) |
Обработчик уведомления о дерегистрации кооперации.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_shutdown_enabled | ( | const so_4::rt::event_data_t & | data | ) |
Обработчик завершения работы подсистемы.
Все кооперации дерегистрируются.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_coop_deregistered_when_shutdown | ( | const so_4::rt::event_data_t & | data, | |
const so_4::rt::msg_coop_deregistered * | cmd | |||
) |
Обработчик уведомления о дерегистрации коопераци когда происходит завершение работы подсистемы.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_query_sysconf_info | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_query_sysconf_info * | ||||
) |
Обработчик запроса текущего состояния подсистемы.
void so_sysconf_2::impl::a_sysconf_impl_t::evt_event | ( | const so_4::rt::event_data_t & | data, | |
const a_sysconf_t::msg_event * | evt | |||
) |
Обработчик сообщения о том, что произошло именованное событие.
Имя события сравнивается с именем события, которое ожидается в текущий момент (устанавливается тегом {wait-for}).
void so_sysconf_2::impl::a_sysconf_impl_t::dec_dll_ref_count | ( | const std::string & | coop_name, | |
const std::string & | dll_alias | |||
) | [private] |
Уменьшает количество ссылок на DLL, в которой расположена кооперация.
void so_sysconf_2::impl::a_sysconf_impl_t::rereg_coop_if_needed | ( | rereg_info_t * | rereg_info, | |
const std::string & | coop_name, | |||
const std::string & | factory_name = "" | |||
) | [private] |
Если необходимо, повторно перерегистрирует кооперацию.
Если factory_name == "", то ситается, что кооперация была создана coop_by_handler_t, в противном случае - coop_by_factory_t.
void so_sysconf_2::impl::a_sysconf_impl_t::check_shutdown_possibility | ( | ) | [private] |
Проверка возможности завершения работы.
Все кооперации должны быть дерегистрированны. Если завершение работы возможно, отсылается сообщение a_sobjectizer.msg_normal_shutdown.
void so_sysconf_2::impl::a_sysconf_impl_t::remove_all_dll_coops | ( | const std::string & | dll_alias | ) | [private] |
Изъятие всех коопераций, которые относятся к указанной DLL.
void so_sysconf_2::impl::a_sysconf_impl_t::remove_all_dll_factories | ( | const std::string & | dll_alias | ) | [private] |
Изъятие всех фабрик коопераций, которые относятся к указанной DLL.
void so_sysconf_2::impl::a_sysconf_impl_t::send_msg_sysconf_info | ( | const sysconf_info_t & | info, | |
const so_4::rt::comm_channel_t & | to | |||
) | const [private] |
Создание экземпляра сообщения so_sysconf_2::a_sysconf_t::msg_sysconf_info и отсылка его в указанный канал связи.
void so_sysconf_2::impl::a_sysconf_impl_t::send_msg_sysconf_info | ( | const sysconf_info_t & | info | ) | const [private] |
Создание экземпляра сообщения so_sysconf_2::a_sysconf_t::msg_sysconf_info и его широковещательная рассылка.
sysconf_info_t so_sysconf_2::impl::a_sysconf_impl_t::make_sysconf_info | ( | ) | const [private] |
Формирование описания текущего состояния sysconf.
void so_sysconf_2::impl::a_sysconf_impl_t::inform_about_sysconf_changes | ( | ) | const [private] |
Информирование всего мира о новом состоянии sysconf. Вызывается после успешного изменения состояния sysconf (загрузка/выгрузка DLL, регистрация/дерегистрация кооперации).
bool so_sysconf_2::impl::a_sysconf_impl_t::is_from_current_trn | ( | long | cmd_trn_id, | |
std::ostringstream & | err_stream | |||
) | [private] |
Проверка, можно ли выполнять команду с ID транзакции cmd_trn_id. Если нельзя, выводит сообщение об ошибке в err_stream.
Словарь доступных фабрик коопераций.
std::auto_ptr< sysconf_logger_t > so_sysconf_2::impl::a_sysconf_impl_t::m_logger [private] |
Журнализатор.
Если журнализатор не задан в конструкторе, то содержит указатель на объект null_sysconf_logger_t.
long so_sysconf_2::impl::a_sysconf_impl_t::m_trn_id [private] |
ID текущей транзакции.
Содержит актуальное значение только, если m_is_in_trn == true.
bool so_sysconf_2::impl::a_sysconf_impl_t::m_is_in_trn [private] |
Флаг состояния транзакции.
true - агент находится в состоянии транзакции.
script::cmd_list_t so_sysconf_2::impl::a_sysconf_impl_t::m_cmds_rest [private] |
Список команд к выполнению после ожидания некоторого события.
Актуален только в моменты ожидания события и получения msg_event. Содержит список команд следующих за командой ожидания события.
Документация по so_sysconf_2 v.2.4.0. Последние изменения: Wed Oct 31 18:55:07 2007. Создано системой 1.5.4 |