//============================================================================= /** * @file DOVE_Supplier.h * * A wrapper around the event service initialization and marshalling. * * * @author Michael Kircher (mk1@cs.wustl.edu) Chris Gill (cdgill@cs.wustl.edu) */ //============================================================================= #include "orbsvcs/RtecEventChannelAdminC.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "orbsvcs/RtecEventCommS.h" #include "orbsvcs/Event_Utilities.h" #include "orbsvcs/Event_Service_Constants.h" #include "orbsvcs/Scheduler_Factory.h" #ifndef DOVE_SUPPLIER_H #define DOVE_SUPPLIER_H #define SOURCE_ID 123 class DOVE_Supplier { public: /// Constructor. DOVE_Supplier (); /// Destructor. ~DOVE_Supplier (void); /// Initialize the ORB and the connection to the Name Service int init (void); /// Connect to the event service. int connect (const char * MIB_name = 0, const char* es_name = 0, const char * ss_name = 0, ACE_Scheduler_Factory::POD_RT_Info * pod_rt_info = 0); /// Perform all post-connection-establishment processing. void connected (); /// Disconnect from the event service. void disconnect (); /// Notify the consumer proxy that we have events void notify (CORBA::Any& message); /// Use the next connection in the list of established connections. void use_next_connection (); /// Use the previous connection in the list of established connections. void use_prev_connection (); private: // The following Supplier is needed because DOVE_Supplier has not // inherited from PushSupplier. class Internal_DOVE_Supplier : public POA_RtecEventComm::PushSupplier { friend class DOVE_Supplier; public: virtual void disconnect_push_supplier (void) { } private: Internal_DOVE_Supplier (DOVE_Supplier* impl_ptr); DOVE_Supplier* impl_ptr_; }; private: struct Connection_Params { const char * es_name_; const char * ss_name_; RtecEventChannelAdmin::EventChannel_var eventChannel_var_; RtecEventChannelAdmin::SupplierAdmin_var supplierAdmin_var_; RtecEventChannelAdmin::ProxyPushConsumer_var proxyPushConsumer_var_; RtecScheduler::Scheduler_var scheduler_var_; RtecScheduler::handle_t rt_info_; ACE_Scheduler_Factory::POD_RT_Info pod_rt_info_; }; /// Get the event channel reference. int get_EventChannel (); /// Get the scheduler reference. int get_Scheduler (); /// Connect the the supplier with the event channel. int connect_Supplier (); /// Access the default rt_info singleton. static ACE_Scheduler_Factory::POD_RT_Info * pod_rt_info_instance (); static ACE_Scheduler_Factory::POD_RT_Info * pod_rt_info_instance_; // Object initialization flags int initialized_; int connected_; Connection_Params ** connection_params_list_; Connection_Params * current_connection_params_; int connection_count_; int current_connection_index_; // = ORB, ORB Services adminstration references. CosNaming::NamingContext_var namingContext_var_; PortableServer::POA_var root_POA_var_; PortableServer::POAManager_var poa_manager_; Internal_DOVE_Supplier* internal_DOVE_Supplier_ptr_; /// Keep the name of the MIB around. const char * MIB_name_; }; #endif /* DOVE_SUPPLIER_H */