/* -*- C++ -*- */ // $Id$ // // ============================================================================ // // = DESCRIPTION // An example on custom marshaling in TAO. // // ============================================================================ #if !defined (ECM_CONSUMER_H) #define ECM_CONSUMER_H #include "ace/Task.h" #include "orbsvcs/Channel_Clients_T.h" class Driver; class Test_Consumer : public POA_RtecEventComm::PushConsumer { // // = TITLE // Receive the events. // // = DESCRIPTION public: Test_Consumer (Driver* driver, void* cookie); void connect (const char* name, int event_a, int event_b, RtecEventChannelAdmin::EventChannel_ptr ec, CORBA::Environment& _env); // This method connects the consumer to the EC. void disconnect (CORBA::Environment &_env); // Disconnect from the EC. virtual void push (const RtecEventComm::EventSet& events, CORBA::Environment &_env); virtual void disconnect_push_consumer (CORBA::Environment &); // 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, CORBA::Environment&); // 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, CORBA::Environment &_env); void disconnect_consumers (CORBA::Environment &_env); // 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 ACE_SYNCH_MUTEX recv_count_mutex_; int recv_count_; // How many events we have received. }; #endif /* ECM_CONSUMER_H */