summaryrefslogtreecommitdiff
path: root/examples/Reactor/Ntalker/ntalker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/Reactor/Ntalker/ntalker.cpp')
-rw-r--r--examples/Reactor/Ntalker/ntalker.cpp227
1 files changed, 0 insertions, 227 deletions
diff --git a/examples/Reactor/Ntalker/ntalker.cpp b/examples/Reactor/Ntalker/ntalker.cpp
deleted file mode 100644
index 26b2566c467..00000000000
--- a/examples/Reactor/Ntalker/ntalker.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-// $Id$
-
-// Listens to multicast address. After first message received, will
-// listen for 5 more seconds. Prints Mbits/sec received from client.
-
-#include "ace/INET_Addr.h"
-#include "ace/SOCK_Dgram_Mcast.h"
-#include "ace/Reactor.h"
-#include "ace/Get_Opt.h"
-#include "ace/Thread_Manager.h"
-#include "ace/Service_Config.h"
-#include "ace/streams.h"
-
-ACE_RCSID(Ntalker, ntalker, "$Id$")
-
-#if defined (ACE_HAS_IP_MULTICAST)
-// Network interface to subscribe to. This is hardware specific. use
-// netstat(1M) to find whether your interface is le0 or ie0
-
-static const char *INTERFACE = 0;
-static const char *MCAST_ADDR = ACE_DEFAULT_MULTICAST_ADDR;
-static const u_short UDP_PORT = ACE_DEFAULT_MULTICAST_PORT;
-
-class Handler : public ACE_Event_Handler
-{
- // = TITLE
- // Handle both multicast and stdin events.
-public:
- // = Initialization and termination methods.
- Handler (u_short udp_port,
- const char *ip_addr,
- const char *interface,
- ACE_Reactor &);
- // Constructor.
-
- ~Handler (void);
- // Destructor.
-
- // Event demuxer hooks.
- virtual int handle_input (ACE_HANDLE);
- virtual int handle_close (ACE_HANDLE,
- ACE_Reactor_Mask);
- virtual ACE_HANDLE get_handle (void) const;
-
-private:
- ACE_SOCK_Dgram_Mcast mcast_;
- // Multicast wrapper.
-};
-
-ACE_HANDLE
-Handler::get_handle (void) const
-{
- return this->mcast_.get_handle ();
-}
-
-int
-Handler::handle_input (ACE_HANDLE h)
-{
- char buf[BUFSIZ];
-
- if (h == ACE_STDIN)
- {
- ssize_t result = ACE_OS::read (h, buf, BUFSIZ);
-
- if (result > 0)
- {
- if (this->mcast_.send (buf, result) != result)
- ACE_ERROR_RETURN ((LM_ERROR,
- "%p\n",
- "send error"),
- -1);
- return 0;
- }
- else if (result == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "%p\n",
- "can't read from STDIN"),
- -1);
- else // result == 0
- {
- ACE_Reactor::end_event_loop ();
- return -1;
- }
- }
- else
- {
- ACE_INET_Addr remote_addr;
-
- // Receive message from multicast group.
- ssize_t result = this->mcast_.recv (buf,
- sizeof buf,
- remote_addr);
-
- if (result != -1)
- {
- ACE_DEBUG ((LM_DEBUG,
- "received datagram from host %s on port %d bytes = %d\n",
- remote_addr.get_host_name (),
- remote_addr.get_port_number (),
- result));
- ACE_OS::write (ACE_STDERR, buf, result);
- ACE_DEBUG ((LM_DEBUG,
- "\n"));
- return 0;
- }
-
- ACE_ERROR_RETURN ((LM_ERROR,
- "%p\n",
- "something amiss"),
- -1);
- }
-}
-
-int
-Handler::handle_close (ACE_HANDLE h, ACE_Reactor_Mask)
-{
- if (h == ACE_STDIN)
- {
- ACE_DEBUG ((LM_DEBUG,
- "STDIN_Events handle removed from reactor.\n"));
- if (ACE_Reactor::instance ()->remove_handler
- (this, ACE_Event_Handler::READ_MASK) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "%p\n",
- "remove_handler"),
- -1);
- }
- else
- ACE_DEBUG ((LM_DEBUG,
- "Mcast_Events handle removed from reactor.\n"));
- return 0;
-}
-
-Handler::~Handler (void)
-{
- if (this->mcast_.unsubscribe () == -1)
- ACE_ERROR ((LM_ERROR,
- "%p\n",
- "unsubscribe fails"));
-}
-
-Handler::Handler (u_short udp_port,
- const char *ip_addr,
- const char *interface,
- ACE_Reactor &reactor)
-{
- // Create multicast address to listen on.
-
- ACE_INET_Addr sockmc_addr (udp_port, ip_addr);
-
- // subscribe to multicast group.
-
- if (this->mcast_.subscribe (sockmc_addr, 1, interface) == -1)
- ACE_ERROR ((LM_ERROR,
- "%p\n",
- "can't subscribe to multicast group"));
-
- // Disable loopbacks.
- // if (this->mcast_.set_option (IP_MULTICAST_LOOP, 0) == -1 )
- // ACE_OS::perror (" can't disable loopbacks " ), ACE_OS::exit (1);
-
- // Register callbacks with the ACE_Reactor.
- else if (reactor.register_handler (this->mcast_.get_handle (),
- this,
- ACE_Event_Handler::READ_MASK) == -1)
- ACE_ERROR ((LM_ERROR,
- "%p\n",
- "can't register with Reactor\n"));
- // Register the STDIN handler.
- else 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"));
-}
-
-static void
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opt (argc, argv, "i:u");
-
- int c;
-
- while ((c = get_opt ()) != -1)
- switch (c)
- {
- case 'i':
- INTERFACE = get_opt.optarg;
- break;
- case 'u':
- // Usage fallthrough.
- default:
- ACE_DEBUG ((LM_DEBUG,
- "%s -i interface\n",
- argv[0]));
- ACE_OS::exit (1);
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- parse_args (argc, argv);
-
- Handler handler (UDP_PORT,
- MCAST_ADDR,
- INTERFACE,
- *ACE_Reactor::instance ());
-
- // Run the event loop.
- ACE_Reactor::run_event_loop ();
-
- ACE_DEBUG ((LM_DEBUG,
- "talker Done.\n"));
- return 0;
-}
-#else
-int
-main (int, char *argv[])
-{
- ACE_ERROR_RETURN ((LM_ERROR,
- "error: %s must be run on a platform that support IP multicast\n",
- argv[0]),
- 0);
-}
-#endif /* ACE_HAS_IP_MULTICAST */