summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/EC_MT_Mcast
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:11 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:11 +0000
commit8008dd09ccf88d4edef237a184a698cac42f2952 (patch)
treeda50d054f9c761c3f6a5923f6979e93306c56d68 /TAO/orbsvcs/tests/EC_MT_Mcast
parent13d6e89af439164c0ade48e6f5c3e9b3f971e8c9 (diff)
downloadATCD-8008dd09ccf88d4edef237a184a698cac42f2952.tar.gz
Repo restructuring
Diffstat (limited to 'TAO/orbsvcs/tests/EC_MT_Mcast')
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.cpp22
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.h40
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.cpp105
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.h51
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/EC_MT_Mcast.mpc6
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/MCast.cpp424
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/Makefile.am65
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/README13
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.cpp95
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.h49
-rwxr-xr-xTAO/orbsvcs/tests/EC_MT_Mcast/run_test.pl54
-rw-r--r--TAO/orbsvcs/tests/EC_MT_Mcast/svc.conf5
12 files changed, 0 insertions, 929 deletions
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.cpp b/TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.cpp
deleted file mode 100644
index 50ea5a9002b..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// $Id$
-// Reused from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#include "AddrServer.h"
-
-ACE_RCSID(EC_MT_Mcast,
- AddrServer,
- "$Id$")
-
-AddrServer::AddrServer (const RtecUDPAdmin::UDP_Addr& addr)
- : addr_ (addr)
-{
-}
-
-void
-AddrServer::get_addr (const RtecEventComm::EventHeader&,
- RtecUDPAdmin::UDP_Addr_out addr
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- addr = this->addr_;
-}
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.h b/TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.h
deleted file mode 100644
index 232f63a5071..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/AddrServer.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// $Id$
-// Reused from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#ifndef ADDRSERVER_H
-#define ADDRSERVER_H
-#include /**/ "ace/pre.h"
-
-#include "orbsvcs/RtecUDPAdminS.h"
-
-class AddrServer : public POA_RtecUDPAdmin::AddrServer
-{
- // = TITLE
- // A simple AddrServer
- //
- // = DESCRIPTION
- // The EC is able to use multiple multicast groups to transmit its
- // data, the is given control over the mapping between the Event
- // (type,source) pair and the (ipaddr,port) pair using a
- // AddrServer.
- // This class implements a very simple server that simply maps the
- // <type> component to the <ipaddr> and uses a fixed <port>,
- // provided at initialization time.
- //
-public:
- AddrServer (const RtecUDPAdmin::UDP_Addr& addr);
- // Constructor
-
- // = The RtecUDPAdmin::AddrServer methods
- virtual void get_addr (const RtecEventComm::EventHeader& header,
- RtecUDPAdmin::UDP_Addr_out addr
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- RtecUDPAdmin::UDP_Addr addr_;
- // The address
-};
-
-#include /**/ "ace/post.h"
-#endif /* ADDRSERVER_H */
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.cpp b/TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.cpp
deleted file mode 100644
index 2ec6c650a2c..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// $Id$
-// Reused from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#include "Consumer.h"
-#include "orbsvcs/RtecEventChannelAdminS.h"
-#include "orbsvcs/Event_Service_Constants.h"
-
-ACE_RCSID(EC_MT_Mcast,
- Consumer,
- "$Id$")
-
-Consumer::Consumer (void)
- : event_count_ (0)
-{
-}
-
-void
-Consumer::connect (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin
- ACE_ENV_ARG_DECL)
-{
- this->proxy_ =
- consumer_admin->obtain_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- RtecEventComm::PushConsumer_var me =
- this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- // Simple subscription, but usually the helper classes in
- // $TAO_ROOT/orbsvcs/Event_Utils.h are a better way to do this.
- RtecEventChannelAdmin::ConsumerQOS qos;
- qos.is_gateway = 0;
-
- qos.dependencies.length (2);
- RtecEventComm::EventHeader& h0 =
- qos.dependencies[0].event.header;
- h0.type = ACE_ES_DISJUNCTION_DESIGNATOR;
- h0.source = 1; // The disjunction has one element
-
- RtecEventComm::EventHeader& h1 =
- qos.dependencies[1].event.header;
- h1.type = ACE_ES_EVENT_UNDEFINED; // first free event type
- h1.source = ACE_ES_EVENT_SOURCE_ANY; // Any source is OK
-
- this->proxy_->connect_push_consumer (me.in (), qos
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-}
-
-void
-Consumer::disconnect (ACE_ENV_SINGLE_ARG_DECL)
-{
- ACE_TRY
- {
- // Disconnect from the proxy
- this->proxy_->disconnect_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- // Ignore exceptions
- }
- ACE_ENDTRY;
- this->proxy_ = RtecEventChannelAdmin::ProxyPushSupplier::_nil ();
-
- // Deactivate this object
- PortableServer::POA_var poa =
- this->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
- // Get the Object Id used for the servant..
- PortableServer::ObjectId_var oid =
- poa->servant_to_id (this ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- // Deactivate the object
- poa->deactivate_object (oid.in () ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-}
-
-void
-Consumer::push (const RtecEventComm::EventSet& events
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- if (events.length () == 0)
- {
- ACE_DEBUG ((LM_DEBUG,
- "Consumer (%P|%t) no events\n"));
- return;
- }
-
- this->event_count_ += events.length ();
- if (this->event_count_ % 10000 == 0)
- {
- ACE_DEBUG ((LM_DEBUG,
- "Consumer (%P|%t): %d events received\n",
- this->event_count_));
- }
-}
-
-void
-Consumer::disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
-}
-
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.h b/TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.h
deleted file mode 100644
index 1e1d9fdaa17..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/Consumer.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// $Id$
-// Reused from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#ifndef CONSUMER_H
-#define CONSUMER_H
-
-#include "orbsvcs/RtecEventCommS.h"
-#include "orbsvcs/RtecEventChannelAdminC.h"
-
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
-class Consumer : public POA_RtecEventComm::PushConsumer
-{
- // = TITLE
- // Simple consumer object
- //
- // = DESCRIPTION
- // This class is a consumer of events.
- // It simply subscribes to one event type.
- //
-public:
- Consumer (void);
- // Constructor
-
- void connect (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin
- ACE_ENV_ARG_DECL);
- // Connect to the Event Channel
-
- void disconnect (ACE_ENV_SINGLE_ARG_DECL);
- // Disconnect from the event channel
-
- // = The RtecEventComm::PushConsumer methods
-
- virtual void push (const RtecEventComm::EventSet& events
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
- virtual void disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException));
- // The skeleton methods.
-
-private:
- CORBA::ULong event_count_;
- // Keep track of the number of events received.
-
- RtecEventChannelAdmin::ProxyPushSupplier_var proxy_;
- // The proxy
-};
-
-#endif /* CONSUMER_H */
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/EC_MT_Mcast.mpc b/TAO/orbsvcs/tests/EC_MT_Mcast/EC_MT_Mcast.mpc
deleted file mode 100644
index 73788961680..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/EC_MT_Mcast.mpc
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- MPC -*-
-// $Id$
-
-project(EC_MT_Mcast): rteventexe, rtevent_serv, messaging, strategies {
- exename = MCast
-}
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/MCast.cpp b/TAO/orbsvcs/tests/EC_MT_Mcast/MCast.cpp
deleted file mode 100644
index 5441a632e0e..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/MCast.cpp
+++ /dev/null
@@ -1,424 +0,0 @@
-// $Id$
-// Adapted from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#include "Consumer.h"
-#include "Supplier.h"
-#include "AddrServer.h"
-#include "orbsvcs/Event_Service_Constants.h"
-#include "orbsvcs/Event/EC_Event_Channel.h"
-#include "orbsvcs/Event/EC_Default_Factory.h"
-#include "orbsvcs/Event/ECG_Mcast_EH.h"
-#include "orbsvcs/Event/ECG_UDP_Sender.h"
-#include "orbsvcs/Event/ECG_UDP_Receiver.h"
-#include "orbsvcs/Event/ECG_UDP_Out_Endpoint.h"
-#include "tao/Strategies/advanced_resource.h"
-#include "tao/ORB_Core.h"
-#include "ace/Get_Opt.h"
-#include "ace/OS_NS_unistd.h"
-
-ACE_RCSID (EC_MT_Mcast,
- MCast,
- "$Id$")
-
-const char *udp_mcast_address =
- ACE_DEFAULT_MULTICAST_ADDR ":10001";
-
-static CORBA::ORB_var orb = CORBA::ORB::_nil ();
-static bool terminate_threads = false;
-static const unsigned pool_size = 2;
-static const int data_items = 60000;
-
-void *
-run_orb_within_thread (void *)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
-
- while (! terminate_threads)
- {
- ACE_TRY
- {
- CORBA::Boolean there_is_work =
- orb->work_pending (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- if (there_is_work)
- {
- // We use a TAO extension. The CORBA mechanism does not
- // provide any decent way to control the duration of
- // perform_work() or work_pending(), so just calling
- // them results in a spin loop.
- ACE_Time_Value tv (0, 50000);
- orb->perform_work (tv ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "perform work");
-
- return 0;
- }
- ACE_ENDTRY;
- ACE_CHECK_RETURN (0);
- }
-
- return 0;
-}
-
-int parse_args (int argc, char *argv[]);
-
-int
-main (int argc, char* argv[])
-{
- // Register the default factory in the Service Configurator.
- // If your platform supports static constructors then you can
- // simply using the ACE_STATIC_SVC_DEFINE() macro, unfortunately TAO
- // must run on platforms where static constructors do not work well,
- // so we have to explicitly invoke this function.
- TAO_EC_Default_Factory::init_svcs ();
-
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- // **************** HERE IS THE ORB SETUP
-
- // Create the ORB, pass the argv list for parsing.
- orb = CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // Parse the arguments, you usually want to do this after
- // invoking ORB_init() because ORB_init() will remove all the
- // -ORB options from the command line.
- if (parse_args (argc, argv) == -1)
- {
- ACE_ERROR ((LM_ERROR,
- "Usage: Service [-m udp_mcast_addr]\n"));
- return 1;
- }
-
- // This is the standard code to get access to the POA and
- // activate it.
- // The POA starts in the holding state, if it is not activated
- // it will not process any requests.
- CORBA::Object_var object =
- orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- PortableServer::POA_var poa =
- PortableServer::POA::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- PortableServer::POAManager_var poa_manager =
- poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // **************** THAT COMPLETES THE ORB SETUP
-
- // **************** HERE IS THE LOCAL EVENT CHANNEL SETUP
-
- // This structure is used to define the startup time event
- // channel configuration.
- // This structure is described in
- //
- // $TAO_ROOT/docs/ec_options.html
- //
- TAO_EC_Event_Channel_Attributes attributes (poa.in (),
- poa.in ());
-
- // Create the Event Channel implementation class
- TAO_EC_Event_Channel ec_impl (attributes);
-
- // Activate the Event Channel, depending on the configuration
- // that may involve creating some threads.
- // But it should always be invoked because several internal data
- // structures are initialized at that point.
- ec_impl.activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The event channel is activated as any other CORBA servant.
- // In this case we use the simple implicit activation with the
- // RootPOA
- RtecEventChannelAdmin::EventChannel_var event_channel =
- ec_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // **************** THAT COMPLETES THE LOCAL EVENT CHANNEL SETUP
-
- // **************** HERE IS THE FEDERATION SETUP
-
- // The next step is to setup the multicast gateways.
- // There are two gateways involved, one sends the locally
- // generated events to the federated peers, the second gateway
- // receives multicast traffic and turns it into local events.
-
- // The sender requires a helper object to select what
- // multicast group will carry what traffic, this is the
- // so-called 'Address Server'.
- // The intention is that advanced applications can use different
- // multicast groups for different events, this can exploit
- // network interfaces that filter unwanted multicast traffic.
- // The helper object is accessed through an IDL interface, so it
- // can reside remotely.
- // In this example, and in many application, using a fixed
- // multicast group is enough, and a local address server is the
- // right approach.
-
- // First we convert the string into an INET address, then we
- // convert that into the right IDL structure:
- ACE_INET_Addr udp_addr (udp_mcast_address);
- ACE_DEBUG ((LM_DEBUG,
- "Multicast address is: %s\n",
- udp_mcast_address));
- RtecUDPAdmin::UDP_Addr addr;
- addr.ipaddr = udp_addr.get_ip_address ();
- addr.port = udp_addr.get_port_number ();
-
- // Now we create and activate the servant
- AddrServer as_impl (addr);
- RtecUDPAdmin::AddrServer_var address_server =
- as_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // We need a local socket to send the data, open it and check
- // that everything is OK:
- TAO_ECG_UDP_Out_Endpoint* endpointptr = 0;
-
- ACE_NEW_RETURN (endpointptr, TAO_ECG_UDP_Out_Endpoint, 0);
-
- TAO_ECG_Refcounted_Endpoint endpoint (endpointptr);
- if (endpoint->dgram ().open (ACE_Addr::sap_any) == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR, "Cannot open send endpoint\n"),
- 1);
- }
-
- // Now we setup the sender:
- TAO_EC_Servant_Var<TAO_ECG_UDP_Sender> sender;
- sender = TAO_ECG_UDP_Sender::create();
-
- sender->init (event_channel.in (),
- address_server.in (),
- endpoint
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // Now we connect the sender as a consumer of events, it will
- // receive any event from any source and send it to the "right"
- // multicast group, as defined by the address server set above:
- RtecEventChannelAdmin::ConsumerQOS sub;
- sub.is_gateway = 1;
-
- sub.dependencies.length (1);
- sub.dependencies[0].event.header.type =
- ACE_ES_EVENT_ANY; // first free event type
- sub.dependencies[0].event.header.source =
- ACE_ES_EVENT_SOURCE_ANY; // Any source is OK
-
- sender->connect (sub ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // To receive events we need to setup an event handler:
- TAO_EC_Servant_Var<TAO_ECG_UDP_Receiver> receiver;
- receiver = TAO_ECG_UDP_Receiver::create();
-
- TAO_ECG_Mcast_EH mcast_eh (&*receiver);
-
- // The event handler uses the ORB reactor to wait for multicast
- // traffic:
- mcast_eh.reactor (orb->orb_core ()->reactor ());
-
- // The multicast Event Handler needs to know to what multicast
- // groups it should listen to. To do so it becomes an observer
- // with the event channel, to determine the list of events
- // required by all the local consumer.
- // Then it register for the multicast groups that carry those
- // events:
- mcast_eh.open (event_channel.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // Again the receiver connects to the event channel as a
- // supplier of events, using the Observer features to detect
- // local consumers and their interests:
- receiver->init (event_channel.in (),
- endpoint,
- address_server.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The Receiver is also a supplier of events. The exact type of
- // events is only known to the application, because it depends
- // on the traffic carried by all the multicast groups that the
- // different event handlers subscribe to.
- // In this example we choose to simply describe our publications
- // using wilcards, any event from any source. More advanced
- // application could use the Observer features in the event
- // channel to update this information (and reduce the number of
- // multicast groups that each receive subscribes to).
- // In a future version the event channel could perform some of
- // those tasks automatically
- RtecEventChannelAdmin::SupplierQOS pub;
- pub.publications.length (1);
- pub.publications[0].event.header.type = ACE_ES_EVENT_ANY;
- pub.publications[0].event.header.source = ACE_ES_EVENT_SOURCE_ANY;
- pub.is_gateway = 1;
-
- receiver->connect (pub ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // **************** THAT COMPLETES THE FEDERATION SETUP
-
- // **************** HERE IS THE CLIENT SETUP
-
- // First let us create consumers and connect them to the event
- // channel
- Consumer consumer1;
- Consumer consumer2;
- RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin =
- event_channel->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- consumer1.connect (consumer_admin.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- consumer2.connect (consumer_admin.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // And now create a supplier
- Supplier supplier;
- RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
- event_channel->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- supplier.connect (supplier_admin.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // **************** THAT COMPLETES THE CLIENT SETUP
-
- // **************** HERE IS THE EVENT LOOP
-
- // creating thread pool
- ACE_Thread_Manager the_ace_manager;
- the_ace_manager.open ();
- int thread_pool_id = the_ace_manager.spawn_n (
- pool_size, ACE_THR_FUNC (run_orb_within_thread), 0, THR_DETACHED | THR_NEW_LWP);
- if (thread_pool_id == -1) {
- ACE_ERROR_RETURN ((LM_ERROR, "Cannot spawn thread pool\n"), 1);
- }
- ACE_OS::sleep (1); // simple solution ensures ready thread pool
-
- for (int i = 0; i < data_items; i++)
- {
- supplier.perform_push (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_OS::sleep (2); // simple solution ensures ready receivers
- terminate_threads = true; // terminate thread pool
-
- the_ace_manager.wait(); // wait until all threads in the pool are stopped
-
- the_ace_manager.close ();
-
- // **************** THAT COMPLETES THE EVENT LOOP
-
- // **************** HERE IS THE CLEANUP CODE
-
- // First the easy ones
- supplier.disconnect (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- consumer1.disconnect (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- consumer2.disconnect (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // Now let us disconnect the Receiver
- receiver->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- int r = mcast_eh.shutdown ();
-
- if (r == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Closing MCast event handler\n"), 1);
- }
-
- // And also disconnect the sender of events
- sender->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The event channel must be destroyed, so it can release its
- // resources, and inform all the clients that are still
- // connected that it is going away.
- event_channel->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // Deactivating the event channel implementation is not strictly
- // required, the POA will do it for us, but it is good manners:
- {
- // Using _this() activates with the default POA, we must gain
- // access to that POA to deactivate the object.
- // Notice that we 'know' that the default POA for this servant
- // is the root POA, but the code is more robust if we don't
- // rely on that.
- PortableServer::POA_var poa =
- ec_impl._default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- // Get the Object Id used for the servant..
- PortableServer::ObjectId_var oid =
- poa->servant_to_id (&ec_impl ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- // Deactivate the object
- poa->deactivate_object (oid.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- // Now we can destroy the POA, the flags mean that we want to
- // wait until the POA is really destroyed
- poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // Finally destroy the ORB
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // **************** THAT COMPLETES THE CLEANUP CODE
-
- ACE_DEBUG ((LM_DEBUG,
- "MCast example finished\n"));
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Service");
- return 1;
- }
- ACE_ENDTRY;
- return 0;
-}
-
-// ****************************************************************
-
-int parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "m:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'm':
- udp_mcast_address = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "[-m udp_mcast_address]"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/Makefile.am b/TAO/orbsvcs/tests/EC_MT_Mcast/Makefile.am
deleted file mode 100644
index 550d53a525c..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/Makefile.am
+++ /dev/null
@@ -1,65 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## $Id$
-##
-## This file was generated by MPC. Any changes made directly to
-## this file will be lost the next time it is generated.
-##
-## MPC Command:
-## ../bin/mwc.pl -type automake -noreldefs TAO.mwc
-
-ACE_BUILDDIR = $(top_builddir)/..
-ACE_ROOT = $(top_srcdir)/..
-TAO_BUILDDIR = $(top_builddir)
-TAO_ROOT = $(top_srcdir)
-
-
-## Makefile.EC_MT_Mcast.am
-
-if BUILD_CORBA_MESSAGING
-if !BUILD_ACE_FOR_TAO
-
-noinst_PROGRAMS = MCast
-
-MCast_CPPFLAGS = \
- -I$(ACE_ROOT) \
- -I$(ACE_BUILDDIR) \
- -I$(TAO_ROOT) \
- -I$(TAO_BUILDDIR) \
- -I$(TAO_ROOT)/orbsvcs \
- -I$(TAO_BUILDDIR)/orbsvcs
-
-MCast_SOURCES = \
- AddrServer.cpp \
- Consumer.cpp \
- MCast.cpp \
- Supplier.cpp \
- AddrServer.h \
- Consumer.h \
- Supplier.h
-
-MCast_LDADD = \
- $(TAO_BUILDDIR)/tao/libTAO_Strategies.la \
- $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_RTEvent_Serv.la \
- $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_RTEvent_Skel.la \
- $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_RTEvent.la \
- $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_Svc_Utils.la \
- $(TAO_BUILDDIR)/tao/libTAO_Messaging.la \
- $(TAO_BUILDDIR)/tao/libTAO_PI.la \
- $(TAO_BUILDDIR)/tao/libTAO_CodecFactory.la \
- $(TAO_BUILDDIR)/tao/libTAO_PortableServer.la \
- $(TAO_BUILDDIR)/tao/libTAO_Valuetype.la \
- $(TAO_BUILDDIR)/tao/libTAO_AnyTypeCode.la \
- $(TAO_BUILDDIR)/tao/libTAO.la \
- $(ACE_BUILDDIR)/ace/libACE.la
-
-endif !BUILD_ACE_FOR_TAO
-endif BUILD_CORBA_MESSAGING
-
-## Clean up template repositories, etc.
-clean-local:
- -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.*
- -rm -f gcctemp.c gcctemp so_locations *.ics
- -rm -rf cxx_repository ptrepository ti_files
- -rm -rf templateregistry ir.out
- -rm -rf ptrepository SunWS_cache Templates.DB
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/README b/TAO/orbsvcs/tests/EC_MT_Mcast/README
deleted file mode 100644
index 561d0e39cae..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/README
+++ /dev/null
@@ -1,13 +0,0 @@
-# $Id$
-
- This directory contains a regression test for a thread safety problem
- in the TAO_ECG_UDP_Receiver class.
- The code is a copy of
- $TAO_ROOT/orbsvcs/examples/RtEC/MCast
- with only minor modifications.
- For further details, see the README there.
-
- The crash will only show up when running multiple MCast processes.
- Therefore, it is easiest use the run_test.pl script to invoke this
- test.
-
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.cpp b/TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.cpp
deleted file mode 100644
index 0060bd58ed5..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// $Id$
-// Reused from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#include "Supplier.h"
-#include "orbsvcs/RtecEventChannelAdminS.h"
-#include "orbsvcs/Event_Service_Constants.h"
-
-ACE_RCSID(EC_MT_Mcast,
- Supplier,
- "$Id$")
-
-Supplier::Supplier (void)
-{
-}
-
-void
-Supplier::connect (RtecEventChannelAdmin::SupplierAdmin_ptr supplier_admin
- ACE_ENV_ARG_DECL)
-{
- this->proxy_ =
- supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- RtecEventComm::PushSupplier_var me =
- this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- // Simple publication, but usually the helper classes in
- // $TAO_ROOT/orbsvcs/Event_Utils.h are a better way to do this.
- RtecEventChannelAdmin::SupplierQOS qos;
- qos.is_gateway = 0;
-
- qos.publications.length (1);
- RtecEventComm::EventHeader& h0 =
- qos.publications[0].event.header;
- h0.type = ACE_ES_EVENT_UNDEFINED; // first free event type
- h0.source = 1; // first free event source
-
- this->proxy_->connect_push_supplier (me.in (), qos
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-}
-
-void
-Supplier::disconnect (ACE_ENV_SINGLE_ARG_DECL)
-{
- // Disconnect from the EC
- ACE_TRY
- {
- this->proxy_->disconnect_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- }
- ACE_ENDTRY;
-
- PortableServer::POA_var poa =
- this->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
- PortableServer::ObjectId_var id =
- poa->servant_to_id (this ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- poa->deactivate_object (id.in () ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-}
-
-void
-Supplier::perform_push (ACE_ENV_SINGLE_ARG_DECL)
-{
- ACE_TRY
- {
- // The event type and source must match our publications
- RtecEventComm::EventSet event (1);
- event.length (1);
- event[0].header.type = ACE_ES_EVENT_UNDEFINED;
- event[0].header.source = 1;
- // Avoid loops throught the event channel federations
- event[0].header.ttl = 1;
-
- this->proxy_->push (event ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- }
- ACE_ENDTRY;
-}
-
-void
-Supplier::disconnect_push_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
-}
-
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.h b/TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.h
deleted file mode 100644
index 8f9f50f2a87..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/Supplier.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// $Id$
-// Reused from: $TAO_ROOT/orbsvcs/examples/RtEC/MCast
-
-#ifndef SUPPLIER_H
-#define SUPPLIER_H
-
-#include "orbsvcs/RtecEventCommS.h"
-#include "orbsvcs/RtecEventChannelAdminC.h"
-
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
-class Supplier : public POA_RtecEventComm::PushSupplier
-{
- // = TITLE
- // Simple supplier object
- //
- // = DESCRIPTION
- // This class is a supplier of events.
- // It simply publishes one event type, when the perform_push()
- // method is invoked it pushes the event through the event service
- //
-public:
- Supplier (void);
- // Constructor
-
- void connect (RtecEventChannelAdmin::SupplierAdmin_ptr supplier_admin
- ACE_ENV_ARG_DECL);
- // Connect to the event channel
-
- void disconnect (ACE_ENV_SINGLE_ARG_DECL);
- // Disconnect from the event channel
-
- void perform_push (ACE_ENV_SINGLE_ARG_DECL);
- // Push a single event
-
- // = The RtecEventComm::PushSupplier methods
-
- virtual void disconnect_push_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException));
- // The skeleton methods.
-
-private:
- RtecEventChannelAdmin::ProxyPushConsumer_var proxy_;
- // The proxy
-};
-
-#endif /* SUPPLIER_H */
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/run_test.pl b/TAO/orbsvcs/tests/EC_MT_Mcast/run_test.pl
deleted file mode 100755
index 0ccaf9b3f72..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/run_test.pl
+++ /dev/null
@@ -1,54 +0,0 @@
-eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
- & eval 'exec perl -S $0 $argv:q'
- if 0;
-
-# $Id$
-# -*- perl -*-
-
-use lib '../../../../bin';
-use PerlACE::Run_Test;
-
-$status = 0;
-
-$svc_conf = PerlACE::LocalFile ("svc$PerlACE::svcconf_ext");
-
-$mcast_address = (int(rand(16)) + 224) . '.' . int(rand(256)) . '.' .
- int(rand(256)) . '.' . int(rand(256)) . ':' .
- (10001 + PerlACE::uniqueid());
-
-# Run two copies of the same test...
-$T1 = new PerlACE::Process ("MCast",
- "-m $mcast_address -ORBSvcConf $svc_conf");
-$T2 = new PerlACE::Process ("MCast",
- "-m $mcast_address -ORBSvcConf $svc_conf");
-
-$sp1 = $T1->Spawn ();
-
-if ($sp1 != 0) {
- print STDERR "ERROR: could not spawn MCast, returned $sp1\n";
- exit 1;
-}
-
-@sp2 = $T2->Spawn ();
-
-if ($sp2 != 0) {
- print STDERR "ERROR: could not spawn MCast, returned $sp2\n";
- $T1->Kill ();
- exit 1;
-}
-
-$test1 = $T1->WaitKill (300);
-
-if ($test1 != 0) {
- print STDERR "ERROR: test 1 returned $test1\n";
- $status = 1;
-}
-
-$test2 = $T2->WaitKill (30);
-
-if ($test2 != 0) {
- print STDERR "ERROR: test 2 returned $test2\n";
- $status = 1;
-}
-
-exit $status;
diff --git a/TAO/orbsvcs/tests/EC_MT_Mcast/svc.conf b/TAO/orbsvcs/tests/EC_MT_Mcast/svc.conf
deleted file mode 100644
index c6fce32e1bc..00000000000
--- a/TAO/orbsvcs/tests/EC_MT_Mcast/svc.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-static EC_Factory "-ECObserver basic -ECProxyPushConsumerCollection mt:copy_on_write:list -ECProxyPushSupplierCollection mt:copy_on_write:list -ECDispatching reactive -ECScheduling null -ECFiltering prefix -ECSupplierFiltering per-supplier"
-static Client_Strategy_Factory "-ORBProfileLock thread -ORBClientConnectionHandler MT"
-static Server_Strategy_Factory "-ORBConcurrency reactive -ORBPOALock thread"
-static Advanced_Resource_Factory "-ORBReactorType tp -ORBInputCDRAllocator thread -ORBConnectionCacheLock thread"