summaryrefslogtreecommitdiff
path: root/TAO/examples/Event_Comm/consumer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/Event_Comm/consumer.cpp')
-rw-r--r--TAO/examples/Event_Comm/consumer.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/TAO/examples/Event_Comm/consumer.cpp b/TAO/examples/Event_Comm/consumer.cpp
new file mode 100644
index 00000000000..55b157feaf0
--- /dev/null
+++ b/TAO/examples/Event_Comm/consumer.cpp
@@ -0,0 +1,132 @@
+// $Id$
+
+#include "Consumer_Handler.h"
+#include "Consumer_Input_Handler.h"
+
+ACE_RCSID(Consumer, consumer, "$Id$")
+
+class Consumer : public ACE_Event_Handler, public ShutdownCallback
+{
+ // = TITLE
+ // Consumer driver for the Publish/Subscribe example.
+ //
+ // = DESCRIPTION
+ // The Consumer holds the <Consumer_Input_Handler> and
+ // <Cosumer_Handler> objects.
+public:
+ // = Initialization and termination methods.
+ Consumer (void);
+ // Constructor.
+
+ ~Consumer (void);
+ // Destructor.
+
+ int initialize (int argc, char *argv[]);
+ // Initialization method.
+
+ int run (void);
+ // Execute the consumer;
+
+ virtual void close (void);
+ // Shutdown the consumer.
+
+private:
+ virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
+ // Signal handler method.
+
+ Consumer_Input_Handler ih_;
+ // Handler for keyboard input.
+
+ Consumer_Handler ch_;
+ // Handler for CORBA Consumer.
+};
+
+Consumer::Consumer (void)
+{
+ // No-Op.
+}
+
+Consumer::~Consumer (void)
+{
+ // No-Op.
+}
+
+int
+Consumer::handle_signal (int signum,
+ siginfo_t *,
+ ucontext_t *)
+{
+ ACE_DEBUG ((LM_DEBUG,
+ "%S\n",
+ signum));
+
+ // Indicate that the consumer initiated the shutdown.
+ this->ih_.consumer_initiated_shutdown (1);
+
+ this->close ();
+
+ return 0;
+}
+
+void
+Consumer::close (void)
+{
+ // clean up the input handler.
+ ih_.close ();
+ // Shut down the ORB
+ ch_.close ();
+}
+
+int
+Consumer::run (void)
+{
+ // Run the <Consumer_Handler>'s ORB.
+ return ch_.run ();
+}
+
+int
+Consumer::initialize (int argc, char *argv[])
+{
+ // Initialize the <Consumer_Handler>.
+ if (this->ch_.init (argc, argv, this) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "Consumer_Handler failed to initialize\n"),
+ -1);
+ // Initialize the <Consumer_Input_Handler>.
+ else if (this->ih_.initialize (&this->ch_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "Consumer_Input_Handler failed to initialize\n"),
+ -1);
+ else if (this->ch_.reactor ()->register_handler (SIGINT,
+ this) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "register_handler"),
+ -1);
+ else
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ // Initialize the supplier and consumer object references.
+ Consumer consumer;
+
+ if (consumer.initialize (argc, argv) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "Consumer init failed\n"),
+ 1);
+
+ // Loop forever handling events.
+ if (consumer.run () == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "Consumer run failed\n"),
+ 1);
+
+ return 0;
+}