summaryrefslogtreecommitdiff
path: root/ACE/apps/Gateway/Gateway/Event_Channel.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/Gateway/Gateway/Event_Channel.h')
-rw-r--r--ACE/apps/Gateway/Gateway/Event_Channel.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/ACE/apps/Gateway/Gateway/Event_Channel.h b/ACE/apps/Gateway/Gateway/Event_Channel.h
new file mode 100644
index 00000000000..64788cc0cdb
--- /dev/null
+++ b/ACE/apps/Gateway/Gateway/Event_Channel.h
@@ -0,0 +1,135 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// gateway
+//
+// = FILENAME
+// Event_Channel.h
+//
+// = AUTHOR
+// Doug Schmidt <schmidt@cs.wustl.edu>
+//
+// ============================================================================
+
+#ifndef ACE_EVENT_CHANNEL
+#define ACE_EVENT_CHANNEL
+
+#include "Connection_Handler_Connector.h"
+#include "Connection_Handler_Acceptor.h"
+#include "Consumer_Dispatch_Set.h"
+#include "Event_Forwarding_Discriminator.h"
+#include "ace/svc_export.h"
+
+typedef ACE_Null_Mutex MAP_MUTEX;
+
+class ACE_Svc_Export Event_Channel : public ACE_Event_Handler
+{
+ // = TITLE
+ // Define a generic Event_Channel.
+ //
+ // = DESCRIPTION
+ // The inspiration for this class is derived from the CORBA COS
+ // Event Channel, though the design is simplified.
+ //
+ // We inherit from <ACE_Event_Handler> so that we can be
+ // registered with an <ACE_Reactor> to handle timeouts.
+public:
+ // = Initialization and termination methods.
+ Event_Channel (void);
+ ~Event_Channel (void);
+
+ virtual int open (void * = 0);
+ // Open the channel.
+
+ virtual int close (u_long = 0);
+ // Close down the Channel.
+
+ // = Proxy management methods.
+ int initiate_connection_connection (Connection_Handler *, int sync_directly = 0);
+ // Initiate the connection of the <Connection_Handler> to its peer.
+ // Second paratemer is used for thread connection-handler which will
+ // block the connecting procedure directly, need not care
+ // Options::blocking_semantics().
+
+ int complete_connection_connection (Connection_Handler *);
+ // Complete the initialization of the <Connection_Handler> once it's
+ // connected to its Peer.
+
+ int reinitiate_connection_connection (Connection_Handler *);
+ // Reinitiate a connection asynchronously when the Peer fails.
+ int cancel_connection_connection (Connection_Handler *);
+ // Cancel a asynchronous connection.
+
+ int bind_proxy (Connection_Handler *);
+ // Bind the <Connection_Handler> to the <connection_map_>.
+
+ int find_proxy (ACE_INT32 connection_id,
+ Connection_Handler *&);
+ // Locate the <Connection_Handler> with <connection_id>.
+
+ int subscribe (const Event_Key &event_addr,
+ Consumer_Dispatch_Set *cds);
+ // Subscribe the <Consumer_Dispatch_Set> to receive events that
+ // match <Event_Key>.
+
+ // = Event processing entry point.
+ virtual int put (ACE_Message_Block *mb,
+ ACE_Time_Value * = 0);
+ // Pass <mb> to the Event Channel so it can forward it to Consumers.
+
+ void initiate_connector (void);
+ // Actively initiate connections to the Peers.
+
+ int initiate_acceptors (void);
+ // Passively initiate the <Peer_Acceptor>s for Consumer and
+ // Suppliers.
+
+private:
+ int parse_args (int argc, char *argv[]);
+ // Parse the command-line arguments.
+
+ // = Methods for handling events.
+ void routing_event (Event_Key *event_key,
+ ACE_Message_Block *data);
+ // Forwards the <data> to Consumer that have registered to receive
+ // it, based on addressing information in the <event_key>.
+
+ void subscription_event (ACE_Message_Block *data);
+ // Add a Consumer subscription.
+
+ int compute_performance_statistics (void);
+ // Perform timer-based performance profiling.
+
+ virtual int handle_timeout (const ACE_Time_Value &,
+ const void *arg);
+ // Periodically callback to perform timer-based performance
+ // profiling.
+
+ Connection_Handler_Connector connector_;
+ // Used to establish the connections actively.
+
+ Connection_Handler_Acceptor supplier_acceptor_;
+ // Used to establish connections passively and create Suppliers.
+
+ Connection_Handler_Acceptor consumer_acceptor_;
+ // Used to establish connections passively and create Consumers.
+
+ // = Make life easier by defining typedefs.
+ typedef ACE_Map_Manager<CONNECTION_ID, Connection_Handler *, MAP_MUTEX>
+ CONNECTION_MAP;
+ typedef ACE_Map_Iterator<CONNECTION_ID, Connection_Handler *, MAP_MUTEX>
+ CONNECTION_MAP_ITERATOR;
+ typedef ACE_Map_Entry<CONNECTION_ID, Connection_Handler *>
+ CONNECTION_MAP_ENTRY;
+
+ CONNECTION_MAP connection_map_;
+ // Table that maps <CONNECTION_ID>s to <Connection_Handler> *'s.
+
+ Event_Forwarding_Discriminator efd_;
+ // Map that associates an event to a set of <Consumer_Handler> *'s.
+};
+
+#endif /* ACE_EVENT_CHANNEL */