diff options
Diffstat (limited to 'TAO/orbsvcs/examples/Notify/Subscribe/Subscribe.h')
-rw-r--r-- | TAO/orbsvcs/examples/Notify/Subscribe/Subscribe.h | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/TAO/orbsvcs/examples/Notify/Subscribe/Subscribe.h b/TAO/orbsvcs/examples/Notify/Subscribe/Subscribe.h new file mode 100644 index 00000000000..126b842a4ca --- /dev/null +++ b/TAO/orbsvcs/examples/Notify/Subscribe/Subscribe.h @@ -0,0 +1,246 @@ +/* -*- C++ -*- */ +// $Id$ +// ========================================================================== +// +// = FILENAME +// Subscribe.h +// +// = DESCRIPTION +// Class to demo structured event subscription. +// +// = AUTHOR +// Pradeep Gore <pradeep@cs.wustl.edu> +// +// ========================================================================== + +#ifndef NOTIFY_SUBSCRIBE_CLIENT_H +#define NOTIFY_SUBSCRIBE_CLIENT_H + +#include "orbsvcs/CosNotifyChannelAdminS.h" +#include "orbsvcs/CosNotifyCommC.h" +#include "orbsvcs/CosNamingC.h" + +class Subscribe_StructuredPushConsumer; +class Subscribe_StructuredPushSupplier; + +class Subscribe +{ + // = TITLE + // Subscribe + // = DESCRIPTION + // Shows how consumers subscribe for events. + + public: + // = Initialization and Termination + Subscribe (void); + ~Subscribe (); + + void init (int argc, char *argv [] ACE_ENV_ARG_DECL); + // Init the Client. + + void run (ACE_ENV_SINGLE_ARG_DECL); + // Run the demo. + + void done (void); + // Called when all events we are waiting for have occured. + + protected: + void init_ORB (int argc, char *argv [] ACE_ENV_ARG_DECL); + // Initializes the ORB. + + void resolve_naming_service (ACE_ENV_SINGLE_ARG_DECL); + // Try to get hold of a running naming service. + + void resolve_Notify_factory (ACE_ENV_SINGLE_ARG_DECL); + // Try to resolve the Notify factory from the Naming service. + + void create_EC (ACE_ENV_SINGLE_ARG_DECL); + // Create an EC. + + void create_supplieradmin(ACE_ENV_SINGLE_ARG_DECL); + // Create the Supplier Admin. + + void create_consumeradmin (ACE_ENV_SINGLE_ARG_DECL); + // Create the Consumer Admin. + + void create_consumers (ACE_ENV_SINGLE_ARG_DECL); + // Create and initialize the consumers. + + void create_suppliers (ACE_ENV_SINGLE_ARG_DECL); + // create and initialize the suppliers. + + void send_events (ACE_ENV_SINGLE_ARG_DECL); + // send the events. + + // = Data Members + PortableServer::POA_var root_poa_; + // Reference to the root poa. + + CORBA::ORB_var orb_; + // The ORB that we use. + + CosNaming::NamingContext_var naming_context_; + // Handle to the name service. + + CosNotifyChannelAdmin::EventChannelFactory_var notify_factory_; + // Channel factory. + + CosNotifyChannelAdmin::EventChannel_var ec_; + // The one channel that we create using the factory. + + CosNotifyChannelAdmin::InterFilterGroupOperator ifgop_; + // The group operator between admin-proxy's. + + CosNotification::QoSProperties initial_qos_; + // Initial qos specified to the factory when creating the EC. + + CosNotification::AdminProperties initial_admin_; + // Initial admin props specified to the factory when creating the EC. + + CosNotifyChannelAdmin::ConsumerAdmin_var consumer_admin_; + // The consumer admin used by consumers. + + CosNotifyChannelAdmin::SupplierAdmin_var supplier_admin_; + // The supplier admin used by suppliers. + + Subscribe_StructuredPushConsumer* consumer_1_; + Subscribe_StructuredPushConsumer* consumer_2_; + + Subscribe_StructuredPushSupplier* supplier_1_; + Subscribe_StructuredPushSupplier* supplier_2_; + + CORBA::Boolean done_; + // Set this flag to exit the run loop. +}; + +/*****************************************************************/ +class Subscribe_StructuredPushConsumer + : public POA_CosNotifyComm::StructuredPushConsumer +{ + // = TITLE + // Subscribe_StructuredPushConsumer + // + // = DESCRIPTION + // Consumer for the Subscribe example. + // + + public: + // = Initialization and Termination code + Subscribe_StructuredPushConsumer (Subscribe* subscribe); + // Constructor. + + void connect (CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin ACE_ENV_ARG_DECL); + // Connect the Consumer to the EventChannel. + // Creates a new proxy supplier and connects to it. + + virtual void disconnect (ACE_ENV_SINGLE_ARG_DECL); + // Disconnect from the supplier. + + CosNotifyChannelAdmin::StructuredProxyPushSupplier_ptr get_proxy_supplier (void); + // Accessor for the Proxy that we're connected to. + +protected: + // = Data members + CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxy_supplier_; + // The proxy that we are connected to. + + CosNotifyChannelAdmin::ProxyID proxy_supplier_id_; + // The proxy_supplier id. + + Subscribe* subscribe_; + // callback <done> + + // = Methods + virtual ~Subscribe_StructuredPushConsumer (void); + // Destructor + + // = NotifyPublish method + virtual void offer_change ( + const CosNotification::EventTypeSeq & added, + const CosNotification::EventTypeSeq & removed + ACE_ENV_ARG_DECL + ) + ACE_THROW_SPEC (( + CORBA::SystemException, + CosNotifyComm::InvalidEventType + )); + + // = StructuredPushSupplier methods + virtual void push_structured_event ( + const CosNotification::StructuredEvent & notification + ACE_ENV_ARG_DECL + ) + ACE_THROW_SPEC (( + CORBA::SystemException, + CosEventComm::Disconnected + )); + + virtual void disconnect_structured_push_consumer ( + ACE_ENV_SINGLE_ARG_DECL + ) + ACE_THROW_SPEC (( + CORBA::SystemException + )); +}; + +/*****************************************************************/ + +class Subscribe_StructuredPushSupplier + : public POA_CosNotifyComm::StructuredPushSupplier +{ + // = TITLE + // Subscribe_StructuredPushSupplier + // + // = DESCRIPTION + // Supplier for the SUBSCRIBE example. + // + public: + // = Initialization and Termination code + Subscribe_StructuredPushSupplier (void); + // Constructor. + + void connect (CosNotifyChannelAdmin::SupplierAdmin_ptr supplier_admin + ACE_ENV_ARG_DECL); + // Connect the Supplier to the EventChannel. + // Creates a new proxy consumer and connects to it. + + void disconnect (ACE_ENV_SINGLE_ARG_DECL); + // Disconnect from the supplier. + + virtual void send_event (const CosNotification::StructuredEvent& event + ACE_ENV_ARG_DECL); + // Send one event. + +protected: + // = Data members + CosNotifyChannelAdmin::StructuredProxyPushConsumer_var proxy_consumer_; + // The proxy that we are connected to. + + CosNotifyChannelAdmin::ProxyID proxy_consumer_id_; + // This supplier's id. + + // = Protected Methods + virtual ~Subscribe_StructuredPushSupplier (); + // Destructor + + // = NotifySubscribe + virtual void subscription_change ( + const CosNotification::EventTypeSeq & added, + const CosNotification::EventTypeSeq & removed + ACE_ENV_ARG_DECL + ) + ACE_THROW_SPEC (( + CORBA::SystemException, + CosNotifyComm::InvalidEventType + )); + + // = StructuredPushSupplier method + virtual void disconnect_structured_push_supplier ( + ACE_ENV_SINGLE_ARG_DECL + ) + ACE_THROW_SPEC (( + CORBA::SystemException + )); +}; + +#endif /* NOTIFY_SUBSCRIBE_CLIENT_H */ |