#include <temporary_sources.hpp>
Открытые типы | |
typedef Data_source | data_source_type |
Тип источника данных. | |
typedef Key | key_type |
Тип ключа. | |
typedef std::set< Key > | key_set_type |
Тип множества ключей. | |
Открытые члены | |
temporary_sources_t () | |
Основной конструктор. | |
virtual | ~temporary_sources_t () |
Деструктор уничтожает все оставшиеся источники данных без вызова deinit. | |
void | insert (const Key &key, Data_source *source) |
Добавить источник данных. | |
void | erase (const Key &k) |
Изъять источник данных. | |
void | clear () |
Удалить все источники данных. | |
Data_source * | find (const Key &k) const |
Найти источник данных по ключу. | |
key_set_type | source_keys () const |
Получить множество всех ключей источников данных. | |
Реализация унаследованных методов. | |
Вызывает init у всех временных источников данных. | |
virtual void | init (so_4::rt::agent_t &agent) |
virtual void | deinit (so_4::rt::agent_t &agent) |
Дерегистрирует источник данных. | |
Закрытые типы | |
typedef temporary_sources_t < Data_source, Key > | self_t |
Удобный псевдоним для собственного типа. | |
typedef std::map< Key, Data_source * > | map_t |
Тип карты временных источников данных. | |
Закрытые члены | |
void | destroy (const typename map_t::value_type &o) |
Уничтожение источника данных. | |
void | init_source (const typename map_t::value_type &o) |
Вызов метода init() у источника данных. | |
void | deinit_source (const typename map_t::value_type &o) |
Вызов метода deinit() у источника данных. | |
Закрытые данные | |
so_4::rt::agent_t * | m_agent |
Агент, который владеет хранилищем. | |
map_t | m_sources |
Карта временных источников данных. |
В некоторых случаях нужны источники данных, время жизни которых заведомо меньше времени жизни агента. Например, если требуется создать по источнику данных на каждого подключившегося к серверу клиента. Время жизни такого источника будет определяется временем подключения клиента, но оно будет меньше, чем время жизни агента-сервера. И соответствующий клиенту источник данных должен быть удален при отключении клиента.
В таких случаях источник данных нельзя добавлять в список свойств агента -- необходимо воспользоваться объектом temporary_sources_t.
Агент, который владеет временными источниками данных, создает у себя объект temporary_sources_t и добавляет его в список своих свойств:
class a_some_t : public so_4::rt::agent_t { ... private : gemont_1::temporary_sources_t< gemont_1::uint_data_source_t > m_data_sources; ... }; a_some_t::a_some_t(...) { so_add_traits( m_data_sources ); }
Все временные источники данных добавляются в объект temporary_sources_t:
void a_some_t::evt_new_client_connected( const msg_new_client & o ) { ... m_data_sources.insert( client_name, new uint_data_source_t( client_name, "a_some_t::client_request_count", 0 ) ); ... }
Каждый источник данных во временном хранилище идентифицируется уникальным строковым ключем. Значением ключа не обязательно должно быть имя источника данных. Это может быть, например, строковое представление адреса, с которого подключился клиент.
Получить источник из хранилища можно при помощи метода temporary_sources_t::find():
void a_some_t::evt_client_request( const msg_client_request & o ) { ... // Увеличиваем количество запросов, полученных от данного клиента. gemont_1::uint_data_source_t * client_request_count = m_data_sources.find( client_name ); client_request_count->set( client_request_count.current() + 1 ); ... }
Удаляется источник данных из временного хранилища при помощи метода temporary_sources_t::erase():
void a_some_t::evt_client_disconnected( const msg_channel_closed & o ) { ... m_data_sources.erase( client_name ); ... }
void gemont_1::temporary_sources_t< Data_source, Key >::clear | ( | ) | [inline] |
Удалить все источники данных.
Если 0 != m_agent, то у каждого уничтожаемого источника данных автоматически вызывается метод data_source_t::deinit().
Перекрестные ссылки gemont_1::temporary_sources_t< Data_source, Key >::deinit_source(), gemont_1::temporary_sources_t< Data_source, Key >::destroy(), gemont_1::temporary_sources_t< Data_source, Key >::m_agent и gemont_1::temporary_sources_t< Data_source, Key >::m_sources.
void gemont_1::temporary_sources_t< Data_source, Key >::erase | ( | const Key & | k | ) | [inline] |
Изъять источник данных.
Если 0 != m_agent, то у уничтожаемого источник данных автоматически вызывается метод data_source_t::deinit().
Перекрестные ссылки gemont_1::temporary_sources_t< Data_source, Key >::m_agent и gemont_1::temporary_sources_t< Data_source, Key >::m_sources.
Используется в gemont_1::temporary_sources_t< Data_source, Key >::insert().
Data_source* gemont_1::temporary_sources_t< Data_source, Key >::find | ( | const Key & | k | ) | const [inline] |
Найти источник данных по ключу.
Перекрестные ссылки gemont_1::temporary_sources_t< Data_source, Key >::m_sources.
void gemont_1::temporary_sources_t< Data_source, Key >::insert | ( | const Key & | key, | |
Data_source * | source | |||
) | [inline] |
Добавить источник данных.
Предыдущий источник данных с таким же ключем уничтожается.
Если 0 != m_agent, то у нового источника автоматически вызывается метод data_source_t::init().
key | Уникальный ключ источника данных. |
source | Динамически созданный объект, который будет уничтожен автоматически. |
Перекрестные ссылки gemont_1::temporary_sources_t< Data_source, Key >::erase(), gemont_1::temporary_sources_t< Data_source, Key >::m_agent и gemont_1::temporary_sources_t< Data_source, Key >::m_sources.
so_4::rt::agent_t* gemont_1::temporary_sources_t< Data_source, Key >::m_agent [private] |
Агент, который владеет хранилищем.
Инициализируется в методе init() и сбрасывается в методе deinit(). Значение 0 указывает, что хранилище не помещено в список свойств какого-то агента.
Если 0 != m_agent, то у все добавляемых источников данных автоматически вызывается метод init(), а у всех изымаемых источников данных вызывается метод deinit().
Используется в gemont_1::temporary_sources_t< Data_source, Key >::clear(), gemont_1::temporary_sources_t< Data_source, Key >::deinit(), gemont_1::temporary_sources_t< Data_source, Key >::deinit_source(), gemont_1::temporary_sources_t< Data_source, Key >::erase(), gemont_1::temporary_sources_t< Data_source, Key >::init_source() и gemont_1::temporary_sources_t< Data_source, Key >::insert().
Документация по Generic MONitoring Tools v.1.4.0. Последние изменения: Mon Oct 20 16:21:28 2008. Создано системой 1.5.7.1 |