summaryrefslogtreecommitdiff
path: root/ACE/examples/TMCast/Member/member.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/TMCast/Member/member.cpp')
-rw-r--r--ACE/examples/TMCast/Member/member.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/ACE/examples/TMCast/Member/member.cpp b/ACE/examples/TMCast/Member/member.cpp
new file mode 100644
index 00000000000..f89c68564ea
--- /dev/null
+++ b/ACE/examples/TMCast/Member/member.cpp
@@ -0,0 +1,93 @@
+// file : TMCast/Member/member.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "ace/Log_Msg.h"
+#include "ace/Time_Value.h"
+#include "ace/OS_NS_stdlib.h"
+#include "ace/OS_NS_unistd.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_time.h"
+#include "ace/OS_NS_string.h"
+
+#include "ace/TMCast/Group.hpp"
+
+class Args {};
+
+int
+ACE_TMAIN (int argc, ACE_TCHAR* argv[])
+{
+ int status = 0;
+ try
+ {
+ if (argc < 4) throw Args ();
+
+ bool receiver (true);
+
+ if (argv[1][0] == 'r') receiver = true;
+ else if (argv[1][0] == 's') receiver = false;
+ else throw Args ();
+
+ if (!receiver) ACE_OS::srand (ACE_OS::time ());
+
+ ACE_INET_Addr address (argv[3]);
+
+ ACE_TMCast::Group group (address, ACE_TEXT_ALWAYS_CHAR (argv[2]));
+
+ if (receiver)
+ {
+ for (char buffer[256];;)
+ {
+ group.recv (buffer, sizeof (buffer));
+
+ ACE_DEBUG ((LM_DEBUG, "%s\n", buffer));
+ }
+ }
+ else
+ {
+ char buffer[256];
+
+ for (unsigned long i = 0; i < 1000; i++)
+ {
+ // Sleep some random time around 1 sec.
+
+ ACE_UINT64 tmpl = 1000000U;
+ unsigned long t =
+ static_cast<unsigned long> (((tmpl * ACE_OS::rand ()) / RAND_MAX));
+
+ // ACE_DEBUG ((LM_DEBUG, "sleeping for %u\n", t));
+
+ ACE_OS::sleep (ACE_Time_Value (0, t));
+
+ ACE_OS::sprintf (buffer, "message # %lu", i);
+
+ try
+ {
+ group.send (buffer, ACE_OS::strlen (buffer) + 1);
+ }
+ catch (ACE_TMCast::Group::Aborted const&)
+ {
+ ACE_ERROR ((LM_ERROR, "%s has been aborted\n", buffer));
+ }
+ }
+ }
+ }
+ catch (Args const&)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Usage: member {r|s} <id> <IPv4 mcast address>:<port>\n"));
+ status++;
+ }
+ catch (ACE_TMCast::Group::Failed const&)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Group failure. Perhaps I am alone in the group.\n"));
+ status++;
+ }
+ catch (ACE_TMCast::Group::InsufficienSpace const&)
+ {
+ ACE_ERROR ((LM_ERROR, "Insufficient space in receive buffer.\n"));
+ status++;
+ }
+ return status;
+}