summaryrefslogtreecommitdiff
path: root/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h')
-rw-r--r--trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h b/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h
new file mode 100644
index 00000000000..1d0adde39fd
--- /dev/null
+++ b/trunk/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Consumer.h
@@ -0,0 +1,120 @@
+/* -*- C++ -*- */
+// $Id$
+//
+// ============================================================================
+//
+// = DESCRIPTION
+// An example on custom marshaling in TAO.
+//
+// ============================================================================
+
+#ifndef ECM_CONSUMER_H
+#define ECM_CONSUMER_H
+
+#include "ace/Task.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/Channel_Clients_T.h"
+#include "orbsvcs/RtecEventChannelAdminC.h"
+#include "ace/OS_NS_time.h"
+
+class Driver;
+
+class Test_Consumer : public POA_RtecEventComm::PushConsumer
+{
+ //
+ // = TITLE
+ // Receive the events.
+ //
+ // = DESCRIPTION
+public:
+ Test_Consumer (Driver* driver, void* cookie);
+
+ void connect (int event_a,
+ int event_b,
+ RtecEventChannelAdmin::EventChannel_ptr ec
+ ACE_ENV_ARG_DECL);
+ // This method connects the consumer to the EC.
+
+ void disconnect (ACE_ENV_SINGLE_ARG_DECL);
+ // Disconnect from the EC.
+
+ 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));
+ // The skeleton methods.
+
+private:
+ Driver* driver_;
+ // The main driver for the test.
+
+ void* cookie_;
+ // A magic cookie passed by the driver that we pass back in our
+ // callbacks.
+
+ RtecEventChannelAdmin::ProxyPushSupplier_var supplier_proxy_;
+ // We talk to the EC using this proxy.
+};
+
+class Driver
+{
+ //
+ // = TITLE
+ //
+ // = DESCRIPTION
+ //
+public:
+ Driver (void);
+
+ enum {
+ MAX_CONSUMERS = 16
+ // Maximum number of consumers.
+ };
+
+ int run (int argc, char* argv[]);
+ // Execute the test.
+
+ void push_consumer (void* consumer_cookie,
+ ACE_hrtime_t arrival,
+ const RtecEventComm::EventSet& events
+ ACE_ENV_ARG_DECL_NOT_USED);
+ // Callback method for consumers, if any of our consumers has
+ // received events it will invoke this method.
+
+private:
+ int parse_args (int argc, char* argv[]);
+ // parse the command line args
+
+ void connect_consumers (RtecEventChannelAdmin::EventChannel_ptr local_ec
+ ACE_ENV_ARG_DECL);
+ void disconnect_consumers (ACE_ENV_SINGLE_ARG_DECL);
+ // Connect and disconnect the consumers.
+
+private:
+ Test_Consumer* consumers_[Driver::MAX_CONSUMERS];
+ // The consumer array.
+
+ int n_consumers_;
+ // The number of consumers.
+
+ int event_count_;
+ // How many messages we will send in the suppliers
+
+ int event_a_;
+ int event_b_;
+ // We send two types of events, with different contents.
+
+ const char* pid_file_name_;
+ // The name of a file where the process stores its pid
+
+ TAO_SYNCH_MUTEX recv_count_mutex_;
+ int recv_count_;
+ // How many events we have received.
+};
+
+#endif /* ECM_CONSUMER_H */