summaryrefslogtreecommitdiff
path: root/ACE/TAO/orbsvcs/tests/Event/lib/Supplier.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/orbsvcs/tests/Event/lib/Supplier.h')
-rw-r--r--ACE/TAO/orbsvcs/tests/Event/lib/Supplier.h188
1 files changed, 188 insertions, 0 deletions
diff --git a/ACE/TAO/orbsvcs/tests/Event/lib/Supplier.h b/ACE/TAO/orbsvcs/tests/Event/lib/Supplier.h
new file mode 100644
index 00000000000..c9ae8ba6049
--- /dev/null
+++ b/ACE/TAO/orbsvcs/tests/Event/lib/Supplier.h
@@ -0,0 +1,188 @@
+/* -*- C++ -*- */
+//=============================================================================
+/**
+ * @file Supplier.h
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan (coryan@cs.wustl.edu)
+ */
+//=============================================================================
+
+
+#ifndef EC_SUPPLIER_H
+#define EC_SUPPLIER_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/Task.h"
+#include "ace/OS_NS_time.h"
+
+/**
+ * @class EC_Supplier
+ *
+ * @brief Simple supplier object to implement EC tests.
+ *
+ * This class is a supplier 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.
+ * The driver can request that to this class to send a new event,
+ * a new shutdown event or to become "active" and send a number of
+ * events at a certain rate.
+ */
+class EC_Test_Export EC_Supplier : public POA_RtecEventComm::PushSupplier
+{
+public:
+ /**
+ * Constructor, specifies the types of events to send.
+ * Notice that the user can connect to the EC using other
+ * publications, this is useful for filtering tests.
+ */
+ EC_Supplier (EC_Driver *driver,
+ void* supplier_cookie);
+
+ /// The types of the event is chosen by the driver, based on the
+ /// cookie and the <event_number>
+ void send_event (int event_number);
+
+ /// Send <event> to the EC.
+ void send_event (const RtecEventComm::EventSet& event);
+
+ /// Set the event type and source in <event>
+ void send_event (int event_number,
+ const RtecEventComm::Event& event);
+
+ /// Send a shutdown event.
+ void send_shutdown (void);
+
+ /// Connect using a <supplier_admin> and publications (<qos>)
+ /// computed by the user
+ virtual void connect (
+ RtecEventChannelAdmin::SupplierAdmin_ptr supplier_admin,
+ const RtecEventChannelAdmin::SupplierQOS& qos,
+ int shutdown_event_type);
+
+ /// Connect using the current consumer_proxy (useful for reconnect test)
+ virtual void connect (
+ const RtecEventChannelAdmin::SupplierQOS& qos,
+ int shutdown_event_type);
+
+ /// Disconnect from the EC, also deactivates the object
+ void disconnect (void);
+
+ /// Disconnect from the EC, also deactivates the object
+ void shutdown (void);
+
+ /// Dump the results...
+ virtual void dump_results (const ACE_TCHAR* name,
+ ACE_UINT32 global_scale_factor);
+
+ /// Add our statistics to <stats>
+ void accumulate (ACE_Throughput_Stats& stats) const;
+
+ /// Return an event type to push....
+ void event_type (int event_number,
+ RtecEventComm::Event& event);
+
+ // = The PushSupplier methods
+ virtual void disconnect_push_supplier (void);
+
+private:
+ /// Class we forward to.
+ EC_Driver *driver_;
+
+ /// Magic cookie provided by the supplier to identify ourselves
+ void* cookie_;
+
+ /// Protect the internal state
+ TAO_SYNCH_MUTEX lock_;
+
+ /// Count the number of push() calls
+ int push_count_;
+
+ /// We talk to the EC (as a supplier) using this proxy.
+ RtecEventChannelAdmin::ProxyPushConsumer_var consumer_proxy_;
+
+ /// The time for the first event sent
+ ACE_hrtime_t throughput_start_;
+
+ /// Measure the elapsed time spent while sending the events.
+ ACE_Throughput_Stats throughput_;
+
+ int burst_count_;
+ int burst_size_;
+ int payload_size_;
+ int burst_pause_;
+
+ /// The test data.
+ int shutdown_event_type_;
+
+ /// The publications, used to select the events.
+ RtecEventChannelAdmin::SupplierQOS qos_;
+
+ /// Is the supplier active in the POA?
+ int is_active_;
+
+ /// Cache the object reference to speed up connect/disconnect calls
+ RtecEventComm::PushSupplier_var myself_;
+};
+
+// ****************************************************************
+
+/**
+ * @class EC_Supplier_Task
+ */
+class EC_Supplier_Task : public ACE_Task_Base
+{
+public:
+ /// Constructor
+ EC_Supplier_Task (EC_Supplier* supplier,
+ EC_Driver* driver,
+ void* cookie,
+ int burst_count,
+ int burst_size,
+ int burst_pause,
+ int payload_size,
+ int shutdown_event_type,
+ ACE_Thread_Manager* thr_mgr = 0);
+
+ /// The svc call
+ virtual int svc (void);
+
+private:
+ /// The supplier
+ EC_Supplier* supplier_;
+
+ /// The driver program
+ EC_Driver* driver_;
+
+ /// The magic cookie assigned to the supplier
+ void* cookie_;
+
+ /// Number of events "bursts"
+ int burst_count_;
+
+ /// The number of events in a "burst", i.e. between two calls to
+ /// sleep.
+ int burst_size_;
+
+ /// The sleep time (in usecs) between each burst
+ int burst_pause_;
+
+ /// The size of the payload in each event.
+ int payload_size_;
+
+ /// Define the shutdown event, invoked at the end of the loop.
+ int shutdown_event_type_;
+};
+
+#endif /* EC_SUPPLIER_H */