diff options
author | elliott_c <ocielliottc@users.noreply.github.com> | 2002-01-17 19:40:49 +0000 |
---|---|---|
committer | elliott_c <ocielliottc@users.noreply.github.com> | 2002-01-17 19:40:49 +0000 |
commit | d603ae209c6831affa436935cfa0ba861e3acbbb (patch) | |
tree | e0dcd7f56c71bd720d1c06a4273f0af4d86acd04 /TAO/orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp | |
parent | ce6ba8ebfc0257a52d5cd3cebde9cee0a7266893 (diff) | |
download | ATCD-d603ae209c6831affa436935cfa0ba861e3acbbb.tar.gz |
ChangeLogTag: Thu Jan 17 13:40:09 2002 Chad Elliott <elliott_c@ociweb.com>
Diffstat (limited to 'TAO/orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp b/TAO/orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp new file mode 100644 index 00000000000..a82632adbc7 --- /dev/null +++ b/TAO/orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp @@ -0,0 +1,249 @@ +// $Id$ + +// ****************************************************************** +// Include Section +// ****************************************************************** + +#include "ace/Get_Opt.h" + +#include "tao/ORB_Core.h" + +#include "orbsvcs/CosNotifyChannelAdminS.h" +#include "orbsvcs/CosNotifyCommC.h" +#include "orbsvcs/CosNamingC.h" +#include "Notify_StructuredPushSupplier.h" +#include "goS.h" + +#include "Notify_Test_Client.h" + +// ****************************************************************** +// Data Section +// ****************************************************************** + +static TAO_Notify_StructuredPushSupplier* supplier_1 = 0; +static CORBA::Boolean done = 0; +static CORBA::Boolean start = 0; +static int max_events = 20; +static const char* ior_output_file = "supplier.ior"; + +// ****************************************************************** +// Subroutine Section +// ****************************************************************** + +class sig_i : public POA_sig +{ +public: + void go (TAO_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); +}; + + +void +sig_i::go (TAO_ENV_SINGLE_ARG_DECL_NOT_USED /*TAO_ENV_SINGLE_ARG_PARAMETER*/) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + start = 1; +} + + +class Supplier_Client : public Notify_Test_Client +{ +public: + virtual int parse_args (int argc, char* argv[]); +}; + + +int +Supplier_Client::parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "o:e:d"); + int c; + + 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> -d" + "\n", + argv [0]), + -1); + } + + // Indicates sucessful parsing of the command line + return 0; +} + + +static CosNotifyChannelAdmin::SupplierAdmin_ptr +create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec + TAO_ENV_ARG_DECL) +{ + CosNotifyChannelAdmin::AdminID adminid = 0; + CosNotifyChannelAdmin::SupplierAdmin_var admin = + ec->new_for_suppliers (CosNotifyChannelAdmin::AND_OP, + adminid + TAO_ENV_ARG_PARAMETER); + + ACE_CHECK_RETURN (0); + + return CosNotifyChannelAdmin::SupplierAdmin::_duplicate (admin.in ()); +} + + +static void +SendEvent (void) +{ + if (start) + { + static int count = 0; + static const char* types[] = { "good", "bad", "ugly" }; + 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::ULong)count; + count++; + + if (count >= max_events) + { + done = 1; + } + + ACE_TRY_NEW_ENV + { + supplier_1->send_event (event TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::Exception, e) + { + ACE_PRINT_EXCEPTION (e, + "Supplier exception: "); + } + ACE_ENDTRY; + } +} + +static void +create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin, + PortableServer::POA_ptr poa + TAO_ENV_ARG_DECL) +{ + // startup the supplier + ACE_NEW_THROW_EX (supplier_1, + TAO_Notify_StructuredPushSupplier (), + CORBA::NO_MEMORY ()); + + supplier_1->init (poa TAO_ENV_ARG_PARAMETER); + ACE_CHECK; + + supplier_1->connect (admin TAO_ENV_ARG_PARAMETER); + ACE_CHECK; +} + + +// ****************************************************************** +// Main Section +// ****************************************************************** + +int main (int argc, char* argv[]) +{ + int status = 0; + ACE_TRY_NEW_ENV + { + Supplier_Client client; + status = client.init (argc, argv TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (status == 0) + { + CosNotifyChannelAdmin::EventChannel_var ec = + client.create_event_channel ("MyEventChannel", 0 TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + // Activate the signaler with the POA + sig_i sig_impl; + sig_var sig = sig_impl._this (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::ORB_ptr orb = client.orb (); + CORBA::String_var ior = + orb->object_to_string (sig.in () TAO_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 () TAO_ENV_ARG_PARAMETER); + if (!CORBA::is_nil (admin.in ())) + { + create_suppliers (admin.in (), client.root_poa () TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + while (!done) + { + SendEvent (); + if (orb->work_pending ()) + { + orb->perform_work (); + } + } + } + } + } + ACE_CATCH (CORBA::Exception, e) + { + ACE_PRINT_EXCEPTION (e, + "Supplier exception: "); + status = 1; + } + ACE_ENDTRY; + + return status; +} |