Project

General

Profile

Всё о прослушивателях реакций

Added by Mikhail Chupilko over 12 years ago

На данный момент существуют следующие взаимоисключающие возможности создания прослушивателей реакций.

1) Встроенный прослушиватель, определяющий наличие неожиданной реакции, но не выводящий на консоль ее содержимое. Эта возможность устарела. Декларация прослушивателя осуществляется с помощью макроса:

CPPTESK_DEFINE_BASIC_OUTPUT_LISTENER(listener_name, output_iface, condition);

Запуск прослушивателя осуществляется с помощью макроса:
CPPTESK_CALL_OUTPUT_LISTENER(full_listener_name, output_iface);

Примечания:
listener_name - имя метода прослушивателя без названия класса адаптера эталонной модели;
output_iface - имя интерфейса, к которому прикрепляется прослушиватель;
condition - условие детектирования реакций;
full_listener_name - полное имя метода прослушивателя, включающее название класса адаптера эталонной модели.


2) Встроенный прослушиватель, выводящий на консоль содержимое неожиданных реакций. Эта возможность устарела. Для использования необходима компиляция с флагом -DCPPTESK_DESERIALIZE_UNEXPECTED_REACTION. Декларация прослушивателя осуществляется с помощью макроса:

CPPTESK_DEFINE_BASIC_OUTPUT_LISTENER(listener_name, output_iface, message_type, condition);

Запуск прослушивателя осуществляется с помощью макроса:
CPPTESK_CALL_OUTPUT_LISTENER(full_listener_name, output_iface);

Примечания:
listener_name - имя метода прослушивателя без названия класса адаптера эталонной модели;
output_iface - имя интерфейса, к которому прикрепляется прослушиватель;
message_type - тип сообщения, используемый десериализатором данного интерфейса;
condition - условие детектирования реакций;
full_listener_name - полное имя метода прослушивателя, включающее название класса адаптера эталонной модели.


3) Настраиваемый прослушиватель, рекомендуемый к использованию. Для использования необходима компиляции с флагом -DCPPTESKHW_VERSION=111010. Также, при регистрации интерфейсов необходимо указывать типы сообщений, используемые адаптерами (сериализаторами и десериализаторами) этих интерфейсов:

CPPTESK_DECLARE_IFACE(iface, message_type)
CPPTESK_DECLARE_INPUT(iface, message_type) 
CPPTESK_DECLARE_OUTPUT(iface, message_type) 
CPPTESK_DECLARE_INOUT(iface, message_type)

Прослушиватель реакций, выводящий содержимое неожиданных реакций, будет создан автоматически уже при связывании адаптера интерфейса и интерфейса макросом:

CPPTESK_SET_OUTPUT_ADAPTER(output_iface, full_adapter_name)

Прослушивателя реакций на интерфейсе не будет при связывании адаптера интерфейса и интерфейса макросом:
 CPPTESK_SET_OUTPUT_ADAPTER_NO_LISTENER(output_iface, full_adapter_name)

Возможность регистрации пользовательского прослушивателя появляется при связывании адаптера интерфейса и интерфейса макросом:
 CPPTESK_SET_OUTPUT_ADAPTER_USER_LISTENER(output_iface, full_adapter_name, full_listener_name)

Для задания пользовательского прослушивателя рекомендуется пользоваться следующим шаблоном:

CPPTESK_DECLARE_LISTENER(listener_name);

CPPTESK_DEFINE_LISTENER(full_listener_name)
{
    CPPTESK_START_LISTENER(message_type);

    CPPTESK_WAIT(condition);
    CPPTESK_CYCLE_BEFORE_CHECKING();
    if(!CPPTESK_IS_REACTION_TAKEN())
        CPPTESK_DESERIALIZE_UNEXPECTED_REACTIONS();

    CPPTESK_STOP_LISTENER();
}

Примечания:
iface - имя входного или выходного интерфейса;
message_type - тип сообщения, используемый десериализатором данного интерфейса;
output_iface - имя интерфейса, к которому прикрепляется прослушиватель;
full_adapter_name - полное имя адаптера интерфейса, включающее название класса адаптера эталонной модели;
full_listener_name - имя метода пользовательского прослушивателя, включающее название класса адаптера эталонной модели;
listener_name - имя метода пользовательского прослушивателя без названия класса адаптера эталонной модели;
condition - условие детектирования реакции.