summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Event/lib/Consumer.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/Event/lib/Consumer.h')
-rw-r--r--TAO/orbsvcs/tests/Event/lib/Consumer.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Event/lib/Consumer.h b/TAO/orbsvcs/tests/Event/lib/Consumer.h
new file mode 100644
index 00000000000..439b95f9747
--- /dev/null
+++ b/TAO/orbsvcs/tests/Event/lib/Consumer.h
@@ -0,0 +1,121 @@
+/* -*- C++ -*- */
+//=============================================================================
+/**
+ * @file Consumer.h
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan (coryan@cs.wustl.edu)
+ */
+//=============================================================================
+
+
+#ifndef EC_CONSUMER_H
+#define EC_CONSUMER_H
+
+#include "Driver.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/RtecEventCommS.h"
+#include "orbsvcs/RtecEventChannelAdminC.h"
+#include "ace/OS_NS_time.h"
+
+/**
+ * @class EC_Consumer
+ *
+ * @brief Simple consumer object to implement EC tests.
+ *
+ * This class is a consumer of events.
+ * The class is just a helper to simplify common tasks in EC
+ * tests, such as subscribing for a range of events, disconnecting
+ * from the EC, informing the driver of shutdown messages, etc.
+ * There are several ways to connect and disconnect this class,
+ * and it is up to the driver program to use the right one.
+ */
+class EC_Test_Export EC_Consumer : public POA_RtecEventComm::PushConsumer
+{
+public:
+ /// Constructor
+ EC_Consumer (EC_Driver* driver, void* cookie);
+
+ /// The driver program can build the QoS attributes and obtain the
+ /// ConsumerAdmin, we do the rest.
+ virtual void connect (
+ RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin,
+ const RtecEventChannelAdmin::ConsumerQOS& qos,
+ int shutdown_event_type
+ ACE_ENV_ARG_DECL);
+
+ /**
+ * The driver program can build the QoS attributes and we use
+ * whatevet supplier_proxy we already have (useful for reconnection
+ * tests).
+ */
+ virtual void connect (
+ const RtecEventChannelAdmin::ConsumerQOS& qos,
+ int shutdown_event_type
+ ACE_ENV_ARG_DECL);
+
+ /// returns 0 if it is not connected
+ virtual int connected (void) const;
+
+ /// The application can invoke this method to disconnect from the EC
+ /// and deactivate this class.
+ void disconnect (ACE_ENV_SINGLE_ARG_DECL);
+
+ /// The application is shutting down, deactivate the consumer.
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL);
+
+ /// Accumulate our statistics to the totals.
+ void accumulate (ACE_Throughput_Stats& throughput) const;
+
+ /// Printout the statistics
+ virtual void dump_results (const char* name,
+ ACE_UINT32 global_scale_factor);
+
+ // = The RtecEventComm::PushConsumer methods
+
+ /// The skeleton methods.
+ 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));
+
+private:
+ /// The main driver for the test.
+ EC_Driver* driver_;
+
+ /// A magic cookie passed by the driver that we pass back in our
+ /// callbacks.
+ void* cookie_;
+
+ /// We talk to the EC using this proxy.
+ RtecEventChannelAdmin::ProxyPushSupplier_var supplier_proxy_;
+
+ /// Protect internal state
+ TAO_SYNCH_MUTEX lock_;
+
+ /// The timestamp for the first message received
+ ACE_hrtime_t throughput_start_;
+
+ /// Used for reporting stats
+ ACE_Throughput_Stats throughput_;
+
+ /// The number of push() calls
+ int push_count_;
+
+ /// The type used to indicate shutdown
+ int shutdown_event_type_;
+
+ /// Is the consumer active in the POA?
+ int is_active_;
+
+ /// Cache the object reference to speed up connect/disconnect calls.
+ RtecEventComm::PushConsumer_var myself_;
+};
+
+#endif /* ECT_CONSUMER_H */