summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Event/Mcast/Complex/supplier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/Event/Mcast/Complex/supplier.cpp')
-rw-r--r--TAO/orbsvcs/tests/Event/Mcast/Complex/supplier.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Event/Mcast/Complex/supplier.cpp b/TAO/orbsvcs/tests/Event/Mcast/Complex/supplier.cpp
new file mode 100644
index 00000000000..ab13f1a28ef
--- /dev/null
+++ b/TAO/orbsvcs/tests/Event/Mcast/Complex/supplier.cpp
@@ -0,0 +1,120 @@
+// $Id$
+
+#include "Constants.h"
+#include "orbsvcs/Event_Utilities.h"
+#include "orbsvcs/RtecEventCommC.h"
+#include "orbsvcs/RtecEventChannelAdminC.h"
+#include "ace/Log_Msg.h"
+
+void
+send_events (RtecEventChannelAdmin::ProxyPushConsumer_ptr consumer
+ ACE_ENV_ARG_DECL)
+{
+ // Events we'll send.
+ RtecEventComm::EventSet events (1);
+ events.length (1);
+ // Events travelling through gateways must have a ttl count of at
+ // least 1!
+ events[0].header.ttl = 1;
+ events[0].header.source = SOURCE_ID;
+
+ for (int i = 0; i < 100; ++i)
+ {
+ // Send 1 event of each type.
+ events[0].header.type = A_EVENT_TYPE;
+ consumer->push (events ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ events[0].header.type = B_EVENT_TYPE;
+ consumer->push (events ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ events[0].header.type = C_EVENT_TYPE;
+ consumer->push (events ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+int
+check_for_nil (CORBA::Object_ptr obj, const char *message)
+{
+ if (CORBA::is_nil (obj))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ERROR: Object reference <%s> is nil\n",
+ message),
+ -1);
+ else
+ return 0;
+}
+
+int
+parse_args (int /*argc*/, char ** /*argv*/)
+{
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ // Initialize ORB and parse args.
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args (argc, argv) == -1)
+ return 1;
+
+ // Obtain reference to EC.
+ CORBA::Object_var obj =
+ orb->resolve_initial_references ("Event_Service" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ RtecEventChannelAdmin::EventChannel_var ec =
+ RtecEventChannelAdmin::EventChannel::_narrow (obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ if (check_for_nil (ec.in (), "EC") == -1)
+ return 1;
+
+ // Obtain reference to SupplierAdmin.
+ RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
+ ec->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Obtain ProxyPushConsumer and connect this supplier.
+ RtecEventChannelAdmin::ProxyPushConsumer_var consumer =
+ supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_SupplierQOS_Factory qos;
+ qos.insert (SOURCE_ID, A_EVENT_TYPE, 0, 1);
+ qos.insert (SOURCE_ID, B_EVENT_TYPE, 0, 1);
+ qos.insert (SOURCE_ID, C_EVENT_TYPE, 0, 1);
+
+ consumer->connect_push_supplier
+ (RtecEventComm::PushSupplier::_nil (),
+ qos.get_SupplierQOS ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Send events to EC.
+ send_events (consumer.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Tell EC to shut down.
+ ec->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception in Supplier:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}