Поделиться через


Класс propagator_block

Класс propagator_block — это абстрактный базовый класс для блоков сообщений, которые являются одновременно блоками источников и целевыми блоками. Он объединяет функциональные возможности обоих классов, source_block и target_block.

Синтаксис

template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class propagator_block : public source_block<_TargetLinkRegistry,
    _MessageProcessorType>,
public ITarget<typename _SourceLinkRegistry::type::source_type>;

Параметры

_TargetLinkRegistry
Реестр ссылок, используемый для хранения целевых ссылок.

_SourceLinkRegistry
Реестр ссылок, используемый для хранения исходных ссылок.

_MessageProcessorType
Тип процессора для обработки сообщений.

Участники

Общедоступные определения типов

Имя Описание
source_iterator Тип итератора для source_link_manager этого propagator_block.

Открытые конструкторы

Имя Описание
propagator_block Формирует объект propagator_block.
Деструктор ~propagator_block Уничтожает объект propagator_block .

Открытые методы

Имя Описание
распространять Асинхронно передает сообщение из исходного блока в этот целевой блок.
send Синхронно инициирует сообщение в этом блоке. Вызывается блоком ISource . После завершения этой функции сообщение уже будет распространяться в блок.

Защищенные методы

Имя Описание
decline_incoming_messages Указывает на блок, который должны быть отклонены новые сообщения.
initialize_source_and_target Инициализирует базовый объект. В частности, message_processor объект необходимо инициализировать.
link_source Связывает указанный блок источника с этим propagator_block объектом.
process_input_messages Обработка входных сообщений. Это полезно только для блоков распространения, производных от source_block (переопределения source_block::p rocess_input_messages.)
propagate_message При переопределении в производном классе этот метод асинхронно передает сообщение из блока этому propagator_block объектуISource. Вызывается методом propagate при вызове исходного блока.
register_filter Регистрирует метод фильтра, который будет вызываться при каждом полученном сообщении.
remove_network_links Удаляет все исходные и целевые сетевые ссылки из этого propagator_block объекта.
send_message При переопределении в производном классе этот метод синхронно передает сообщение из ISource блока этому propagator_block объекту. Вызывается методом send при вызове исходного блока.
unlink_source Отменяет связь с указанным блоком источника из этого propagator_block объекта.
unlink_sources Отменяет связь всех блоков источника из этого propagator_block объекта. (Переопределения ITarget::unlink_sources.)

Замечания

Чтобы избежать нескольких наследование, propagator_block класс наследует от source_block класса и ITarget абстрактного класса. Большая часть функций класса target_block реплицируется здесь.

Иерархия наследования

ISource

ITarget

source_block

propagator_block

Требования

Заголовок: agents.h

Пространство имен: concurrency

decline_incoming_messages

Указывает на блок, который должны быть отклонены новые сообщения.

void decline_incoming_messages();

Замечания

Этот метод вызывается деструктором, чтобы обеспечить отклонение новых сообщений во время уничтожения.

initialize_source_and_target

Инициализирует базовый объект. В частности, message_processor объект необходимо инициализировать.

void initialize_source_and_target(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

Параметры

_PScheduler
Планировщик, используемый для планирования задач.

_PScheduleGroup
Группа расписаний, используемая для задач планирования.

Связывает указанный блок источника с этим propagator_block объектом.

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

Параметры

_PSource
Указатель на блок, связанный ISource .

process_input_messages

Обработка входных сообщений. Подходит только для блоков распространения, производных от source_block.

virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);

Параметры

_PMessage
Указатель на сообщение, которое необходимо обработать.

распространять

Асинхронно передает сообщение из исходного блока в этот целевой блок.

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

Замечания

Метод propagate вызывается в целевом блоке связанным исходным блоком. Он помещает в очередь асинхронную задачу для обработки сообщения, если он еще не включен в очередь или выполняется.

Метод создает исключение invalid_argument, если _PMessage имеет значение NULLили _PSource параметр.

propagate_message

При переопределении в производном классе этот метод асинхронно передает сообщение из блока этому propagator_block объектуISource. Вызывается методом propagate при вызове исходного блока.

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

propagator_block

Формирует объект propagator_block.

propagator_block();

~propagator_block

Уничтожает объект propagator_block .

virtual ~propagator_block();

register_filter

Регистрирует метод фильтра, который будет вызываться при каждом полученном сообщении.

void register_filter(filter_method const& _Filter);

Параметры

_Фильтр
Метод фильтра.

Удаляет все исходные и целевые сетевые ссылки из этого propagator_block объекта.

void remove_network_links();

отправить

Синхронно инициирует сообщение в этом блоке. Вызывается блоком ISource . После завершения этой функции сообщение уже будет распространяться в блок.

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

Замечания

Этот метод создает исключение invalid_argument, если задано NULL_PMessage значение или _PSource параметр.

send_message

При переопределении в производном классе этот метод синхронно передает сообщение из ISource блока этому propagator_block объекту. Вызывается методом send при вызове исходного блока.

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

Замечания

По умолчанию этот блок возвращается, если не переопределяется declined производным классом.

Отменяет связь с указанным блоком источника из этого propagator_block объекта.

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

Параметры

_PSource
Указатель на ISource блок, который должен быть отключен.

Отменяет связь всех блоков источника из этого propagator_block объекта.

virtual void unlink_sources();

См. также

Пространство имен concurrency
Класс source_block
Класс ITarget