summaryrefslogtreecommitdiff
path: root/TAO
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-06-10 15:49:42 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-06-10 15:49:42 +0000
commit7e06498a00bd2976f3058f1a94ffc0f4cd996e52 (patch)
tree1e1138ee8a9b8007302a900d82acade790477229 /TAO
parentc12ff1c3223acbec6788e3cd01e56c0741b6f7e5 (diff)
downloadATCD-7e06498a00bd2976f3058f1a94ffc0f4cd996e52.tar.gz
ChangeLogTag:Wed Jun 10 10:28:31 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
Diffstat (limited to 'TAO')
-rw-r--r--TAO/ChangeLog-98c51
-rw-r--r--TAO/TAO_IDL/driver/drv_preproc.cpp2
-rw-r--r--TAO/examples/Simulator/Event_Supplier/Event_Sup.cpp46
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp203
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_Gateway.h101
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp214
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/Event_Channel.h36
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/Event_Channel.i4
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/Local_ESTypes.h13
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/RT_Task.cpp54
-rw-r--r--TAO/orbsvcs/orbsvcs/Event_Utilities.cpp56
-rw-r--r--TAO/orbsvcs/orbsvcs/Event_Utilities.i53
-rw-r--r--TAO/orbsvcs/orbsvcs/RtecEventChannelAdmin.idl10
-rw-r--r--TAO/orbsvcs/orbsvcs/Runtime_Scheduler.cpp2
-rw-r--r--TAO/orbsvcs/orbsvcs/Scheduler_Factory.h2
-rw-r--r--TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp77
-rw-r--r--TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.h2
-rw-r--r--TAO/orbsvcs/tests/EC_Multiple/svc.conf46
18 files changed, 640 insertions, 332 deletions
diff --git a/TAO/ChangeLog-98c b/TAO/ChangeLog-98c
index dec5ec2dca2..e364d26b420 100644
--- a/TAO/ChangeLog-98c
+++ b/TAO/ChangeLog-98c
@@ -1,3 +1,54 @@
+Wed Jun 10 10:28:31 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
+
+ * orbsvcs/orbsvcs/Event/Event_Channel.h:
+ * orbsvcs/orbsvcs/Event/Event_Channel.i:
+ * orbsvcs/orbsvcs/Event/Event_Channel.cpp:
+ Added support to automatically create the publication and
+ subscription lists for the gateways.
+
+ * orbsvcs/orbsvcs/RtecEventChannelAdmin.idl:
+ Added fields to the QOS structures so gateways can be
+ distinguished in the EC.
+ Several field names were inconsistent (some had a trailing _ and
+ others won't).
+
+ * orbsvcs/orbsvcs/Event_Utilities.h:
+ * orbsvcs/orbsvcs/Event_Utilities.i:
+ Adapted to use the changes in the QOS structures.
+
+ * orbsvcs/orbsvcs/Event/EC_Gateway.h:
+ * orbsvcs/orbsvcs/Event/EC_Gateway.cpp:
+ As part of the plan to support UDP and multicast gateways we
+ have a base class to handle all the different configurations for
+ a gateway.
+
+ * orbsvcs/orbsvcs/Event/Local_ESTypes.h:
+ Removed a lot of BOAImpl typesdefs, they were completely
+ outdated and quite ugly.
+
+ * orbsvcs/orbsvcs/Event/RT_Task.cpp:
+ Added code to call ORB_init() no each thread, but it is
+ commented out until we know what arguments to pass and how.
+
+ * orbsvcs/orbsvcs/Scheduler_Factory.h:
+ * orbsvcs/orbsvcs/Runtime_Scheduler.cpp:
+ We cannot use enums in the POD_RTInfo because those are hard to
+ generate correctly.
+
+ * orbsvcs/tests/EC_Multiple/svc.conf:
+ I'm starting to set a more realistic config for the Event
+ Channel, but we still have a lot of work to do in this area.
+
+ * orbsvcs/tests/EC_Multiple/EC_Multiple.h:
+ * orbsvcs/tests/EC_Multiple/EC_Multiple.cpp:
+ The test uses the automatic gateway connection now.
+
+ * orbsvcs/tests/Simulator/Event_Supplier/Event_Sup.cpp:
+ The ConsumerQOS and SupplierQOS structure have changed.
+
+ * TAO_IDL/driver/drv_preproc.cpp:
+ Fixed type in comment.
+
Tue Jun 09 17:27:25 1998 Nanbor Wang <nanbor@cs.wustl.edu>
* tao/Connect.{h,cpp} (activate): Added this method to
diff --git a/TAO/TAO_IDL/driver/drv_preproc.cpp b/TAO/TAO_IDL/driver/drv_preproc.cpp
index 32c74256d63..69c92c911ee 100644
--- a/TAO/TAO_IDL/driver/drv_preproc.cpp
+++ b/TAO/TAO_IDL/driver/drv_preproc.cpp
@@ -321,7 +321,7 @@ DRV_pre_proc(char *myfile)
}
(*DRV_FE_set_yyin)((File *) yyin);
- // @@ TODO: This is not protable, cat(1) is a UNIX tool.
+ // @@ TODO: This is not portable, cat(1) is a UNIX tool.
if (idl_global->compile_flags() & IDL_CF_ONLY_PREPROC) {
sprintf(catbuf, "cat < %s", tmp_file);
system(catbuf);
diff --git a/TAO/examples/Simulator/Event_Supplier/Event_Sup.cpp b/TAO/examples/Simulator/Event_Supplier/Event_Sup.cpp
index 36adeec054b..8de9220a1d8 100644
--- a/TAO/examples/Simulator/Event_Supplier/Event_Sup.cpp
+++ b/TAO/examples/Simulator/Event_Supplier/Event_Sup.cpp
@@ -130,37 +130,37 @@ Demo_Supplier::open_supplier (RtecEventChannelAdmin::EventChannel_ptr ec,
CORBA::Short x = 0;
RtecEventChannelAdmin::SupplierQOS qos_;
- qos_.publications_.length (2);
- qos_.publications_[0].event_.source_ = SOURCE_ID;
- qos_.publications_[0].event_.type_ = ACE_ES_EVENT_NOTIFICATION;
- qos_.publications_[0].event_.ttl_ = 1;
- qos_.publications_[0].event_.creation_time_ = ORBSVCS_Time::zero;
+ qos_.publications.length (2);
+ qos_.publications[0].event.source_ = SOURCE_ID;
+ qos_.publications[0].event.type_ = ACE_ES_EVENT_NOTIFICATION;
+ qos_.publications[0].event.ttl_ = 1;
+ qos_.publications[0].event.creation_time_ = ORBSVCS_Time::zero;
// default values
- qos_.publications_[0].event_.ec_recv_time_ = ORBSVCS_Time::zero;
- qos_.publications_[0].event_.ec_send_time_ = ORBSVCS_Time::zero;
- qos_.publications_[0].event_.data_.x = 0;
- qos_.publications_[0].event_.data_.y = 0;
- qos_.publications_[0].event_.data_.any_value.replace (CORBA::_tc_short,
+ qos_.publications[0].event.ec_recv_time_ = ORBSVCS_Time::zero;
+ qos_.publications[0].event.ec_send_time_ = ORBSVCS_Time::zero;
+ qos_.publications[0].event.data_.x = 0;
+ qos_.publications[0].event.data_.y = 0;
+ qos_.publications[0].event.data_.any_value.replace (CORBA::_tc_short,
&x,
0,
TAO_TRY_ENV);
- qos_.publications_[0].dependency_info_.number_of_calls = 1;
- qos_.publications_[0].dependency_info_.rt_info = rt_info_;
- qos_.publications_[1].event_.source_ = SOURCE_ID;
- qos_.publications_[1].event_.type_ = ACE_ES_EVENT_SHUTDOWN;
- qos_.publications_[1].event_.ttl_ = 1;
- qos_.publications_[1].event_.creation_time_ = ORBSVCS_Time::zero;
+ qos_.publications[0].dependency_info.number_of_calls = 1;
+ qos_.publications[0].dependency_info.rt_info = rt_info_;
+ qos_.publications[1].event.source_ = SOURCE_ID;
+ qos_.publications[1].event.type_ = ACE_ES_EVENT_SHUTDOWN;
+ qos_.publications[1].event.ttl_ = 1;
+ qos_.publications[1].event.creation_time_ = ORBSVCS_Time::zero;
// default values.
- qos_.publications_[1].event_.ec_recv_time_ = ORBSVCS_Time::zero;
- qos_.publications_[1].event_.ec_send_time_ = ORBSVCS_Time::zero;
- qos_.publications_[1].event_.data_.x = 0;
- qos_.publications_[1].event_.data_.y = 0;
- qos_.publications_[1].event_.data_.any_value.replace (CORBA::_tc_short,
+ qos_.publications[1].event.ec_recv_time_ = ORBSVCS_Time::zero;
+ qos_.publications[1].event.ec_send_time_ = ORBSVCS_Time::zero;
+ qos_.publications[1].event.data_.x = 0;
+ qos_.publications[1].event.data_.y = 0;
+ qos_.publications[1].event.data_.any_value.replace (CORBA::_tc_short,
&x,
0,
TAO_TRY_ENV);
- qos_.publications_[1].dependency_info_.number_of_calls = 1;
- qos_.publications_[1].dependency_info_.rt_info = rt_info_;
+ qos_.publications[1].dependency_info.number_of_calls = 1;
+ qos_.publications[1].dependency_info.rt_info = rt_info_;
// = Connect as a supplier.
this->supplier_admin_ =
diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp
index d4b9f5a9826..8b04a747a10 100644
--- a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp
+++ b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp
@@ -3,29 +3,92 @@
//
#include "orbsvcs/Event/EC_Gateway.h"
+#include "orbsvcs/Event_Utilities.h"
+#include "orbsvcs/Time_Utilities.h"
-TAO_EC_Gateway::TAO_EC_Gateway (void)
+TAO_EC_Gateway::~TAO_EC_Gateway (void)
+{
+}
+
+// ****************************************************************
+
+TAO_EC_Gateway_IIOP::TAO_EC_Gateway_IIOP (void)
: consumer_ (this),
supplier_ (this)
{
}
-TAO_EC_Gateway::~TAO_EC_Gateway (void)
+TAO_EC_Gateway_IIOP::~TAO_EC_Gateway_IIOP (void)
{
}
-int
-TAO_EC_Gateway::open (RtecEventChannelAdmin::EventChannel_ptr remote_ec,
- RtecEventChannelAdmin::EventChannel_ptr local_ec,
- const RtecEventChannelAdmin::ConsumerQOS& subscriptions,
- const RtecEventChannelAdmin::SupplierQOS& publications,
- CORBA::Environment &_env)
+void
+TAO_EC_Gateway_IIOP::init (RtecEventChannelAdmin::EventChannel_ptr rmt_ec,
+ RtecEventChannelAdmin::EventChannel_ptr lcl_ec,
+ RtecScheduler::Scheduler_ptr rmt_sched,
+ RtecScheduler::Scheduler_ptr lcl_sched,
+ const char* lcl_name,
+ const char* rmt_name,
+ CORBA::Environment &_env)
+{
+ this->rmt_ec_ =
+ RtecEventChannelAdmin::EventChannel::_duplicate (rmt_ec);
+ this->lcl_ec_ =
+ RtecEventChannelAdmin::EventChannel::_duplicate (lcl_ec);
+
+ this->rmt_info_ =
+ rmt_sched->create (rmt_name, _env);
+ if (_env.exception () != 0) return;
+
+ // @@ TODO Many things are hard-coded in the RT_Info here.
+
+ // The worst case execution time is far less than 500 usecs, but
+ // that is a safe estimate....
+ ACE_Time_Value tv (0, 500);
+ TimeBase::TimeT time;
+ ORBSVCS_Time::Time_Value_to_TimeT (time, tv);
+ rmt_sched->set (this->rmt_info_,
+ RtecScheduler::VERY_HIGH_CRITICALITY,
+ time, time, time,
+ 25000 * 10,
+ RtecScheduler::VERY_LOW_IMPORTANCE,
+ time,
+ 0,
+ RtecScheduler::OPERATION,
+ _env);
+ if (_env.exception () != 0) return;
+
+ this->lcl_info_ =
+ lcl_sched->create (lcl_name, _env);
+ if (_env.exception () != 0) return;
+
+ lcl_sched->set (this->lcl_info_,
+ RtecScheduler::VERY_HIGH_CRITICALITY,
+ time, time, time,
+ 25000 * 10,
+ RtecScheduler::VERY_LOW_IMPORTANCE,
+ time,
+ 1,
+ RtecScheduler::OPERATION,
+ _env);
+ if (_env.exception () != 0) return;
+
+}
+
+void
+TAO_EC_Gateway_IIOP::open (const RtecEventChannelAdmin::ConsumerQOS& sub,
+ const RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment &_env)
{
TAO_TRY
{
+ if (CORBA::is_nil (this->lcl_ec_.in ())
+ || CORBA::is_nil (this->rmt_ec_.in ()))
+ return;
+
// = Connect as a supplier to the local EC
RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
- local_ec->for_suppliers (TAO_TRY_ENV);
+ this->lcl_ec_->for_suppliers (TAO_TRY_ENV);
TAO_CHECK_ENV;
this->consumer_proxy_ =
@@ -36,13 +99,16 @@ TAO_EC_Gateway::open (RtecEventChannelAdmin::EventChannel_ptr remote_ec,
this->supplier_._this (TAO_TRY_ENV);
TAO_CHECK_ENV;
+ //ACE_DEBUG ((LM_DEBUG, "Gateway/Supplier "));
+ //ACE_SupplierQOS_Factory::debug (pub);
+
this->consumer_proxy_->connect_push_supplier (supplier_ref.in (),
- publications,
+ pub,
TAO_TRY_ENV);
TAO_CHECK_ENV;
RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin =
- remote_ec->for_consumers (TAO_TRY_ENV);
+ this->rmt_ec_->for_consumers (TAO_TRY_ENV);
TAO_CHECK_ENV;
this->supplier_proxy_ =
@@ -53,40 +119,102 @@ TAO_EC_Gateway::open (RtecEventChannelAdmin::EventChannel_ptr remote_ec,
this->consumer_._this (TAO_TRY_ENV);
TAO_CHECK_ENV;
+ //ACE_DEBUG ((LM_DEBUG, "Gateway/Consumer "));
+ //ACE_ConsumerQOS_Factory::debug (sub);
+
this->supplier_proxy_->connect_push_consumer (consumer_ref.in (),
- subscriptions,
+ sub,
TAO_TRY_ENV);
TAO_CHECK_ENV;
}
TAO_CATCHANY
{
- TAO_TRY_ENV.print_exception ("TAO_EC_Gateway::open");
- TAO_RETHROW_RETURN (-1);
+ TAO_TRY_ENV.print_exception ("TAO_EC_Gateway_IIOP::open");
+ this->consumer_proxy_ = 0;
+ this->supplier_proxy_ = 0;
+
+ TAO_RETHROW;
}
TAO_ENDTRY;
+}
- return 0;
+void
+TAO_EC_Gateway_IIOP::close (CORBA::Environment &env)
+{
+ if (CORBA::is_nil (this->consumer_proxy_.in ())
+ || CORBA::is_nil (this->supplier_proxy_.in ()))
+ return;
+
+ this->consumer_proxy_->disconnect_push_consumer (env);
+ if (env.exception () != 0) return;
+ this->consumer_proxy_ = 0;
+
+ this->supplier_proxy_->disconnect_push_supplier (env);
+ if (env.exception () != 0) return;
+ this->supplier_proxy_ = 0;
}
void
-TAO_EC_Gateway::disconnect_push_consumer (CORBA::Environment &)
+TAO_EC_Gateway_IIOP::update_consumer (RtecEventChannelAdmin::ConsumerQOS& sub,
+ RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment& env)
+{
+ this->close (env);
+ if (env.exception () != 0) return;
+
+ for (CORBA::ULong i = 0; i < sub.dependencies.length (); ++i)
+ {
+ sub.dependencies[i].rt_info = this->rmt_info_;
+ }
+
+ for (CORBA::ULong j = 0; j < pub.publications.length (); ++j)
+ {
+ pub.publications[j].dependency_info.rt_info = this->lcl_info_;
+ }
+
+ this->open (sub, pub, env);
+}
+
+void
+TAO_EC_Gateway_IIOP::update_supplier (RtecEventChannelAdmin::ConsumerQOS& sub,
+ RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment& env)
+{
+ this->close (env);
+ if (env.exception () != 0) return;
+
+ for (CORBA::ULong i = 0; i < sub.dependencies.length (); ++i)
+ {
+ sub.dependencies[i].rt_info = this->rmt_info_;
+ }
+
+ for (CORBA::ULong j = 0; j < pub.publications.length (); ++j)
+ {
+ pub.publications[j].dependency_info.rt_info = this->lcl_info_;
+ }
+
+ this->open (sub, pub, env);
+}
+
+void
+TAO_EC_Gateway_IIOP::disconnect_push_consumer (CORBA::Environment &)
{
ACE_DEBUG ((LM_DEBUG,
- "Supplier-consumer received disconnect from channel.\n"));
+ "ECG: Supplier-consumer received disconnect from channel.\n"));
}
void
-TAO_EC_Gateway::disconnect_push_supplier (CORBA::Environment &)
+TAO_EC_Gateway_IIOP::disconnect_push_supplier (CORBA::Environment &)
{
ACE_DEBUG ((LM_DEBUG,
- "Supplier received disconnect from channel.\n"));
+ "ECG: Supplier received disconnect from channel.\n"));
}
void
-TAO_EC_Gateway::push (const RtecEventComm::EventSet &events,
- CORBA::Environment & _env)
+TAO_EC_Gateway_IIOP::push (const RtecEventComm::EventSet &events,
+ CORBA::Environment & _env)
{
- // ACE_DEBUG ((LM_DEBUG, "TAO_EC_Gateway::push - "));
+ //ACE_DEBUG ((LM_DEBUG, "TAO_EC_Gateway_IIOP::push - "));
if (events.length () == 0)
{
@@ -94,7 +222,7 @@ TAO_EC_Gateway::push (const RtecEventComm::EventSet &events,
return;
}
- // ACE_DEBUG ((LM_DEBUG, "ECP: %d event(s)\n", events.length ()));
+ //ACE_DEBUG ((LM_DEBUG, "ECP: %d event(s) - ", events.length ()));
// @@ TODO, there is an extra data copy here, we should do the event
// modification without it and only compact the necessary events.
@@ -102,6 +230,7 @@ TAO_EC_Gateway::push (const RtecEventComm::EventSet &events,
RtecEventComm::EventSet out (events.length ());
for (u_int i = 0; i < events.length (); ++i)
{
+ //ACE_DEBUG ((LM_DEBUG, "type = %d ", events[i].type_));
if (events[i].ttl_ > 0)
{
count++;
@@ -110,6 +239,7 @@ TAO_EC_Gateway::push (const RtecEventComm::EventSet &events,
out[count - 1].ttl_--;
}
}
+ //ACE_DEBUG ((LM_DEBUG, "count = %d\n", count));
if (count > 0)
{
@@ -118,30 +248,21 @@ TAO_EC_Gateway::push (const RtecEventComm::EventSet &events,
}
int
-TAO_EC_Gateway::shutdown (CORBA::Environment& _env)
+TAO_EC_Gateway_IIOP::shutdown (CORBA::Environment& _env)
{
- TAO_TRY
- {
- this->consumer_proxy_->disconnect_push_consumer (TAO_TRY_ENV);
- TAO_CHECK_ENV;
+ this->close (_env);
+ if (_env.exception () == 0) return -1;
- // Disconnect from the push supplier.
- this->supplier_proxy_->disconnect_push_supplier (TAO_TRY_ENV);
- TAO_CHECK_ENV;
- }
- TAO_CATCHANY
- {
- TAO_RETHROW_RETURN(-1);
- }
- TAO_ENDTRY;
+ this->lcl_ec_ = 0;
+ this->rmt_ec_ = 0;
return 0;
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_PushConsumer_Adapter<TAO_EC_Gateway>;
-template class ACE_PushSupplier_Adapter<TAO_EC_Gateway>;
+template class ACE_PushConsumer_Adapter<TAO_EC_Gateway_IIOP>;
+template class ACE_PushSupplier_Adapter<TAO_EC_Gateway_IIOP>;
#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_PushConsumer_Adapter<TAO_EC_Gateway>
-#pragma instantiate ACE_PushSupplier_Adapter<TAO_EC_Gateway>
+#pragma instantiate ACE_PushConsumer_Adapter<TAO_EC_Gateway_IIOP>
+#pragma instantiate ACE_PushSupplier_Adapter<TAO_EC_Gateway_IIOP>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.h b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.h
index 1548007555f..a37ccc7d400 100644
--- a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.h
+++ b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.h
@@ -38,9 +38,57 @@
#include "orbsvcs/Channel_Clients_T.h"
class TAO_ORBSVCS_Export TAO_EC_Gateway
+{
+ // = TITLE
+ // Event Channel Gateway
+ //
+ // = DESCRIPTION
+ // There are several ways to connect several EC together, for
+ // instance:
+ // + A single class can use normal IIOP and connect to one EC as
+ // a supplier and to another EC as a consumer.
+ // + A class connects as a consumer and transmit the events using
+ // multicast, another class receives the multicast messages and
+ // transform them back into a push() call.
+ //
+ // This is an abstract class to represent all the different
+ // strategies for EC distribution.
+ //
+public:
+ virtual ~TAO_EC_Gateway (void);
+ // Destructor
+
+ virtual void open (const RtecEventChannelAdmin::ConsumerQOS& subscriptions,
+ const RtecEventChannelAdmin::SupplierQOS& publications,
+ CORBA::Environment& env) = 0;
+ // This method is invoked to create the first connection to the ECs
+
+ virtual void close (CORBA::Environment& env) = 0;
+ // The gateway must disconnect from all the relevant event channels,
+ // or any other communication media (such as multicast groups).
+
+ virtual void update_consumer (RtecEventChannelAdmin::ConsumerQOS& sub,
+ RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment& env) = 0;
+ // The subscription list in the managing EC has changed, thus the
+ // gateway must reconnect (or update its connection) to the remote
+ // EC. The SupplierQOS can be used if the gateway also connect as a
+ // consumer.
+
+ virtual void update_supplier (RtecEventChannelAdmin::ConsumerQOS& sub,
+ RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment& env) = 0;
+ // The publication list in the managing EC has changed, thus the
+ // gateway must reconnect (or update its connection) to the remote
+ // EC. The ConsumerQOS can be used if the gateway also connect as a
+ // consumer.
+};
+
+// ****************************************************************
+class TAO_ORBSVCS_Export TAO_EC_Gateway_IIOP : public TAO_EC_Gateway
//
// = TITLE
-// Event Channel Gateway.
+// Event Channel Gateway using IIOP.
//
// = DESCRIPTION
// This class mediates among two event channels, it connects as a
@@ -67,16 +115,22 @@ class TAO_ORBSVCS_Export TAO_EC_Gateway
//
{
public:
- TAO_EC_Gateway (void);
- ~TAO_EC_Gateway (void);
-
- int open (RtecEventChannelAdmin::EventChannel_ptr remote_ec,
- RtecEventChannelAdmin::EventChannel_ptr local_ec,
- const RtecEventChannelAdmin::ConsumerQOS& subscriptions,
- const RtecEventChannelAdmin::SupplierQOS& publications,
- CORBA::Environment &_env);
- // Establish the connections.
-
+ TAO_EC_Gateway_IIOP (void);
+ ~TAO_EC_Gateway_IIOP (void);
+
+ void init (RtecEventChannelAdmin::EventChannel_ptr rmt_ec,
+ RtecEventChannelAdmin::EventChannel_ptr lcl_ec,
+ RtecScheduler::Scheduler_ptr rmt_sched,
+ RtecScheduler::Scheduler_ptr lcl_sched,
+ const char* lcl_name,
+ const char* rmt_name,
+ CORBA::Environment &_env);
+ // To do its job this class requires to know the local and remote
+ // ECs it will connect to; furthermore it also requires to build
+ // RT_Infos for the local and remote schedulers.
+ // @@ TODO part of the RT_Info is hardcoded, we need to make it
+ // parametric.
+
void disconnect_push_supplier (CORBA::Environment &);
// The channel is disconnecting.
@@ -89,12 +143,33 @@ public:
// local event channel.
int shutdown (CORBA::Environment&);
+ // Disconnect and shutdown the gateway
+
+ // The following methods are documented in the base class.
+ virtual void open (const RtecEventChannelAdmin::ConsumerQOS& subscriptions,
+ const RtecEventChannelAdmin::SupplierQOS& publications,
+ CORBA::Environment &_env);
+ virtual void close (CORBA::Environment& _env);
+ virtual void update_consumer (RtecEventChannelAdmin::ConsumerQOS& sub,
+ RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment& env);
+ virtual void update_supplier (RtecEventChannelAdmin::ConsumerQOS& sub,
+ RtecEventChannelAdmin::SupplierQOS& pub,
+ CORBA::Environment& env);
private:
- ACE_PushConsumer_Adapter<TAO_EC_Gateway> consumer_;
+ RtecEventChannelAdmin::EventChannel_var rmt_ec_;
+ RtecEventChannelAdmin::EventChannel_var lcl_ec_;
+ // The remote and the local EC, so we can reconnect when the list changes.
+
+ RtecScheduler::handle_t rmt_info_;
+ RtecScheduler::handle_t lcl_info_;
+ // Our local and remote RT_Infos.
+
+ ACE_PushConsumer_Adapter<TAO_EC_Gateway_IIOP> consumer_;
// Our consumer personality....
- ACE_PushSupplier_Adapter<TAO_EC_Gateway> supplier_;
+ ACE_PushSupplier_Adapter<TAO_EC_Gateway_IIOP> supplier_;
// Our supplier personality....
RtecEventChannelAdmin::ProxyPushConsumer_var consumer_proxy_;
diff --git a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp
index 95f84eab785..e4dcc37258b 100644
--- a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp
+++ b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp
@@ -2,9 +2,11 @@
#include "ace/Service_Config.h"
#include "orbsvcs/Scheduler_Factory.h"
+#include "orbsvcs/Event_Utilities.h"
#include "Dispatching_Modules.h"
#include "Memory_Pools.h"
+#include "EC_Gateway.h"
#include "Event_Channel.h"
// These are to save space.
@@ -159,7 +161,7 @@ public:
ACE_ES_Dependency_Iterator iter (consumer->qos ().dependencies);
while (iter.advance_dependency () == 0)
{
- RtecEventComm::EventType &type = (*iter).event_.type_;
+ RtecEventComm::EventType &type = (*iter).event.type_;
if (type != ACE_ES_GLOBAL_DESIGNATOR &&
type != ACE_ES_CONJUNCTION_DESIGNATOR &&
type != ACE_ES_DISJUNCTION_DESIGNATOR)
@@ -442,20 +444,21 @@ ACE_Push_Supplier_Proxy::connect_push_supplier (RtecEventComm::PushSupplier_ptr
if (this->connected ())
TAO_THROW (RtecEventChannelAdmin::AlreadyConnected);
- push_supplier_ =
+ this->push_supplier_ =
RtecEventComm::PushSupplier::_duplicate(push_supplier);
- // ACE_SupplierQOS_Factory::debug (qos);
+ //ACE_DEBUG ((LM_DEBUG, "connect_push_supplier QOS is "));
+ //ACE_SupplierQOS_Factory::debug (qos);
// Copy by value.
- qos_ = qos;
+ this->qos_ = qos;
// ACE_SupplierQOS_Factory::debug (qos_);
// @@ TODO: The SupplierQOS should have a more reasonable interface to
// obtain the supplier_id(), BTW, a callback to push_supplier will
// not work: it usually results in some form of dead-lock.
- source_id_ = qos_.publications_[0].event_.source_;
+ this->source_id_ = qos_.publications[0].event.source_;
supplier_module_->connected (this, _env);
}
@@ -550,19 +553,20 @@ ACE_Push_Consumer_Proxy::connect_push_consumer (RtecEventComm::PushConsumer_ptr
if (this->connected ())
TAO_THROW (RtecEventChannelAdmin::AlreadyConnected);
- push_consumer_ =
+ this->push_consumer_ =
RtecEventComm::PushConsumer::_duplicate(push_consumer);
// @@ TODO Find out why are two duplicates needed...
RtecEventComm::PushConsumer::_duplicate(push_consumer);
- // ACE_ConsumerQOS_Factory::debug (qos);
+ //ACE_DEBUG ((LM_DEBUG, "connect_push_consumer QOS is "));
+ //ACE_ConsumerQOS_Factory::debug (qos);
// Copy by value.
- qos_ = qos;
+ this->qos_ = qos;
// ACE_ConsumerQOS_Factory::debug (qos_);
- consumer_module_->connected (this, _env);
+ this->consumer_module_->connected (this, _env);
}
void
@@ -738,6 +742,48 @@ ACE_EventChannel::report_disconnect_i (u_long event)
ACE_DEBUG ((LM_DEBUG, "(%t) Event Channel has no consumers or suppliers.\n"));
}
+void
+ACE_EventChannel::add_gateway (TAO_EC_Gateway* gw)
+{
+ this->gwys_.insert (gw);
+}
+
+void
+ACE_EventChannel::del_gateway (TAO_EC_Gateway* gw)
+{
+ this->gwys_.remove (gw);
+}
+
+void
+ACE_EventChannel::update_consumer_gwys (CORBA::Environment& _env)
+{
+ if (this->gwys_.is_empty ())
+ return;
+
+ ACE_DEBUG ((LM_DEBUG, "Event_Channel::update_consumer_gwys\n"));
+
+ RtecEventChannelAdmin::ConsumerQOS c_qos;
+ RtecEventChannelAdmin::SupplierQOS s_qos;
+ this->consumer_module_->fill_qos (c_qos, s_qos);
+ for (Gateway_Set_Iterator i = this->gwys_.begin ();
+ i != this->gwys_.end ();
+ ++i)
+ {
+ TAO_EC_Gateway* gw = *i;
+ gw->update_consumer (c_qos, s_qos, _env);
+ if (_env.exception () != 0) return;
+ }
+}
+
+void
+ACE_EventChannel::update_supplier_gwys (CORBA::Environment&)
+{
+ if (this->gwys_.is_empty ())
+ return;
+}
+
+// ****************************************************************
+
ACE_ES_Disjunction_Group::~ACE_ES_Disjunction_Group (void)
{
}
@@ -971,8 +1017,11 @@ void
ACE_ES_Consumer_Module::connected (ACE_Push_Consumer_Proxy *consumer,
CORBA::Environment &_env)
{
- channel_->report_connect (ACE_EventChannel::CONSUMER);
- down_->connected (consumer, _env);
+ this->channel_->report_connect (ACE_EventChannel::CONSUMER);
+ this->down_->connected (consumer, _env);
+ if (_env.exception () != 0) return;
+ if (!consumer->qos ().is_gateway)
+ this->channel_->update_consumer_gwys (_env);
}
void
@@ -1105,6 +1154,9 @@ ACE_ES_Consumer_Module::disconnecting (ACE_Push_Consumer_Proxy *consumer,
delete sc;
delete act;
}
+
+ if (!consumer->qos ().is_gateway)
+ this->channel_->update_consumer_gwys (_env);
}
// This method executes in the same thread of control that will hand
@@ -1162,6 +1214,81 @@ ACE_ES_Consumer_Module::obtain_push_supplier (CORBA::Environment &_env)
return new_consumer->get_ref ();
}
+void
+ACE_ES_Consumer_Module::fill_qos (RtecEventChannelAdmin::ConsumerQOS& c_qos,
+ RtecEventChannelAdmin::SupplierQOS& s_qos)
+{
+ ACE_GUARD (ACE_ES_MUTEX, ace_mon, this->lock_);
+
+ c_qos.is_gateway = CORBA::B_TRUE;
+ s_qos.is_gateway = CORBA::B_TRUE;
+
+ int count = 0;
+ {
+ for (Consumer_Iterator i = this->all_consumers_.begin ();
+ i != this->all_consumers_.end ();
+ ++i)
+ {
+ ACE_Push_Consumer_Proxy *c = *i;
+
+ if (c->qos ().is_gateway)
+ continue;
+
+ count += c->qos ().dependencies.length ();
+ }
+ }
+
+ c_qos.dependencies.length (count + 1);
+ s_qos.publications.length (count);
+
+ int cc = 0;
+ int sc = 0;
+ c_qos.dependencies[cc].event.type_ = ACE_ES_DISJUNCTION_DESIGNATOR;
+ c_qos.dependencies[cc].event.source_ = 0;
+ c_qos.dependencies[cc].event.creation_time_ = ORBSVCS_Time::zero;
+ c_qos.dependencies[cc].rt_info = 0;
+ cc++;
+
+ for (Consumer_Iterator i = this->all_consumers_.begin ();
+ i != this->all_consumers_.end ();
+ ++i)
+ {
+ ACE_Push_Consumer_Proxy *c = *i;
+
+ if (c->qos ().is_gateway)
+ continue;
+
+ CORBA::ULong count = c->qos ().dependencies.length ();
+ for (CORBA::ULong j = 0; j < count; ++j)
+ {
+ RtecEventComm::Event& event =
+ c->qos ().dependencies[j].event;
+
+ RtecEventComm::EventType type = event.type_;
+ if (type <= ACE_ES_EVENT_UNDEFINED)
+ continue;
+
+ c_qos.dependencies[cc].event.type_ = event.type_;
+ c_qos.dependencies[cc].event.source_ = event.source_;
+ c_qos.dependencies[cc].event.creation_time_ = ORBSVCS_Time::zero;
+ // The RT_Info is filled up later.
+ c_qos.dependencies[cc].rt_info = 0;
+ cc++;
+
+ s_qos.publications[sc].event.type_ = event.type_;
+ s_qos.publications[sc].event.source_ = event.source_;
+ s_qos.publications[sc].event.creation_time_ = ORBSVCS_Time::zero;
+ s_qos.publications[sc].dependency_info.dependency_type =
+ RtecScheduler::TWO_WAY_CALL;
+ s_qos.publications[sc].dependency_info.number_of_calls = 1;
+ s_qos.publications[sc].dependency_info.rt_info = 0;
+ sc++;
+ }
+ }
+ c_qos.dependencies.length (cc);
+ s_qos.publications.length (sc);
+}
+
// ************************************************************
ACE_ES_Correlation_Module::ACE_ES_Correlation_Module (ACE_EventChannel *channel)
@@ -1236,9 +1363,9 @@ int
ACE_ES_Correlation_Module::schedule_timeout (ACE_ES_Consumer_Rep_Timeout *consumer)
{
RtecEventComm::Time &interval =
- consumer->dependency ()->event_.creation_time_;
+ consumer->dependency ()->event.creation_time_;
RtecEventComm::Time &delay =
- consumer->dependency ()->event_.creation_time_;
+ consumer->dependency ()->event.creation_time_;
// Store the preemption priority so we can cancel the correct timer.
// The priority values may change during the process lifetime (e.g.,
@@ -1290,9 +1417,9 @@ ACE_ES_Correlation_Module::reschedule_timeout (ACE_ES_Consumer_Rep_Timeout *cons
else
{
RtecEventComm::Time &interval =
- consumer->dependency ()->event_.creation_time_;
+ consumer->dependency ()->event.creation_time_;
RtecEventComm::Time &delay =
- consumer->dependency ()->event_.creation_time_;
+ consumer->dependency ()->event.creation_time_;
// Store the preemption priority so we can cancel the correct timer.
// The priority values may change during the process lifetime (e.g.,
@@ -1431,7 +1558,7 @@ ACE_ES_Consumer_Correlation::connected (ACE_Push_Consumer_Proxy *consumer,
consumer_ = consumer;
// for (CORBA_Types::ULong index=0; index < consumer->qos ().dependencies_.length (); index++)
- // consumer->qos ().dependencies_[index].event_.dump ();
+ // consumer->qos ().dependencies_[index].event.dump ();
ACE_ES_Dependency_Iterator iter (consumer->qos ().dependencies);
iter.parse ();
@@ -1450,7 +1577,7 @@ ACE_ES_Consumer_Correlation::connected (ACE_Push_Consumer_Proxy *consumer,
// Keep track of how many conjunction and disjunction groups are
// registered. Update the index pointers so that the helper
// functions can update the appropriate group objects.
- switch ((*iter).event_.type_)
+ switch ((*iter).event.type_)
{
case ACE_ES_CONJUNCTION_DESIGNATOR:
cgroup_index++;
@@ -1506,10 +1633,10 @@ ACE_ES_Consumer_Correlation::connected (ACE_Push_Consumer_Proxy *consumer,
switch (group_type)
{
case ACE_ES_CONJUNCTION_DESIGNATOR:
- conjunction_groups_[cgroup_index].set_act ((*iter).event_);
+ conjunction_groups_[cgroup_index].set_act ((*iter).event);
break;
case ACE_ES_DISJUNCTION_DESIGNATOR:
- disjunction_groups_[cgroup_index].set_act ((*iter).event_);
+ disjunction_groups_[cgroup_index].set_act ((*iter).event);
break;
case ACE_ES_GLOBAL_DESIGNATOR:
default:
@@ -1622,11 +1749,11 @@ ACE_ES_Consumer_Correlation::get_consumer_rep (RtecEventChannelAdmin::Dependency
// Step through all existing consumer reps.
for (int x=0; x < crep_index; x++)
{
- RtecEventComm::Event& e = consumer_reps_[x]->dependency ()->event_;
+ RtecEventComm::Event& e = consumer_reps_[x]->dependency ()->event;
// If <dependency> matches any previously subscribed consumer
// reps, we'll reuse it.
- if (e.type_ == dependency.event_.type_
- && e.source_ == dependency.event_.source_ )
+ if (e.type_ == dependency.event.type_
+ && e.source_ == dependency.event.source_ )
{
rep = consumer_reps_[x];
break;
@@ -1908,9 +2035,10 @@ ACE_ES_Subscription_Module::connected (ACE_Push_Supplier_Proxy *supplier,
// For every type that this supplier generates, bind a new
// Type_Subscribers to the type in the supplier proxy's type
// collection.
- RtecEventChannelAdmin::PublicationSet &publications = supplier->qos ().publications_;
+ RtecEventChannelAdmin::PublicationSet &publications =
+ supplier->qos ().publications;
- sid = publications[0].event_.source_;
+ sid = publications[0].event.source_;
for (CORBA::ULong index=0; index < publications.length (); index++)
{
// Check to make sure an RT_Info was specified.
@@ -1923,10 +2051,11 @@ ACE_ES_Subscription_Module::connected (ACE_Push_Supplier_Proxy *supplier,
}
#endif
- RtecEventComm::EventType &event_type =
- publications[index].event_.type_;
+ RtecEventComm::EventType event_type =
+ publications[index].event.type_;
- // Check to make sure a type was specified.
+ // @@ TODO we should throw something Check to make sure a type
+ // was specified.
if (event_type == ACE_ES_EVENT_ANY)
{
ACE_ERROR ((LM_ERROR, "ACE_ES_Subscription_Module::connected: "
@@ -1939,7 +2068,7 @@ ACE_ES_Subscription_Module::connected (ACE_Push_Supplier_Proxy *supplier,
// This object will hold all the consumers that subscribe to
// this publication.
ACE_ES_Subscription_Info::Type_Subscribers *new_subscribers =
- new ACE_ES_Subscription_Info::Type_Subscribers (&(publications[index].dependency_info_));
+ new ACE_ES_Subscription_Info::Type_Subscribers (&(publications[index].dependency_info));
if (new_subscribers == 0)
{
@@ -1950,7 +2079,7 @@ ACE_ES_Subscription_Module::connected (ACE_Push_Supplier_Proxy *supplier,
// Check the global type collection for consumers that register
// before suppliers.
ACE_ES_Subscription_Info::Type_Subscribers *existing_subscribers;
- if (type_subscribers_.find (event_type, existing_subscribers) == 0)
+ if (type_subscribers_.find (event_type, existing_subscribers) != -1)
{
// Iterate through existing subscribers.
ACE_ES_Subscription_Info::Subscriber_Set_Iterator iter (existing_subscribers->consumers_);
@@ -1982,6 +2111,12 @@ ACE_ES_Subscription_Module::connected (ACE_Push_Supplier_Proxy *supplier,
}
}
}
+#if 0
+ else
+ {
+ //ACE_DEBUG ((LM_DEBUG, "No consumers for type %d\n", event_type));
+ }
+#endif
// Put the new subscribers for this event type in the supplier
// proxy's type map.
@@ -2350,12 +2485,19 @@ int
ACE_ES_Subscription_Module::subscribe_type (ACE_ES_Consumer_Rep *consumer,
RtecEventComm::EventType type)
{
+ // ACE_DEBUG ((LM_DEBUG,
+ // "Subscription_Module::subscribe_type - %d\n", type));
+
// First insert <consumer> into the global type collection set
// corresponding to <type>. The type collection will only be used
// when suppliers register late.
if (ACE_ES_Subscription_Info::insert_or_allocate (type_subscribers_,
consumer, type) == -1)
- return -1;
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Subscription_Module - insert_or_allocate failed\n"),
+ -1);
+ }
consumer->_duplicate ();
@@ -2502,7 +2644,7 @@ ACE_ES_Subscription_Module::subscribe (ACE_ES_Consumer_Rep *consumer)
"ACE_ES_Subscription_Module::subscribe"), -1);
int result = 0;
- RtecEventComm::Event &event = consumer->dependency ()->event_;
+ RtecEventComm::Event &event = consumer->dependency ()->event;
if (event.source_ == 0)
// Not source-based subscription.
@@ -2536,7 +2678,7 @@ ACE_ES_Subscription_Module::unsubscribe (ACE_ES_Consumer_Rep *consumer)
ACE_ERROR_RETURN ((LM_ERROR, "%p.\n",
"ACE_ES_Subscription_Module::unsubscribe"), -1);
- RtecEventComm::Event &event = consumer->dependency ()->event_;
+ RtecEventComm::Event &event = consumer->dependency ()->event;
if (event.type_ != ACE_ES_EVENT_ANY)
{
@@ -3036,6 +3178,10 @@ template class ACE_ES_Simple_Array<ACE_ES_Consumer_Rep *, 100>;
template class ACE_CORBA_var<ACE_ES_Event_Container>;
+template class ACE_Node<ACE_EC_Gateway*>;
+template class ACE_Unbounded_Set<ACE_EC_Gateway*>;
+template class ACE_Unbounded_Set_Iterator<ACE_EC_Gateway*>;
+
#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Atomic_Op<ACE_ES_MUTEX, int>
@@ -3070,4 +3216,8 @@ template class ACE_CORBA_var<ACE_ES_Event_Container>;
#pragma instantiate ACE_ES_Simple_Array<ACE_ES_Consumer_Rep *, 100>
#pragma instantiate ACE_CORBA_var<ACE_ES_Event_Container>
+#pragma instantiate ACE_Node<ACE_EC_Gateway*>
+#pragma instantiate ACE_Unbounded_Set<ACE_EC_Gateway*>
+#pragma instantiate ACE_Unbounded_Set_Iterator<ACE_EC_Gateway*>
+
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.h b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.h
index ddae8883473..2ea233f6912 100644
--- a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.h
+++ b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.h
@@ -160,8 +160,11 @@ class ACE_ES_Supplier_Module;
class ACE_ES_Dispatching_Base;
typedef ACE_ES_Dispatching_Base ACE_ES_Dispatching_Module;
+class TAO_EC_Gateway;
+// Forward declare the class used to connect several EC together.
+
// ec..
-class TAO_ORBSVCS_Export ACE_EventChannel : public RtecEventChannelAdmin_EventChannelBOAImpl
+class TAO_ORBSVCS_Export ACE_EventChannel : public POA_RtecEventChannelAdmin::EventChannel
// = TITLE
// ACE Event Channel.
//
@@ -228,6 +231,15 @@ public:
void report_disconnect_i (u_long);
// Consumer or supplier disconnected.
+ void add_gateway (TAO_EC_Gateway* gw);
+ void del_gateway (TAO_EC_Gateway* gw);
+ // Add and remove gateways from the EC.
+
+ void update_consumer_gwys (CORBA::Environment& _env);
+ void update_supplier_gwys (CORBA::Environment& _env);
+ // The consumer (or supplier) list has changed, thus the EC has to
+ // inform any gateways it has.
+ // TODO: currently we only support consumer gateways.
private:
ACE_RTU_Manager *rtu_manager_;
@@ -244,6 +256,12 @@ private:
int destroyed_;
// Ensures this->destory is executed only once.
+
+ typedef ACE_Unbounded_Set<TAO_EC_Gateway*> Gateway_Set;
+ typedef ACE_Unbounded_Set_Iterator<TAO_EC_Gateway*> Gateway_Set_Iterator;
+
+ Gateway_Set gwys_;
+ // Keep the set of Gateways, i.e. connections to peer EC.
};
// ************************************************************
@@ -690,7 +708,7 @@ public:
class ACE_ES_Dispatch_Request;
class ACE_Push_Consumer_Proxy;
-class TAO_ORBSVCS_Export ACE_ES_Consumer_Correlation : public RtecEventComm_PushSupplierBOAImpl
+class TAO_ORBSVCS_Export ACE_ES_Consumer_Correlation : public POA_RtecEventComm::PushSupplier
// = TITLE
// Event Service Consumer_Correlation
//
@@ -821,7 +839,7 @@ public:
// Forward declarations.
class ACE_ES_Dispatch_Request;
-class TAO_ORBSVCS_Export ACE_ES_Consumer_Module : public RtecEventChannelAdmin_ConsumerAdminBOAImpl
+class TAO_ORBSVCS_Export ACE_ES_Consumer_Module : public POA_RtecEventChannelAdmin::ConsumerAdmin
// = TITLE
// Event Service Consumer Module
//
@@ -860,6 +878,12 @@ public:
void shutdown (void);
// Actively disconnect from all consumers.
+ void fill_qos (RtecEventChannelAdmin::ConsumerQOS& c_qos,
+ RtecEventChannelAdmin::SupplierQOS& s_qos);
+ // Fill the QoS factories with the disjuction off all the
+ // subscriptions in this EC.
+ // It leaves the gateways out of the list.
+
private:
typedef ACE_Unbounded_Set_Iterator<ACE_Push_Consumer_Proxy *> Consumer_Iterator;
typedef ACE_Unbounded_Set<ACE_Push_Consumer_Proxy *> Consumers;
@@ -1086,7 +1110,7 @@ private:
// ************************************************************
-class TAO_ORBSVCS_Export ACE_ES_Supplier_Module : public RtecEventChannelAdmin_SupplierAdminBOAImpl
+class TAO_ORBSVCS_Export ACE_ES_Supplier_Module : public POA_RtecEventChannelAdmin::SupplierAdmin
// = TITLE
// Event Service Supplier Proxy Module
//
@@ -1147,7 +1171,7 @@ class ACE_EventChannel;
// = Event Channel interfaces.
-class TAO_ORBSVCS_Export ACE_Push_Supplier_Proxy : public RtecEventChannelAdmin_ProxyPushConsumerBOAImpl
+class TAO_ORBSVCS_Export ACE_Push_Supplier_Proxy : public POA_RtecEventChannelAdmin::ProxyPushConsumer
// = TITLE
// Push Supplier Proxy.
//
@@ -1220,7 +1244,7 @@ private:
// ************************************************************
-class TAO_ORBSVCS_Export ACE_Push_Consumer_Proxy : public RtecEventChannelAdmin_ProxyPushSupplierBOAImpl
+class TAO_ORBSVCS_Export ACE_Push_Consumer_Proxy : public POA_RtecEventChannelAdmin::ProxyPushSupplier
// = TITLE
// Push Consumer Proxy.
//
diff --git a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.i b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.i
index 515468b5dd4..b61fac30645 100644
--- a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.i
+++ b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.i
@@ -447,7 +447,7 @@ ACE_INLINE void
ACE_ES_Consumer_Rep_Timeout::init (ACE_ES_Consumer_Correlation *correlation,
RtecEventChannelAdmin::Dependency &dep)
{
- ACE_ES_Event_Container *temp = new ACE_ES_Event_Container (dep.event_);
+ ACE_ES_Event_Container *temp = new ACE_ES_Event_Container (dep.event);
if (temp == 0)
{
ACE_ERROR ((LM_ERROR, "%p.\n", "ACE_ES_Consumer_Rep_Timeout::init"));
@@ -544,7 +544,7 @@ ACE_ES_Dependency_Iterator::parse (void)
if (rt_info_ == 0)
rt_info_ = rep_[x].rt_info;
- switch (rep_[x].event_.type_)
+ switch (rep_[x].event.type_)
{
case ACE_ES_CONJUNCTION_DESIGNATOR:
n_conjunctions_++;
diff --git a/TAO/orbsvcs/orbsvcs/Event/Local_ESTypes.h b/TAO/orbsvcs/orbsvcs/Event/Local_ESTypes.h
index bf34edee6cc..cc37eb01d12 100644
--- a/TAO/orbsvcs/orbsvcs/Event/Local_ESTypes.h
+++ b/TAO/orbsvcs/orbsvcs/Event/Local_ESTypes.h
@@ -40,20 +40,7 @@
// These are to help MSVC++ 4.2 deal with inheritence of nested types.
// Not needed for Sun C++ or MSVC++ 5.0.
-// @@ NOTE: TAO uses the POA mapping instead of the old BOA, but all the
-// code still uses the BOA name for the skeleton classes, to speed up
-// porting we keep to old names.
-
typedef RtecEventComm::Event RtecEventComm_Event;
-typedef POA_RtecScheduler::Scheduler RtecScheduler_SchedulerBOAImpl;
-typedef POA_RtecEventChannelAdmin::EventChannel RtecEventChannelAdmin_EventChannelBOAImpl;
-typedef POA_RtecEventComm::PushSupplier RtecEventComm_PushSupplierBOAImpl;
-typedef POA_RtecEventChannelAdmin::ConsumerAdmin RtecEventChannelAdmin_ConsumerAdminBOAImpl;
-typedef POA_RtecEventChannelAdmin::SupplierAdmin RtecEventChannelAdmin_SupplierAdminBOAImpl;
-typedef POA_RtecEventChannelAdmin::ProxyPushConsumer RtecEventChannelAdmin_ProxyPushConsumerBOAImpl;
-typedef POA_RtecEventChannelAdmin::ProxyPushSupplier RtecEventChannelAdmin_ProxyPushSupplierBOAImpl;
-typedef POA_RtecEventComm::PushConsumer RtecEventComm_PushConsumerBOAImpl;
-typedef POA_RtecEventComm::PushSupplier RtecEventComm_PushSupplierBOAImpl;
#if defined (__ACE_INLINE__)
#include "Local_ESTypes.i"
diff --git a/TAO/orbsvcs/orbsvcs/Event/RT_Task.cpp b/TAO/orbsvcs/orbsvcs/Event/RT_Task.cpp
index 836ae2d70e6..ed03bd5bc73 100644
--- a/TAO/orbsvcs/orbsvcs/Event/RT_Task.cpp
+++ b/TAO/orbsvcs/orbsvcs/Event/RT_Task.cpp
@@ -84,10 +84,21 @@ ACE_RT_Task::~ACE_RT_Task (void)
int
ACE_RT_Task::svc (void)
{
- // @@ TODO It may be necessary to call ORB init here...
-
TAO_TRY
{
+ // @@ TODO It may be necessary to pass the options to this class
+
+#if 0
+ static char* const argv[] = {
+ "task",
+ "-ORBport", "0",
+ };
+ int argc = sizeof (argv)/sizeof (argv[0]);
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "", TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+#endif
+
RtecScheduler::OS_Priority thread_priority;
RtecScheduler::Preemption_Subpriority subpriority;
RtecScheduler::Preemption_Priority preemption_priority;
@@ -100,35 +111,36 @@ ACE_RT_Task::svc (void)
TAO_CHECK_ENV;
if (ACE_OS::thr_setprio (thread_priority) == -1)
{
- ACE_ERROR ((LM_ERROR, "(%P|%t) main thr_setprio failed\n"));
+ ACE_ERROR ((LM_ERROR, "(%P|%t) RT_Task thr_setprio failed\n"));
}
- }
- TAO_CATCHANY
- {
- ACE_ERROR_RETURN ((LM_ERROR, "priority failed\n"), -1);
- }
- TAO_ENDTRY;
- int done = 0;
+ int done = 0;
+
+ ACE_hthread_t self;
+ ACE_OS::thr_self (self);
- ACE_hthread_t self;
- ACE_OS::thr_self (self);
+ int priority;
+ if (ACE_OS::thr_getprio (self, priority) == 0)
+ ACE_DEBUG ((LM_DEBUG, "(%t) new thread priority = %d.\n", priority));
- int priority;
- if (ACE_OS::thr_getprio (self, priority) == 0)
- ACE_DEBUG ((LM_DEBUG, "(%t) new thread priority = %d.\n", priority));
+ // Initialize channel thread-specific data.
+ ACE_ES_Memory_Pools::thr_init ();
- // Initialize channel thread-specific data.
- ACE_ES_Memory_Pools::thr_init ();
+ done = this->svc_hook (priority);
- done = this->svc_hook (priority);
+ while (!done)
+ {
+ done = this->svc_one ();
+ }
- while (!done)
+ ACE_DEBUG ((LM_DEBUG, "(%t) thread exiting.\n"));
+ }
+ TAO_CATCHANY
{
- done = this->svc_one ();
+ ACE_ERROR_RETURN ((LM_ERROR, "priority failed\n"), -1);
}
+ TAO_ENDTRY;
- ACE_DEBUG ((LM_DEBUG, "(%t) thread exiting.\n"));
return 0;
}
diff --git a/TAO/orbsvcs/orbsvcs/Event_Utilities.cpp b/TAO/orbsvcs/orbsvcs/Event_Utilities.cpp
index 256f4d65b73..8123251d80e 100644
--- a/TAO/orbsvcs/orbsvcs/Event_Utilities.cpp
+++ b/TAO/orbsvcs/orbsvcs/Event_Utilities.cpp
@@ -7,10 +7,10 @@
#include "orbsvcs/Event_Utilities.i"
#endif /* __ACE_INLINE__ */
-ACE_ConsumerQOS_Factory::ACE_ConsumerQOS_Factory (void) :
- qos_ (),
- designator_set_ (0)
+ACE_ConsumerQOS_Factory::ACE_ConsumerQOS_Factory (void)
+ : designator_set_ (0)
{
+ qos_.is_gateway = CORBA::B_FALSE;
}
ACE_ConsumerQOS_Factory::~ACE_ConsumerQOS_Factory (void)
@@ -22,8 +22,8 @@ ACE_ConsumerQOS_Factory::start_conjunction_group (void)
{
int l = qos_.dependencies.length ();
qos_.dependencies.length (l + 1);
- qos_.dependencies[l].event_.type_ = ACE_ES_CONJUNCTION_DESIGNATOR;
- // TODO: qos_.dependencies[l].event_.data_.lval (0);
+ qos_.dependencies[l].event.type_ = ACE_ES_CONJUNCTION_DESIGNATOR;
+ // TODO: qos_.dependencies[l].event.data_.lval (0);
designator_set_ = 1;
return 0;
}
@@ -33,8 +33,8 @@ ACE_ConsumerQOS_Factory::start_disjunction_group (void)
{
int l = qos_.dependencies.length ();
qos_.dependencies.length (l + 1);
- qos_.dependencies[l].event_.type_ = ACE_ES_DISJUNCTION_DESIGNATOR;
- // TODO: qos_.dependencies[l].event_.data_.lval (0);
+ qos_.dependencies[l].event.type_ = ACE_ES_DISJUNCTION_DESIGNATOR;
+ // TODO: qos_.dependencies[l].event.data_.lval (0);
designator_set_ = 1;
return 0;
}
@@ -48,15 +48,15 @@ ACE_ConsumerQOS_Factory::insert (const RtecEventChannelAdmin::Dependency &subscr
{
int l = qos_.dependencies.length ();
qos_.dependencies.length (l + 1);
- qos_.dependencies[l].event_.type_ = ACE_ES_GLOBAL_DESIGNATOR;
- // TODO: IDL union qos_.dependencies[l].event_.data_.lval (0);
+ qos_.dependencies[l].event.type_ = ACE_ES_GLOBAL_DESIGNATOR;
+ // TODO: IDL union qos_.dependencies[l].event.data_.lval (0);
designator_set_ = 1;
}
int l = qos_.dependencies.length ();
qos_.dependencies.length (l + 1);
qos_.dependencies[l] = subscribe;
- // TODO: IDL union qos_.dependencies[l].event_.data_.lval (0);
+ // TODO: IDL union qos_.dependencies[l].event.data_.lval (0);
return 0;
}
@@ -66,11 +66,9 @@ void event_debug (const char* p,
int l = ACE_OS::strlen (p);
ACE_DEBUG ((LM_DEBUG,
"%*.*s - event.source: %d\n"
- "%*.*s event.type: %d\n"
- "%*.*s event.time: %f\n",
+ "%*.*s event.type: %d\n",
l, l, p, event.source_,
- l, l, p, event.type_,
- l, l, p, event.creation_time_));
+ l, l, p, event.type_));
}
void
@@ -82,7 +80,7 @@ ACE_ConsumerQOS_Factory::debug (const RtecEventChannelAdmin::ConsumerQOS& qos)
{
char buf[128];
ACE_OS::sprintf (buf, " dep[%d]", i);
- event_debug (buf, qos.dependencies[i].event_);
+ event_debug (buf, qos.dependencies[i].event);
ACE_DEBUG ((LM_DEBUG, "%s rt_info: %d\n",
buf, qos.dependencies[i].rt_info));
}
@@ -91,9 +89,9 @@ ACE_ConsumerQOS_Factory::debug (const RtecEventChannelAdmin::ConsumerQOS& qos)
// ************************************************************
-ACE_SupplierQOS_Factory::ACE_SupplierQOS_Factory (void) :
- qos_ ()
+ACE_SupplierQOS_Factory::ACE_SupplierQOS_Factory (void)
{
+ qos_.is_gateway = CORBA::B_FALSE;
}
int
@@ -102,29 +100,29 @@ ACE_SupplierQOS_Factory::insert (RtecEventComm::EventSourceID sid,
RtecScheduler::handle_t rt_info,
u_int ncalls)
{
- int l = qos_.publications_.length ();
- qos_.publications_.length (l + 1);
- qos_.publications_[l].event_.source_ = sid;
- qos_.publications_[l].event_.type_ = type;
- // TODO: IDL union qos_.publications_[l].event_.data_.lval (0);
- qos_.publications_[l].dependency_info_.rt_info = rt_info;
- qos_.publications_[l].dependency_info_.number_of_calls = ncalls;
+ int l = qos_.publications.length ();
+ qos_.publications.length (l + 1);
+ qos_.publications[l].event.source_ = sid;
+ qos_.publications[l].event.type_ = type;
+ // TODO: IDL union qos_.publications[l].event.data_.lval (0);
+ qos_.publications[l].dependency_info.rt_info = rt_info;
+ qos_.publications[l].dependency_info.number_of_calls = ncalls;
return 0;
}
void ACE_SupplierQOS_Factory::debug (const RtecEventChannelAdmin::SupplierQOS& qos)
{
- ACE_DEBUG ((LM_DEBUG, "ConsumerQOS { \n"));
- for (u_int i = 0; i < qos.publications_.length (); ++i)
+ ACE_DEBUG ((LM_DEBUG, "SupplierQOS { \n"));
+ for (u_int i = 0; i < qos.publications.length (); ++i)
{
char buf[128];
ACE_OS::sprintf (buf, " publications[%d]", i);
- event_debug (buf, qos.publications_[i].event_);
+ event_debug (buf, qos.publications[i].event);
ACE_DEBUG ((LM_DEBUG,
"%s dependency_info.rt_info: %d\n"
"%s dependency_info.number_of_calls: %d\n",
- buf, qos.publications_[i].dependency_info_.rt_info,
- buf, qos.publications_[i].dependency_info_.number_of_calls));
+ buf, qos.publications[i].dependency_info.rt_info,
+ buf, qos.publications[i].dependency_info.number_of_calls));
}
ACE_DEBUG ((LM_DEBUG, "}\n"));
diff --git a/TAO/orbsvcs/orbsvcs/Event_Utilities.i b/TAO/orbsvcs/orbsvcs/Event_Utilities.i
index e8efc7dd4df..58423e9af27 100644
--- a/TAO/orbsvcs/orbsvcs/Event_Utilities.i
+++ b/TAO/orbsvcs/orbsvcs/Event_Utilities.i
@@ -8,11 +8,11 @@ ACE_ConsumerQOS_Factory::insert (RtecEventComm::EventSourceID source,
RtecScheduler::handle_t rt_info)
{
RtecEventChannelAdmin::Dependency dependency;
- dependency.event_.source_ = source;
- dependency.event_.type_ = type;
- //dependency.event_.creation_time_ = 0;
- //dependency.event_.ec_recv_time_ = 0;
- //dependency.event_.ec_send_time_ = 0;
+ dependency.event.source_ = source;
+ dependency.event.type_ = type;
+ //dependency.event.creation_time_ = 0;
+ //dependency.event.ec_recv_time_ = 0;
+ //dependency.event.ec_send_time_ = 0;
dependency.rt_info = rt_info;
return this->insert (dependency);
}
@@ -22,11 +22,11 @@ ACE_ConsumerQOS_Factory::insert_type (RtecEventComm::EventType type,
RtecScheduler::handle_t rt_info)
{
RtecEventChannelAdmin::Dependency dependency;
- dependency.event_.source_ = 0;
- dependency.event_.type_ = type;
- //dependency.event_.creation_time_ = 0;
- //dependency.event_.ec_recv_time_ = 0;
- //dependency.event_.ec_send_time_ = 0;
+ dependency.event.source_ = 0;
+ dependency.event.type_ = type;
+ //dependency.event.creation_time_ = 0;
+ //dependency.event.ec_recv_time_ = 0;
+ //dependency.event.ec_send_time_ = 0;
dependency.rt_info = rt_info;
return this->insert (dependency);
}
@@ -36,11 +36,11 @@ ACE_ConsumerQOS_Factory::insert_source (RtecEventComm::EventSourceID source,
RtecScheduler::handle_t rt_info)
{
RtecEventChannelAdmin::Dependency dependency;
- dependency.event_.source_ = source;
- dependency.event_.type_ = ACE_ES_EVENT_ANY;
- //dependency.event_.creation_time_ = 0;
- //dependency.event_.ec_recv_time_ = 0;
- //dependency.event_.ec_send_time_ = 0;
+ dependency.event.source_ = source;
+ dependency.event.type_ = ACE_ES_EVENT_ANY;
+ //dependency.event.creation_time_ = 0;
+ //dependency.event.ec_recv_time_ = 0;
+ //dependency.event.ec_send_time_ = 0;
dependency.rt_info = rt_info;
return this->insert (dependency);
}
@@ -51,11 +51,11 @@ ACE_ConsumerQOS_Factory::insert_time (RtecEventComm::EventType type,
RtecScheduler::handle_t rt_info)
{
RtecEventChannelAdmin::Dependency dependency;
- dependency.event_.source_ = 0;
- dependency.event_.type_ = type;
- dependency.event_.creation_time_ = interval;
- //dependency.event_.ec_recv_time_ = 0;
- //dependency.event_.ec_send_time_ = 0;
+ dependency.event.source_ = 0;
+ dependency.event.type_ = type;
+ dependency.event.creation_time_ = interval;
+ //dependency.event.ec_recv_time_ = 0;
+ //dependency.event.ec_send_time_ = 0;
dependency.rt_info = rt_info;
return this->insert (dependency);
}
@@ -64,12 +64,12 @@ ACE_INLINE int
ACE_ConsumerQOS_Factory::insert_act (RtecEventComm::EventData act)
{
RtecEventChannelAdmin::Dependency dependency;
- dependency.event_.source_ = 0;
- dependency.event_.type_ = ACE_ES_EVENT_ACT;
- //dependency.event_.creation_time_ = 0;
- //dependency.event_.ec_recv_time_ = 0;
- //dependency.event_.ec_send_time_ = 0;
- dependency.event_.data_ = act;
+ dependency.event.source_ = 0;
+ dependency.event.type_ = ACE_ES_EVENT_ACT;
+ //dependency.event.creation_time_ = 0;
+ //dependency.event.ec_recv_time_ = 0;
+ //dependency.event.ec_send_time_ = 0;
+ dependency.event.data_ = act;
return this->insert (dependency);
}
@@ -98,4 +98,3 @@ ACE_SupplierQOS_Factory::operator const RtecEventChannelAdmin::SupplierQOS& (voi
{
return qos_;
}
-
diff --git a/TAO/orbsvcs/orbsvcs/RtecEventChannelAdmin.idl b/TAO/orbsvcs/orbsvcs/RtecEventChannelAdmin.idl
index 9ba626ba73e..3bd63cb441a 100644
--- a/TAO/orbsvcs/orbsvcs/RtecEventChannelAdmin.idl
+++ b/TAO/orbsvcs/orbsvcs/RtecEventChannelAdmin.idl
@@ -10,23 +10,25 @@ module RtecEventChannelAdmin {
exception TypeError {};
struct Dependency {
- RtecEventComm::Event event_;
+ RtecEventComm::Event event;
RtecScheduler::handle_t rt_info;
};
typedef sequence<Dependency> DependencySet;
struct ConsumerQOS {
DependencySet dependencies;
+ boolean is_gateway;
};
struct Publication {
- RtecEventComm::Event event_;
- RtecScheduler::Dependency_Info dependency_info_;
+ RtecEventComm::Event event;
+ RtecScheduler::Dependency_Info dependency_info;
};
typedef sequence<Publication> PublicationSet;
struct SupplierQOS {
- PublicationSet publications_;
+ PublicationSet publications;
+ boolean is_gateway;
};
interface ProxyPushConsumer: RtecEventComm::PushConsumer {
diff --git a/TAO/orbsvcs/orbsvcs/Runtime_Scheduler.cpp b/TAO/orbsvcs/orbsvcs/Runtime_Scheduler.cpp
index 79ce19df74c..89a173f63c2 100644
--- a/TAO/orbsvcs/orbsvcs/Runtime_Scheduler.cpp
+++ b/TAO/orbsvcs/orbsvcs/Runtime_Scheduler.cpp
@@ -76,7 +76,7 @@ ACE_Runtime_Scheduler::get (RtecScheduler::handle_t handle,
info->priority = rt_info_[handle].priority;
info->preemption_subpriority = rt_info_[handle].static_subpriority;
info->preemption_priority = rt_info_[handle].preemption_priority;
- info->info_type = rt_info_[handle].info_type;
+ info->info_type = RtecScheduler::Info_Type(rt_info_[handle].info_type);
return info;
}
diff --git a/TAO/orbsvcs/orbsvcs/Scheduler_Factory.h b/TAO/orbsvcs/orbsvcs/Scheduler_Factory.h
index 8f27ca50e5a..71e4c20d944 100644
--- a/TAO/orbsvcs/orbsvcs/Scheduler_Factory.h
+++ b/TAO/orbsvcs/orbsvcs/Scheduler_Factory.h
@@ -42,7 +42,7 @@ public:
RtecScheduler::OS_Priority priority;
RtecScheduler::Preemption_Subpriority static_subpriority;
RtecScheduler::Preemption_Priority preemption_priority;
- RtecScheduler::Info_Type info_type;
+ CORBA::Long info_type;
};
static int use_config (CosNaming::NamingContext_ptr naming);
diff --git a/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp b/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp
index 2d4977c4f0e..ec33c81604f 100644
--- a/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp
+++ b/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp
@@ -433,6 +433,8 @@ Test_ECG::run (int argc, char* argv[])
tv.set (5, 0);
if (orb->run (&tv) == -1)
ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "orb->run"), -1);
+
+ ec_impl.add_gateway (&this->ecg_);
}
this->connect_consumers (local_ec.in (), TAO_TRY_ENV);
@@ -726,8 +728,6 @@ Test_ECG::connect_ecg (RtecEventChannelAdmin::EventChannel_ptr local_ec,
ACE_OS::strcpy (ecg_name, "ecg_");
ACE_OS::strcat (ecg_name, this->lcl_name_);
- // Generate its ConsumerQOS
-
// We could use the same name on the local and remote scheduler,
// but that fails when using a global scheduler.
char rmt[BUFSIZ];
@@ -735,38 +735,6 @@ Test_ECG::connect_ecg (RtecEventChannelAdmin::EventChannel_ptr local_ec,
ACE_OS::strcat (rmt, "@");
ACE_OS::strcat (rmt, this->rmt_name_);
- RtecScheduler::handle_t rmt_info =
- remote_sch->create (rmt, TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- // The worst case execution time is far less than 500 usecs, but
- // that is a safe estimate....
- ACE_Time_Value tv (0, 500);
- TimeBase::TimeT time;
- ORBSVCS_Time::Time_Value_to_TimeT (time, tv);
- remote_sch->set (rmt_info,
- RtecScheduler::VERY_HIGH_CRITICALITY,
- time, time, time,
- 25000 * 10,
- RtecScheduler::VERY_LOW_IMPORTANCE,
- time,
- 0,
- RtecScheduler::OPERATION,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- ACE_ConsumerQOS_Factory consumer_qos;
- consumer_qos.start_disjunction_group ();
- consumer_qos.insert_type (this->hpc_event_a_, rmt_info);
- consumer_qos.insert_type (this->hpc_event_b_, rmt_info);
- if (this->lp_consumers_ > 0)
- {
- consumer_qos.insert_type (this->lpc_event_a_, rmt_info);
- consumer_qos.insert_type (this->lpc_event_b_, rmt_info);
- }
-
- // Generate its SupplierQOS
-
// We could use the same name on the local and remote scheduler,
// but that fails when using a global scheduler.
char lcl[bufsize];
@@ -774,45 +742,8 @@ Test_ECG::connect_ecg (RtecEventChannelAdmin::EventChannel_ptr local_ec,
ACE_OS::strcat (lcl, "@");
ACE_OS::strcat (lcl, this->lcl_name_);
- RtecScheduler::handle_t lcl_info =
- local_sch->create (lcl, TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- local_sch->set (lcl_info,
- RtecScheduler::VERY_HIGH_CRITICALITY,
- time, time, time,
- 25000 * 10,
- RtecScheduler::VERY_LOW_IMPORTANCE,
- time,
- 1,
- RtecScheduler::OPERATION,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- CORBA::ULong supplier_id = ACE::crc32 (lcl);
- ACE_DEBUG ((LM_DEBUG, "ID for <%s> is %04.4x\n", lcl, supplier_id));
-
- ACE_SupplierQOS_Factory supplier_qos;
- supplier_qos.insert (supplier_id,
- this->hpc_event_a_,
- lcl_info, 1);
- supplier_qos.insert (supplier_id,
- this->hpc_event_b_,
- lcl_info, 1);
- if (this->lp_consumers_ > 0)
- {
- supplier_qos.insert (supplier_id,
- this->lpc_event_a_,
- lcl_info, 1);
- supplier_qos.insert (supplier_id,
- this->lpc_event_b_,
- lcl_info, 1);
- }
-
- this->ecg_.open (remote_ec, local_ec,
- consumer_qos.get_ConsumerQOS (),
- supplier_qos.get_SupplierQOS (),
- TAO_TRY_ENV);
+ this->ecg_.init (remote_ec, local_ec, remote_sch, local_sch,
+ rmt, lcl, TAO_TRY_ENV);
TAO_CHECK_ENV;
}
TAO_CATCHANY
diff --git a/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.h b/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.h
index 809f0e7e954..86939873f4a 100644
--- a/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.h
+++ b/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.h
@@ -244,7 +244,7 @@ private:
char* rmt_name_;
// The name of the "remote" EC.
- TAO_EC_Gateway ecg_;
+ TAO_EC_Gateway_IIOP ecg_;
// The proxy used to connect both event channels.
enum {
diff --git a/TAO/orbsvcs/tests/EC_Multiple/svc.conf b/TAO/orbsvcs/tests/EC_Multiple/svc.conf
index 43c6a486c92..5b048c7e8cc 100644
--- a/TAO/orbsvcs/tests/EC_Multiple/svc.conf
+++ b/TAO/orbsvcs/tests/EC_Multiple/svc.conf
@@ -1,49 +1,7 @@
# $Id$
#
-# This file contains a sample ACE_Service_Config configuration
-# file specifying the strategy factories utilized by an application
-# using TAO. There are currently only two possible factories:
-# Client_Strategy_Factory and Server_Strategy_Factory. These names
-# must be used as the second argument to their corresponding line,
-# because that's what the ORB uses to find the desired factory.
+# The options are described in $TAO_ROOT/docs/Options.html
#
-# Note that there are two unordinary characteristics of the way *this*
-# file is set up:
-# - both client and server strategies are specified in the same
-# file, which would only make sense for co-located clients & servers
-# - both of the factories are actually sourced out of libTAO.so
-# (TAO.DLL on Win32), and they would normally be in a separate
-# dll from the TAO ORB Core.
-#
-# The options which can be passed to the Resource Factory are:
-#
-# -ORBresources <which>
-# where <which> can be 'global' to specify globally-held resources,
-# or 'tss' to specify thread-specific resources.
-#
-# The options which can be passed to the Client are:
-# <none currently>
-#
-# The options which can be passed to the Server are:
-#
-# -ORBconcurrency <which>
-# where <which> can be 'thread-per-connection' to specify
-# use of the ACE_Threaded_Strategy concurrency strategy,
-# or 'reactive' to specify use of the ACE_Reactive_Strategy
-# concurrency strategy.
-#
-# -ORBthreadflags <flags>
-# specifies the default thread flags to use, where <flags> is a
-# logical OR'ing of the flags THR_DETACHED, THR_BOUND, THR_NEW_LWP,
-# THR_SUSPENDED, or THR_DAEMON. Note that not every flag may be valid
-# on every platform.
-#
-# -ORBdemuxstrategy <which>
-# where <which> can be one of 'dynamic', 'linear', 'active', or 'user',
-# and specifies the type of object lookup strategy used internally.
-# -ORBtablesize <unsigned>
-# specifies the size of the object table
-#
-dynamic Resource_Factory Service_Object * TAO:_make_TAO_Resource_Factory() "-ORBresources global"
+dynamic Resource_Factory Service_Object * TAO:_make_TAO_Resource_Factory() "-ORBresources global -ORBpoa global -ORBcoltable orb"
dynamic Client_Strategy_Factory Service_Object * TAO:_make_TAO_Default_Client_Strategy_Factory()
dynamic Server_Strategy_Factory Service_Object * TAO:_make_TAO_Default_Server_Strategy_Factory() "-ORBconcurrency reactive -ORBdemuxstrategy dynamic -ORBtablesize 128"