summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp')
-rw-r--r--TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp359
1 files changed, 191 insertions, 168 deletions
diff --git a/TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp b/TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp
index 62127227df9..db0881c717e 100644
--- a/TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp
+++ b/TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp
@@ -5,6 +5,7 @@
// ******************************************************************
#include "ace/Get_Opt.h"
+#include "ace/Auto_Ptr.h"
#include "tao/ORB_Core.h"
@@ -22,30 +23,53 @@
// ******************************************************************
static TAO_Notify_Tests_SequencePushSupplier* supplier_1 = 0;
-static CORBA::Boolean done = 0;
-static CORBA::Boolean start = 0;
static int max_events = 6; // 6 sets of 16
static const char* ior_output_file = "supplier.ior";
// ******************************************************************
// Subroutine Section
// ******************************************************************
-
class sig_i : public POA_sig
{
public:
+ sig_i(CORBA::ORB_ptr orb)
+ : orb_(orb)
+ , started_(false)
+ {
+ }
+
void go (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-};
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ started_ = true;
+ }
+ void done (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ started_ = false;
+ }
-void
-sig_i::go (ACE_ENV_SINGLE_ARG_DECL_NOT_USED /*ACE_ENV_SINGLE_ARG_PARAMETER*/)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- start = 1;
-}
+ void wait_for_startup()
+ {
+ while (! started_) {
+ ACE_Time_Value tv(0, 100 * 1000); // 100ms
+ orb_->run(tv);
+ }
+ }
+ void wait_for_completion()
+ {
+ while (started_) {
+ ACE_Time_Value tv(0, 100 * 1000); // 100ms
+ orb_->run(tv);
+ }
+ }
+
+private:
+ CORBA::ORB_ptr orb_;
+ bool started_;
+};
class Supplier_Client : public Notify_Test_Client
{
@@ -62,23 +86,23 @@ Supplier_Client::parse_args (int argc, char *argv[])
while ((c = get_opts ()) != -1)
switch (c)
- {
- case 'e':
- max_events = ACE_OS::atoi (get_opts.optarg);
- break;
-
- case 'o':
- ior_output_file = get_opts.optarg;
- break;
-
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile> -e <# of events>"
- "\n",
- argv [0]),
- -1);
- }
+ {
+ case 'e':
+ max_events = ACE_OS::atoi (get_opts.optarg);
+ break;
+
+ case 'o':
+ ior_output_file = get_opts.optarg;
+ break;
+
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-o <iorfile> -e <# of events>"
+ "\n",
+ argv [0]),
+ -1);
+ }
// Indicates sucessful parsing of the command line
return 0;
@@ -92,8 +116,8 @@ create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec
CosNotifyChannelAdmin::AdminID adminid = 0;
CosNotifyChannelAdmin::SupplierAdmin_var admin =
ec->new_for_suppliers (CosNotifyChannelAdmin::AND_OP,
- adminid
- ACE_ENV_ARG_PARAMETER);
+ adminid
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
@@ -102,97 +126,86 @@ create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec
static void
-SendEvents (void)
+SendEvents (int id ACE_ENV_ARG_DECL)
{
- if (start)
- {
- static int count = 0;
- static const char* types[] = { "good", "bad", "ugly" };
- CosNotification::EventBatch events;
-
- CosNotification::StructuredEvent event;
- event.header.fixed_header.event_type.domain_name =
- CORBA::string_dup ("Orbix 2000 Demos");
- event.header.fixed_header.event_type.type_name =
- CORBA::string_dup ("Sequence Notification Push Demo Event");
-
- event.header.fixed_header.event_name = CORBA::string_dup ("test event");
-
-
- event.header.variable_header.length (2);
- event.header.variable_header[0].name =
- CORBA::string_dup (CosNotification::Priority);
- event.header.variable_header[0].value <<= (CORBA::Short)
- (count > max_events / 2 ?
- -count : count);
- event.header.variable_header[1].name =
- CORBA::string_dup (CosNotification::Timeout);
- event.header.variable_header[1].value <<= (TimeBase::TimeT)
- ((max_events - count) * 60);
- event.filterable_data.length (3);
- event.filterable_data[0].name = CORBA::string_dup ("objectId");
- event.filterable_data[0].value <<= (CORBA::Long)0xdad;
-
- event.filterable_data[1].name = CORBA::string_dup ("type");
- event.filterable_data[1].value <<= types[count % 3];
-
- event.filterable_data[2].name = CORBA::string_dup ("enum");
- event.filterable_data[2].value <<= (CORBA::Long)
- (count > max_events / 2 ?
- -count : count);
-
- events.length (16);
- events[0] = event;
-
- CosNotification::StructuredEvent revents[15];
- for (int z = 0; z < 15; z++)
- {
- revents[z].header.fixed_header.event_type.domain_name =
- CORBA::string_dup ("Orbix 2000 Demos");
- revents[z].header.fixed_header.event_type.type_name =
- CORBA::string_dup ("Extra Events");
-
- revents[z].header.fixed_header.event_name = CORBA::string_dup ("test revents[z]");
-
- revents[z].header.variable_header.length (1);
- revents[z].header.variable_header[0].name =
- CORBA::string_dup (CosNotification::Priority);
- revents[z].header.variable_header[0].value <<= (CORBA::Short)
- (count > max_events / 2 ?
- -count : count);
-
- revents[z].filterable_data.length (3);
- revents[z].filterable_data[0].name = CORBA::string_dup ("objectId");
- revents[z].filterable_data[0].value <<= (CORBA::Long)z;
-
- revents[z].filterable_data[1].name = CORBA::string_dup ("type");
- revents[z].filterable_data[1].value <<= types[2 - (count % 3)];
-
- revents[z].filterable_data[2].name = CORBA::string_dup ("enum");
- revents[z].filterable_data[2].value <<= (CORBA::Long)
- (count > max_events / 2 ?
- -count : count);
- events[z + 1] = revents[z];
- }
- count++;
-
- if (count >= max_events)
- {
- done = 1;
- }
+ static const char* types[] = { "good", "bad", "ugly" };
+ CosNotification::EventBatch events;
+
+ CosNotification::StructuredEvent event;
+ event.header.fixed_header.event_type.domain_name =
+ CORBA::string_dup ("Orbix 2000 Demos");
+ event.header.fixed_header.event_type.type_name =
+ CORBA::string_dup ("Sequence Notification Push Demo Event");
+
+ event.header.fixed_header.event_name = CORBA::string_dup ("test event");
+
+
+ event.header.variable_header.length (2);
+ event.header.variable_header[0].name =
+ CORBA::string_dup (CosNotification::Priority);
+ event.header.variable_header[0].value <<= (CORBA::Short)
+ (id > max_events / 2 ?
+ -id : id);
+ event.header.variable_header[1].name =
+ CORBA::string_dup (CosNotification::Timeout);
+ event.header.variable_header[1].value <<= (TimeBase::TimeT)
+ ((max_events - id) * 60);
+ event.filterable_data.length (3);
+ event.filterable_data[0].name = CORBA::string_dup ("objectId");
+ event.filterable_data[0].value <<= (CORBA::Long)0xdad;
+
+ event.filterable_data[1].name = CORBA::string_dup ("type");
+ event.filterable_data[1].value <<= types[id % 3];
+
+ event.filterable_data[2].name = CORBA::string_dup ("enum");
+ event.filterable_data[2].value <<= (CORBA::Long)
+ (id > max_events / 2 ?
+ -id : id);
+
+ events.length (16);
+ events[0] = event;
+
+ CosNotification::StructuredEvent revents[15];
+ for (int z = 0; z < 15; z++)
+ {
+ revents[z].header.fixed_header.event_type.domain_name =
+ CORBA::string_dup ("Orbix 2000 Demos");
+ revents[z].header.fixed_header.event_type.type_name =
+ CORBA::string_dup ("Extra Events");
+
+ revents[z].header.fixed_header.event_name = CORBA::string_dup ("test revents[z]");
+
+ revents[z].header.variable_header.length (1);
+ revents[z].header.variable_header[0].name =
+ CORBA::string_dup (CosNotification::Priority);
+ revents[z].header.variable_header[0].value <<= (CORBA::Short)
+ (id > max_events / 2 ?
+ -id : id);
+
+ revents[z].filterable_data.length (3);
+ revents[z].filterable_data[0].name = CORBA::string_dup ("objectId");
+ revents[z].filterable_data[0].value <<= (CORBA::Long)z;
+
+ revents[z].filterable_data[1].name = CORBA::string_dup ("type");
+ revents[z].filterable_data[1].value <<= types[2 - (id % 3)];
+
+ revents[z].filterable_data[2].name = CORBA::string_dup ("enum");
+ revents[z].filterable_data[2].value <<= (CORBA::Long)
+ (id > max_events / 2 ?
+ -id : id);
+ events[z + 1] = revents[z];
+ }
- ACE_TRY_NEW_ENV
- {
- supplier_1->send_events (events ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCH (CORBA::Exception, e)
- {
- ACE_PRINT_EXCEPTION (e,
- "Supplier exception: ");
- }
- ACE_ENDTRY;
+ ACE_TRY_NEW_ENV
+ {
+ supplier_1->send_events (events ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
}
+ ACE_CATCH (CORBA::Exception, e)
+ {
+ ACE_PRINT_EXCEPTION (e, "Error: Supplier exception: ");
+ }
+ ACE_ENDTRY;
}
static void
@@ -202,8 +215,8 @@ create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin,
{
// start up the supplier
ACE_NEW_THROW_EX (supplier_1,
- TAO_Notify_Tests_SequencePushSupplier (),
- CORBA::NO_MEMORY ());
+ TAO_Notify_Tests_SequencePushSupplier (),
+ CORBA::NO_MEMORY ());
supplier_1->init (poa ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
@@ -219,66 +232,76 @@ create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin,
int main (int argc, char* argv[])
{
+ ACE_Auto_Ptr< sig_i > sig_impl;
int status = 0;
ACE_TRY_NEW_ENV
+ {
+ Supplier_Client client;
+ status = client.init (argc, argv ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (status == 0)
{
- Supplier_Client client;
- status = client.init (argc, argv ACE_ENV_ARG_PARAMETER);
+ CosNotifyChannelAdmin::EventChannel_var ec =
+ client.create_event_channel ("MyEventChannel", 0 ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
- if (status == 0)
+ CORBA::ORB_ptr orb = client.orb ();
+
+ sig_impl.reset( new sig_i( orb ) );
+ sig_var sig = sig_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (sig.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // If the ior_output_file exists, output the ior to it
+ if (ior_output_file != 0)
+ {
+ FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for "
+ "writing IOR: %s",
+ ior_output_file),
+ 1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ CosNotifyChannelAdmin::SupplierAdmin_var admin =
+ create_supplieradmin (ec.in () ACE_ENV_ARG_PARAMETER);
+ if (!CORBA::is_nil (admin.in ()))
+ {
+ create_suppliers (admin.in (), client.root_poa () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ sig_impl->wait_for_startup();
+
+ ACE_DEBUG((LM_DEBUG, " 1 supplier sending %d events...\n", max_events));
+ for (int i = 0; i < max_events; ++i)
{
- CosNotifyChannelAdmin::EventChannel_var ec =
- client.create_event_channel ("MyEventChannel", 0 ACE_ENV_ARG_PARAMETER);
+ ACE_DEBUG((LM_DEBUG, "+"));
+ SendEvents (i ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
+ }
+ ACE_DEBUG((LM_DEBUG, "\nSupplier sent %d events.\n", max_events));
- sig_i sig_impl;
- sig_var sig = sig_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
+ sig_impl->wait_for_completion();
- CORBA::ORB_ptr orb = client.orb ();
- CORBA::String_var ior =
- orb->object_to_string (sig.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
+ ACE_OS::unlink (ior_output_file);
- // If the ior_output_file exists, output the ior to it
- if (ior_output_file != 0)
- {
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for "
- "writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
- }
-
- CosNotifyChannelAdmin::SupplierAdmin_var admin =
- create_supplieradmin (ec.in () ACE_ENV_ARG_PARAMETER);
- if (!CORBA::is_nil (admin.in ()))
- {
- create_suppliers (admin.in (), client.root_poa () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- while (!done)
- {
- SendEvents ();
- if (orb->work_pending ())
- {
- orb->perform_work ();
- }
- }
- }
- }
+ ec->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
}
+ }
ACE_CATCH (CORBA::Exception, e)
- {
- ACE_PRINT_EXCEPTION (e,
- "Supplier exception: ");
- status = 1;
- }
+ {
+ ACE_PRINT_EXCEPTION (e, "Error: Supplier exception: ");
+ status = 1;
+ }
ACE_ENDTRY;
return status;