diff options
Diffstat (limited to 'examples/ASX/Event_Server/Event_Server/event_server.cpp')
-rw-r--r-- | examples/ASX/Event_Server/Event_Server/event_server.cpp | 252 |
1 files changed, 0 insertions, 252 deletions
diff --git a/examples/ASX/Event_Server/Event_Server/event_server.cpp b/examples/ASX/Event_Server/Event_Server/event_server.cpp deleted file mode 100644 index fcc0b9bb458..00000000000 --- a/examples/ASX/Event_Server/Event_Server/event_server.cpp +++ /dev/null @@ -1,252 +0,0 @@ -// $Id$ - -// Main driver program for the event server example. - -#include "ace/Stream.h" -#include "ace/Service_Config.h" -#include "Options.h" -#include "Consumer_Router.h" -#include "Event_Analyzer.h" -#include "Supplier_Router.h" - -ACE_RCSID(Event_Server, event_server, "$Id$") - -// Typedef these components to handle multi-threading correctly. -typedef ACE_Stream<ACE_SYNCH> MT_Stream; -typedef ACE_Module<ACE_SYNCH> MT_Module; - -class Event_Server : public ACE_Sig_Adapter -{ - // = TITLE - // Run the logic for the <Event_Server>. - // - // = DESCRIPTION - // In addition to packaging the <Event_Server> components, this - // class also handles SIGINT and terminate the entire - // application process. There are several ways to terminate - // this application process: - // - // 1. Send a SIGINT signal (e.g., via ^C) - // 2. Type any character on the STDIN. - // - // Note that by inheriting from the <ACE_Sig_Adapter> we can - // shutdown the <ACE_Reactor> cleanly when a SIGINT is - // generated. -public: - Event_Server (void); - // Constructor. - - int svc (void); - // Run the event-loop for the event server. - -private: - virtual int handle_input (ACE_HANDLE handle); - // Hook method called back when a user types something into the - // STDIN in order to shut down the program. - - int configure_stream (void); - // Setup the plumbing in the stream. - - int set_watermarks (void); - // Set the high and low queue watermarks. - - int run_event_loop (void); - // Run the event-loop for the <Event_Server>. - - MT_Stream event_server_; - // The <ACE_Stream> that contains the <Event_Server> application - // <Modules>. -}; - -Event_Server::Event_Server (void) - : ACE_Sig_Adapter (ACE_Sig_Handler_Ex (ACE_Reactor::end_event_loop)) - // Shutdown the <ACE_Reactor>'s event loop when a SIGINT is - // received. -{ - // Register to trap STDIN from the user. - if (ACE_Event_Handler::register_stdin_handler (this, - ACE_Reactor::instance (), - ACE_Thread_Manager::instance ()) == -1) - ACE_ERROR ((LM_ERROR, - "%p\n", - "register_stdin_handler")); - // Register to trap the SIGINT signal. - else if (ACE_Reactor::instance ()->register_handler - (SIGINT, this) == -1) - ACE_ERROR ((LM_ERROR, - "%p\n", - "register_handler")); -} - -int -Event_Server::handle_input (ACE_HANDLE) -{ - // This code here will make sure we actually wait for the user to - // type something. On platforms like Win32, <handle_input> is called - // prematurely (even when there is no data). - char temp_buffer [BUFSIZ]; - - ssize_t n = ACE_OS::read (ACE_STDIN, - temp_buffer, - sizeof (temp_buffer)); - // This ought to be > 0, otherwise something very strange has - // happened!! - ACE_ASSERT (n > 0); - ACE_UNUSED_ARG (n); // To avoid compile warning with ACE_NDEBUG. - - Options::instance ()->stop_timer (); - - ACE_DEBUG ((LM_INFO, - "(%t) closing down the test\n")); - Options::instance ()->print_results (); - - ACE_Reactor::end_event_loop (); - return -1; -} - -int -Event_Server::configure_stream (void) -{ - Peer_Router_Context *src; - // Create the <Supplier_Router>'s routing context. This contains a - // context shared by both the write-side and read-side of the - // <Supplier_Router> Module. - ACE_NEW_RETURN (src, - Peer_Router_Context (Options::instance ()->supplier_port ()), - -1); - - MT_Module *srm = 0; - // Create the <Supplier_Router> module. - ACE_NEW_RETURN (srm, - MT_Module - ("Supplier_Router", - new Supplier_Router (src), - new Supplier_Router (src)), - -1); - - MT_Module *eam = 0; - // Create the <Event_Analyzer> module. - ACE_NEW_RETURN (eam, - MT_Module - ("Event_Analyzer", - new Event_Analyzer, - new Event_Analyzer), - -1); - - Peer_Router_Context *crc; - // Create the <Consumer_Router>'s routing context. This contains a - // context shared by both the write-side and read-side of the - // <Consumer_Router> Module. - ACE_NEW_RETURN (crc, - Peer_Router_Context (Options::instance ()->consumer_port ()), - -1); - - MT_Module *crm = 0; - // Create the <Consumer_Router> module. - ACE_NEW_RETURN (crm, - MT_Module - ("Consumer_Router", - new Consumer_Router (crc), - new Consumer_Router (crc)), - -1); - - // Push the Modules onto the event_server stream. - - if (this->event_server_.push (srm) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "push (Supplier_Router)"), - -1); - else if (this->event_server_.push (eam) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "push (Event_Analyzer)"), - -1); - else if (this->event_server_.push (crm) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "push (Consumer_Router)"), - -1); - return 0; -} - -int -Event_Server::set_watermarks (void) -{ - // Set the high and low water marks appropriately. The water marks - // control how much data can be buffered before the queues are - // considered "full." - int wm = Options::instance ()->low_water_mark (); - - if (this->event_server_.control (ACE_IO_Cntl_Msg::SET_LWM, - &wm) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "push (setting low watermark)"), - -1); - - wm = Options::instance ()->high_water_mark (); - if (this->event_server_.control (ACE_IO_Cntl_Msg::SET_HWM, - &wm) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "push (setting high watermark)"), - -1); - return 0; -} - -int -Event_Server::run_event_loop (void) -{ - // Begin the timer. - Options::instance ()->start_timer (); - - // Perform the main event loop waiting for the user to type ^C or to - // enter a line on the ACE_STDIN. - - ACE_Reactor::run_event_loop (); - - // Close down the stream and call the <close> hooks on all the - // <ACE_Task>s in the various Modules in the Stream. - this->event_server_.close (); - - // Wait for the threads in the <Consumer_Router> and - // <Supplier_Router> to exit. - return ACE_Thread_Manager::instance ()->wait (); -} - -int -Event_Server::svc (void) -{ - if (this->configure_stream () == -1) - return -1; - else if (this->set_watermarks () == -1) - return -1; - else if (this->run_event_loop () == -1) - return -1; - else - return 0; -} - -int -main (int argc, char *argv[]) -{ -#if defined (ACE_HAS_THREADS) - Options::instance ()->parse_args (argc, argv); - - // Initialize the <Event_Server>. - Event_Server event_server; - - // Run the event server's event-loop. - int result = event_server.svc (); - - ACE_DEBUG ((LM_DEBUG, - "exiting main\n")); - - return result; -#else - ACE_UNUSED_ARG (argc); - ACE_UNUSED_ARG (argv); - ACE_ERROR_RETURN ((LM_ERROR, - "threads not supported on this platform\n"), - 1); -#endif /* ACE_HAS_THREADS */ -} |