summaryrefslogtreecommitdiff
path: root/apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp')
-rw-r--r--apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp b/apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp
new file mode 100644
index 00000000000..7133a8c8749
--- /dev/null
+++ b/apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp
@@ -0,0 +1,114 @@
+/* -*- C++ -*- */
+// @(#)consumer.cpp 1.1 10/18/96
+
+// Consumer driver for the Orbix Notification example.
+
+#include "ace/Log_Msg.h"
+#include "Notification_Receiver_Handler.h"
+#include "Input_Handler.h"
+
+#if defined (ACE_HAS_ORBIX)
+
+class Consumer : public ACE_Event_Handler
+{
+public:
+ Consumer (int argc, char *argv[]);
+ ~Consumer (void);
+
+ void run (void);
+ // Execute the consumer;
+
+private:
+ virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
+
+ virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask);
+
+ Input_Handler *ih_;
+ // Handler for keyboard input.
+
+ Notification_Receiver_Handler *nrh_;
+ // Handler for CORBA Consumer.
+
+ ACE_Service_Config daemon_;
+ // ACE server event-loop mechanism.
+};
+
+int
+Consumer::handle_close (ACE_HANDLE, ACE_Reactor_Mask)
+{
+ ACE_DEBUG ((LM_DEBUG, "closing down Consumer\n"));
+ return 0;
+}
+
+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);
+
+ // Shut down the event loop.
+ ACE_Service_Config::end_reactor_event_loop ();
+ return 0;
+}
+
+// Run the event loop until someone calls
+// calls ACE_Service_Config::end_reactor_event_loop().
+
+void
+Consumer::run (void)
+{
+ if (ACE_Service_Config::run_reactor_event_loop () == -1)
+ ACE_ERROR ((LM_ERROR, "%p\n", "run_reactor_event_loop"));
+}
+
+Consumer::Consumer (int argc, char *argv[])
+ : ih_ (0),
+ nrh_ (0)
+{
+ // Initialize the server.
+ if (this->daemon_.open (argc, argv) == -1)
+ {
+ if (errno == ENOENT) // There's no svc.conf file, so use static linking...
+ {
+ ACE_DEBUG ((LM_DEBUG, "no config file, using static binding\n"));
+ // The constructor registers the handlers...
+ this->nrh_ = new Notification_Receiver_Handler (argc, argv);
+ ACE_ASSERT (this->nrh_ != 0);
+ this->ih_ = new Input_Handler (this->nrh_);
+ ACE_ASSERT (this->ih_ != 0);
+ }
+ else
+ ACE_ERROR ((LM_ERROR, "%p\n%a", "open", 1));
+ }
+
+ if (ACE_Service_Config::reactor ()->register_handler (SIGINT, this) == -1)
+ ACE_ERROR ((LM_ERROR, "%p\n", "register_handler"));
+}
+
+Consumer::~Consumer (void)
+{
+ // Free up the handlers if they were statically bound.
+ this->ih_->handle_close ();
+ this->nrh_->handle_close ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ // Initialize the supplier and consumer object references.
+ Consumer consumer (argc, argv);
+
+ // Loop forever handling events.
+ consumer.run ();
+
+ return 0;
+}
+#else /* !defined ACE_HAS_ORBIX */
+int
+main (int argc, char *argv[])
+{
+ ACE_ERROR_RETURN ((LM_ERROR, "you must have Orbix to run application %s\n", argv[0]), 1);
+}
+#endif /* ACE_HAS_ORBIX */