diff options
Diffstat (limited to 'examples/Misc/test_XtReactor1.cpp')
-rw-r--r-- | examples/Misc/test_XtReactor1.cpp | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/examples/Misc/test_XtReactor1.cpp b/examples/Misc/test_XtReactor1.cpp deleted file mode 100644 index d2d94036285..00000000000 --- a/examples/Misc/test_XtReactor1.cpp +++ /dev/null @@ -1,175 +0,0 @@ -// $Id$ - -// The following is another test that exercises the Eric C. Newton's -// <ecn@clark.net> XtReactor implementation. - -#include "ace/XtReactor.h" -#include "ace/Reactor.h" -#include "ace/Message_Block.h" - -ACE_RCSID(Misc, test_XtReactor1, "$Id$") - -#if defined (ACE_HAS_XT) -#define String XtString -#include <Xm/PushB.h> - -class Stdout : public ACE_Event_Handler -{ -public: - Stdout (ACE_Reactor * r) - : reactor_ (r), - msg_ (1000000) // Make a very big message block. - { - int flags = ACE_OS::fcntl (ACE_STDOUT, F_GETFL); - - if (flags != -1 - && ACE_OS::fcntl (ACE_STDOUT, - F_SETFL, flags | O_NONBLOCK) != -1) - return; - else - ACE_DEBUG ((LM_DEBUG, - "Unable to set stdout to non-block.")); - } - - ACE_HANDLE get_handle (void) const { return ACE_STDOUT; } - - int handle_output (ACE_HANDLE) - { - char *s = msg_.rd_ptr (); - - if (ACE_OS::write (ACE_STDOUT, s, 1) == 1) - { - ACE_DEBUG ((LM_DEBUG, - "wrote output '%d'\n", - (int) *s)); - msg_.rd_ptr (1); - } - - if (msg_.length () == 0) - { - reactor_->remove_handler (this, - ACE_Event_Handler::WRITE_MASK); - msg_.rd_ptr (msg_.base ()); - msg_.wr_ptr (msg_.base ()); - } - return 0; - } - - void put (char c) - { - if (msg_.length () == 0) - reactor_->register_handler (this, - ACE_Event_Handler::WRITE_MASK); - - if (msg_.wr_ptr () < msg_.end ()) - { - *msg_.wr_ptr () = c; - msg_.wr_ptr (1); - } - else - ACE_DEBUG ((LM_DEBUG, - "Oops... data falling off the end of the buffer!\n")); - } - -private: - ACE_Reactor *reactor_; - ACE_Message_Block msg_; -}; - -class Stdin : public ACE_Event_Handler -{ -public: - Stdin (Stdout *out) - : out_ (out) {} - - ACE_HANDLE get_handle () const { return ACE_STDIN; } - - int handle_input (ACE_HANDLE) - { - char c; - - if (ACE_OS::read (ACE_STDIN, &c, 1) == 1) - out_->put (c); - - return 0; - } - - int handle_timeout (const ACE_Time_Value &tv, const void *) - { - ACE_DEBUG ((LM_DEBUG, - "Timeout! %f\n", - (double) (tv.msec () / 1000.))); - return 0; - } - -private: - Stdout *out_; -}; - -static void -ActivateCB (Widget, XtPointer, XtPointer) -{ - ACE_DEBUG ((LM_DEBUG, - "Button pushed!\n")); -} - -int -main (int argc, char**argv) -{ - // The worlds most useless user interface - Widget top_level = XtVaAppInitialize (NULL, - "buttontest", - NULL, - 0, - &argc, - argv, - NULL, - NULL); - Widget button = XmCreatePushButton (top_level, - "change", - 0, - 0); - XtManageChild (button); - XtAddCallback (button, - XmNactivateCallback, - ActivateCB, - NULL); - - // A reactor beastie. - ACE_XtReactor xreactor (XtWidgetToApplicationContext (top_level)); - ACE_Reactor reactor (&xreactor); - - // Print a message when data is recv'd on stdin... - ACE_Event_Handler *stdin_; - ACE_NEW_RETURN (stdin_, - Stdin (new Stdout (&reactor)), - -1); - reactor.register_handler (stdin_, - ACE_Event_Handler::READ_MASK); - - // Print a message every 10 seconds. - if (reactor.schedule_timer (stdin_, 0, - ACE_Time_Value (10), - ACE_Time_Value (10)) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "schedule_timer"), - -1); - - // Show the top_level widget. - XtRealizeWidget (top_level); - - // Demonstrate Reactor/Xt event loop unification. - XtAppMainLoop (XtWidgetToApplicationContext (top_level)); - - return 0; -} -#else -int -main (int, char *[]) -{ - ACE_ERROR_RETURN ((LM_ERROR, - "XT not configured for this platform\n"), - 0); -} -#endif /* ACE_HAS_XT */ |