diff options
Diffstat (limited to 'TAO/orbsvcs/tests/Event/lib/Counting_Supplier.h')
-rw-r--r-- | TAO/orbsvcs/tests/Event/lib/Counting_Supplier.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Event/lib/Counting_Supplier.h b/TAO/orbsvcs/tests/Event/lib/Counting_Supplier.h new file mode 100644 index 00000000000..8e6f940daa6 --- /dev/null +++ b/TAO/orbsvcs/tests/Event/lib/Counting_Supplier.h @@ -0,0 +1,129 @@ +/* -*- C++ -*- */ +//============================================================================= +/** + * @file Counting_Supplier.h + * + * $Id$ + * + * @author Carlos O'Ryan (coryan@cs.wustl.edu) + */ +//============================================================================= + + +#ifndef EC_COUNTING_SUPPLIER_H +#define EC_COUNTING_SUPPLIER_H + +#include "ectest_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "orbsvcs/Channel_Clients_T.h" +#include "orbsvcs/RtecEventChannelAdminC.h" +#include "ace/Task.h" + +/** + * @class EC_Counting_Supplier + * + * @brief Simple supplier object + * + * This class is a supplier of events. + */ +class EC_Test_Export EC_Counting_Supplier : public POA_RtecEventComm::PushSupplier +{ +public: + /// Constructor + EC_Counting_Supplier (void); + + // = The RtecEventComm::PushSupplier methods + + /** + * Connect as a consumer to receive a TIMEOUT every <period> + * milliseconds. + * The class pushes an event (in its supplier role) every time it + * receives the timeout. + */ + void activate (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin, + int period + ACE_ENV_ARG_DECL); + void deactivate (ACE_ENV_SINGLE_ARG_DECL); + + /// Simple connect/disconnect methods.. + void connect (RtecEventChannelAdmin::SupplierAdmin_ptr supplier_admin, + int published_source, + int published_type, + int event_source, + int event_type + ACE_ENV_ARG_DECL); + void connect (RtecEventChannelAdmin::SupplierAdmin_ptr supplier_admin, + const RtecEventChannelAdmin::SupplierQOS &qos + ACE_ENV_ARG_DECL); + void disconnect (ACE_ENV_SINGLE_ARG_DECL); + + /// The Consumer side methods. + void push (const RtecEventComm::EventSet& events + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); + void disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + + /// The skeleton methods. + virtual void disconnect_push_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + + /// Count the number of events sent + CORBA::ULong event_count; + + /// Count the number of disconnect_push_supplier calls + CORBA::ULong disconnect_count; + +private: + /// Adapter... + ACE_PushConsumer_Adapter<EC_Counting_Supplier> consumer_adapter_; + + /// The adapter proxy... + RtecEventChannelAdmin::ProxyPushSupplier_var supplier_proxy_; + + /// Our proxy + RtecEventChannelAdmin::ProxyPushConsumer_var consumer_proxy_; + + /// The event source + int event_source_; + + /// The event type + int event_type_; +}; + +class EC_Test_Export EC_Counting_Supplier_Task : public ACE_Task_Base +{ +public: + /// Create the task... + EC_Counting_Supplier_Task (EC_Counting_Supplier *supplier); + + // = Check the ACE_Task_Base documentation. + int svc (void); + + void stop (void); + CORBA::ULong push_count (void); + + /// Run a single iteration of the test + void run (ACE_ENV_SINGLE_ARG_DECL); + +private: + /// The supplier we are turning into an active object + EC_Counting_Supplier *supplier_; + + /// The event we push through the supplier + RtecEventComm::EventSet event_; + + /// Set to 1 when the test must stop + int stop_flag_; + + /// Count the number of push() calls + CORBA::ULong push_count_; + + TAO_SYNCH_MUTEX lock_; +}; + +#endif /* ECT_SUPPLIER_H */ |