summaryrefslogtreecommitdiff
path: root/ACE/TAO/DevGuideExamples/Multithreading/GracefulShutdown/MessengerServer.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/DevGuideExamples/Multithreading/GracefulShutdown/MessengerServer.h')
-rw-r--r--ACE/TAO/DevGuideExamples/Multithreading/GracefulShutdown/MessengerServer.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/ACE/TAO/DevGuideExamples/Multithreading/GracefulShutdown/MessengerServer.h b/ACE/TAO/DevGuideExamples/Multithreading/GracefulShutdown/MessengerServer.h
new file mode 100644
index 00000000000..bd769b65ce7
--- /dev/null
+++ b/ACE/TAO/DevGuideExamples/Multithreading/GracefulShutdown/MessengerServer.h
@@ -0,0 +1,74 @@
+/* -*- C++ -*- $Id$ */
+
+#ifndef MESSENGERSERVER_H_
+#define MESSENGERSERVER_H_
+
+#include "MessengerS.h"
+#include "ace/Task.h"
+#include <iostream>
+
+//Class MessengerServer
+class MessengerServer
+{
+public:
+ //Constructor
+ MessengerServer (CORBA::ORB_ptr orb);
+
+ //Destructor
+ virtual ~MessengerServer (void);
+
+ // parse arguments
+ int parse_args (int argc, ACE_TCHAR* argv[]);
+
+ // run the ORB's event loop continuously
+ void run ();
+
+ // run the ORB's event loop for some number of seconds
+ void run (int seconds);
+
+ // handle ORB events in a polling loop for some number of iterations
+ void poll (int iterations);
+
+ // schedule a shutdown timer with the ORB's reactor to timeout
+ // after some seconds
+ void schedule_shutdown_timer (int seconds);
+
+ // spawn thread to monitor console and shutdown on console input
+ void shutdown_on_console_input ();
+
+ enum ShutdownMethod {
+ s_client_call, // shutdown on client invocation
+ s_polling_loop, // shutdown after some iterations through loop
+ s_timer, // schedule a timer to shutdown
+ s_console_input, // shutdown on console input
+ s_run_time_value // use CORBA::ORB::run() with time value
+ };
+
+ // Task to monitor console input.
+ class ConsoleMonitor : public ACE_Task_Base
+ {
+ public:
+ ConsoleMonitor (CORBA::ORB_ptr orb)
+ : orb_(CORBA::ORB::_duplicate(orb))
+ {
+ }
+
+ virtual int svc()
+ {
+ char c;
+ std::cin.get (c);
+ orb_->shutdown (true);
+ return 0;
+ }
+ private:
+ CORBA::ORB_var orb_;
+ };
+
+private:
+
+ CORBA::ORB_var orb_;
+ ConsoleMonitor * monitor_;
+
+};
+
+#endif /* MESSENGERSERVER_H_ */