diff options
Diffstat (limited to 'trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h')
-rw-r--r-- | trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h b/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h new file mode 100644 index 00000000000..1d0adde39fd --- /dev/null +++ b/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h @@ -0,0 +1,120 @@ +/* -*- C++ -*- */ +// $Id$ +// +// ============================================================================ +// +// = DESCRIPTION +// An example on custom marshaling in TAO. +// +// ============================================================================ + +#ifndef ECM_CONSUMER_H +#define ECM_CONSUMER_H + +#include "ace/Task.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/OS_NS_time.h" + +class Driver; + +class Test_Consumer : public POA_RtecEventComm::PushConsumer +{ + // + // = TITLE + // Receive the events. + // + // = DESCRIPTION +public: + Test_Consumer (Driver* driver, void* cookie); + + void connect (int event_a, + int event_b, + RtecEventChannelAdmin::EventChannel_ptr ec + ACE_ENV_ARG_DECL); + // This method connects the consumer to the EC. + + void disconnect (ACE_ENV_SINGLE_ARG_DECL); + // Disconnect from the EC. + + virtual void push (const RtecEventComm::EventSet& events + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); + virtual void disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + // The skeleton methods. + +private: + Driver* driver_; + // The main driver for the test. + + void* cookie_; + // A magic cookie passed by the driver that we pass back in our + // callbacks. + + RtecEventChannelAdmin::ProxyPushSupplier_var supplier_proxy_; + // We talk to the EC using this proxy. +}; + +class Driver +{ + // + // = TITLE + // + // = DESCRIPTION + // +public: + Driver (void); + + enum { + MAX_CONSUMERS = 16 + // Maximum number of consumers. + }; + + int run (int argc, char* argv[]); + // Execute the test. + + void push_consumer (void* consumer_cookie, + ACE_hrtime_t arrival, + const RtecEventComm::EventSet& events + ACE_ENV_ARG_DECL_NOT_USED); + // Callback method for consumers, if any of our consumers has + // received events it will invoke this method. + +private: + int parse_args (int argc, char* argv[]); + // parse the command line args + + void connect_consumers (RtecEventChannelAdmin::EventChannel_ptr local_ec + ACE_ENV_ARG_DECL); + void disconnect_consumers (ACE_ENV_SINGLE_ARG_DECL); + // Connect and disconnect the consumers. + +private: + Test_Consumer* consumers_[Driver::MAX_CONSUMERS]; + // The consumer array. + + int n_consumers_; + // The number of consumers. + + int event_count_; + // How many messages we will send in the suppliers + + int event_a_; + int event_b_; + // We send two types of events, with different contents. + + const char* pid_file_name_; + // The name of a file where the process stores its pid + + TAO_SYNCH_MUTEX recv_count_mutex_; + int recv_count_; + // How many events we have received. +}; + +#endif /* ECM_CONSUMER_H */ |