summaryrefslogtreecommitdiff
path: root/ACE/examples/ASX/CCM_App/SC_Server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/ASX/CCM_App/SC_Server.cpp')
-rw-r--r--ACE/examples/ASX/CCM_App/SC_Server.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/ACE/examples/ASX/CCM_App/SC_Server.cpp b/ACE/examples/ASX/CCM_App/SC_Server.cpp
new file mode 100644
index 00000000000..305e3ebd015
--- /dev/null
+++ b/ACE/examples/ASX/CCM_App/SC_Server.cpp
@@ -0,0 +1,87 @@
+// $Id$
+
+// Simple driver program for the server. This driver dynamically
+// links in all the services in the <svc.conf> file.
+
+#include "ace/OS_NS_unistd.h"
+#include "ace/OS_main.h"
+#include "ace/Service_Config.h"
+#include "ace/Thread_Manager.h"
+#include "ace/Reactor.h"
+#include "ace/Sig_Adapter.h"
+
+
+
+class Event_Handler : public ACE_Event_Handler
+{
+public:
+ virtual int handle_input (ACE_HANDLE handle);
+ virtual int handle_close (ACE_HANDLE,
+ ACE_Reactor_Mask);
+};
+
+int
+Event_Handler::handle_input (ACE_HANDLE handle)
+{
+ char buf[BUFSIZ];
+ ssize_t n = ACE_OS::read (handle, buf, sizeof buf);
+
+ if (n == -1)
+ return -1;
+ else if (n == 0)
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ ACE_TEXT ("shutting down on EOF\n")),
+ -1);
+ else if (ACE_OS::write (ACE_STDOUT, buf, n) != n)
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ ACE_TEXT ("%p\n"), ACE_TEXT ("write failed")),
+ -1);
+ else
+ return 0;
+}
+
+int
+Event_Handler::handle_close (ACE_HANDLE, ACE_Reactor_Mask)
+{
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("closing Event_Handler\n")));
+ ACE_Reactor::instance ()->end_reactor_event_loop ();
+ return 0;
+}
+
+int
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ ACE_Service_Config loggerd;
+ Event_Handler handler;
+ ACE_Sig_Adapter shutdown_handler ((ACE_Sig_Handler_Ex) ACE_Reactor::end_event_loop);
+
+ if (ACE_Event_Handler::register_stdin_handler (&handler,
+ ACE_Reactor::instance (),
+ ACE_Thread_Manager::instance ()) == -1)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("register_stdin_handler")));
+
+ if (loggerd.open (argc,
+ argv,
+ ACE_DEFAULT_LOGGER_KEY,
+ // Don't ignore static services!
+ 0) == -1 && errno != ENOENT)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%p\n%a"),
+ ACE_TEXT ("open"),
+ 1));
+ else if (ACE_Reactor::instance ()->register_handler
+ (SIGINT, &shutdown_handler) == -1)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%p\n%a"),
+ ACE_TEXT ("register_handler"),
+ 1));
+
+ // Perform logging service until we receive SIGINT.
+
+ ACE_Reactor::instance ()->run_reactor_event_loop ();
+ handler.remove_stdin_handler (ACE_Reactor::instance (),ACE_Thread_Manager::instance ());
+ return 0;
+}