diff options
author | edwardgt <edwardgt@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-08-13 01:26:22 +0000 |
---|---|---|
committer | edwardgt <edwardgt@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-08-13 01:26:22 +0000 |
commit | 5c809369fbf84607923cecbeb675439fd81ce903 (patch) | |
tree | 9989de6e8016193afc7a95109e14efd71a2d56f7 /TAO/CIAO/examples | |
parent | 45ee674cec2d62948483fd68758d2b184b6a63e8 (diff) | |
download | ATCD-5c809369fbf84607923cecbeb675439fd81ce903.tar.gz |
ChangeLogTag: Tue Aug 12 20:18:23 2003 George Edwards <g.edwards@vanderbilt.edu>
Diffstat (limited to 'TAO/CIAO/examples')
16 files changed, 994 insertions, 558 deletions
diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED.idl b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED.idl index 60cd4978f23..642204a93b2 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED.idl +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED.idl @@ -9,7 +9,7 @@ module BasicSP uses ReadData datain; publishes DataAvailable out_avail; consumes DataAvailable in_avail; - uses RTEventChannel event_channel; + uses RtecEventChannelAdmin::EventChannel event_channel; }; home BMClosedEDHome manages BMClosedED diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.cpp b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.cpp index b27c29fc434..c26624cc04f 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.cpp +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.cpp @@ -86,12 +86,19 @@ namespace CIAO_GLUE_BasicSP BMClosedED_Servant *sv) : home_ (::Components::CCMHome::_duplicate (home)), container_ (c), - servant_ (sv) + servant_ (sv), + // START new event code + ciao_proxy_out_avail_consumer_ (RtecEventChannelAdmin::ProxyPushConsumer::_nil ()) + // END new { } BMClosedED_Context::~BMClosedED_Context (void) { + // START new event code + this->ciao_uses_event_channel_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + // END new } // Operations from ::Components::CCMContext. @@ -250,17 +257,17 @@ namespace CIAO_GLUE_BasicSP ACE_THROW_SPEC ((CORBA::SystemException)) { - // NEW + // START new event code RtecEventComm::EventSet events (1); events.length (1); events[0].header.source = ACE_ES_EVENT_SOURCE_ANY + 3; events[0].header.type = ACE_ES_EVENT_UNDEFINED + 2; - ::Components::EventBase * ev_base = ev; + Components::EventBase * any_event = ev; ev->_add_ref (); - events[0].data.any_value <<= ev_base; - ciao_proxy_consumer_->push (events ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - // END NEW + events[0].data.any_value <<= any_event; + ciao_proxy_out_avail_consumer_->push (events ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + // END new /* ACE_Active_Map_Manager<::BasicSP::DataAvailableConsumer_var>::iterator end = @@ -295,35 +302,15 @@ namespace CIAO_GLUE_BasicSP ::Components::ExceededConnectionLimit)) { - // NEW - char * argv[1] = { "BMClosedED_exec" }; - int argc = sizeof (argv) / sizeof (argv[0]); - CORBA::ORB_var orb = CORBA::ORB_init (argc, argv ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + if (CORBA::is_nil (c)) + { + ACE_THROW_RETURN (CORBA::BAD_PARAM (), 0); + } - if (CORBA::is_nil (this->ciao_proxy_consumer_.in ())) - { - ::CORBA::Object_var me = - this->get_CCM_object (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; + if (CORBA::is_nil (this->ciao_proxy_out_avail_consumer_.in ())) + this->connect_event_supplier (); + return this->connect_event_consumer (c); - CORBA::String_var ior = orb->object_to_string - (me.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - this->ciao_uses_event_channel_->connect_supplier - ("DataAvailable", "out_avail", ior.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - } - - CORBA::String_var ior = orb->object_to_string (c ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - ciao_uses_event_channel_->connect_consumer - ("DataAvailable", "data_ready", ior.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - return 0; - // END NEW /* if (CORBA::is_nil (c)) @@ -344,6 +331,95 @@ namespace CIAO_GLUE_BasicSP */ } + void + BMClosedED_Context::connect_event_supplier () + { + + // ACE_DEBUG ((LM_DEBUG, "BMDevice_Context::connect_event_supplier\n")); + + // Get a reference to the ORB. + CORBA::ORB_var orb = this->container_->_ciao_the_ORB (); + + RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + this->ciao_uses_event_channel_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + this->ciao_proxy_out_avail_consumer_ = + supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Create and register supplier servant + MyImpl::RTEventServiceSupplier_impl * supplier_servant; + ACE_NEW (supplier_servant, + MyImpl::RTEventServiceSupplier_impl (orb.in ())); + RtecEventComm::PushSupplier_var push_supplier = + supplier_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Set QoS properties and connect + ACE_SupplierQOS_Factory qos; + qos.insert (ACE_ES_EVENT_SOURCE_ANY + 3, + ACE_ES_EVENT_UNDEFINED + 2, + 0, + 1); + + this->ciao_proxy_out_avail_consumer_->connect_push_supplier (push_supplier.in (), + qos.get_SupplierQOS () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + } + + ::Components::Cookie * + BMClosedED_Context::connect_event_consumer ( + ::BasicSP::DataAvailableConsumer_ptr c) + { + + // ACE_DEBUG ((LM_DEBUG, "EC_Context::connect_event_consumer\n")); + + // @@ Bala, am I reference counting parameter 'c' correctly? + + // Get a reference to the ORB. + CORBA::ORB_var orb = this->container_->_ciao_the_ORB (); + + ::BasicSP::DataAvailableConsumer_var dup = + ::BasicSP::DataAvailableConsumer::_duplicate (c); + + RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = + this->ciao_uses_event_channel_->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier = + consumer_admin->obtain_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Create and register consumer servant + MyImpl::RTEventServiceConsumer_impl * consumer_servant; + ACE_NEW_RETURN (consumer_servant, + MyImpl::RTEventServiceConsumer_impl (orb.in (), dup.in ()), + 0); + RtecEventComm::PushConsumer_var push_consumer = + consumer_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Set QoS properties and connect + ACE_ConsumerQOS_Factory qos; + qos.start_logical_and_group (2); + qos.insert_type (ACE_ES_EVENT_UNDEFINED + 2, + 0); + qos.insert_source (ACE_ES_EVENT_SOURCE_ANY + 3, + 0); + proxy_supplier->connect_push_consumer (push_consumer.in (), + qos.get_ConsumerQOS () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + dup._retn (); + + ::Components::Cookie * return_cookie; + ACE_NEW_RETURN (return_cookie, + ::CIAO::Object_Reference_Cookie (push_consumer.in ()), + 0); + return return_cookie; + } + ::BasicSP::DataAvailableConsumer_ptr BMClosedED_Context::unsubscribe_out_avail ( ::Components::Cookie *ck @@ -353,6 +429,30 @@ namespace CIAO_GLUE_BasicSP ::Components::InvalidConnection)) { + CORBA::Object_var obj = CORBA::Object::_nil (); + ::BasicSP::DataAvailableConsumer_var return_consumer; + + if (ck == 0 || ::CIAO::Object_Reference_Cookie::extract (ck, obj.out ()) == -1) + { + ACE_THROW_RETURN ( + ::Components::InvalidConnection (), + ::BasicSP::DataAvailableConsumer::_nil ()); + } + + RtecEventComm::PushConsumer_var push_consumer = + ::RtecEventComm::PushConsumer::_narrow (obj.in ()); + + if (CORBA::is_nil (push_consumer.in ())) + { + ACE_THROW_RETURN ( + ::Components::InvalidConnection (), + ::BasicSP::DataAvailableConsumer::_nil ()); + } + + push_consumer->disconnect_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // @@ Bala, what should I return here? return ::BasicSP::DataAvailableConsumer::_nil (); /* @@ -377,27 +477,18 @@ namespace CIAO_GLUE_BasicSP */ } - // NEW - void - BMClosedED_Context::connect_proxy_consumer ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer) - { - ciao_proxy_consumer_ = proxy_consumer; - } - // END NEW - - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMClosedED_Context::get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - return ::BasicSP::RTEventChannel::_duplicate ( + return ::RtecEventChannelAdmin::EventChannel::_duplicate ( this->ciao_uses_event_channel_.in ()); } void BMClosedED_Context::connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL) ACE_THROW_SPEC (( ::CORBA::SystemException, @@ -415,10 +506,10 @@ namespace CIAO_GLUE_BasicSP } this->ciao_uses_event_channel_ = - ::BasicSP::RTEventChannel::_duplicate (c); + ::RtecEventChannelAdmin::EventChannel::_duplicate (c); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMClosedED_Context::disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC (( @@ -429,7 +520,7 @@ namespace CIAO_GLUE_BasicSP { ACE_THROW_RETURN ( ::Components::NoConnection (), - ::BasicSP::RTEventChannel::_nil ()); + ::RtecEventChannelAdmin::EventChannel::_nil ()); } return this->ciao_uses_event_channel_._retn (); @@ -679,7 +770,7 @@ namespace CIAO_GLUE_BasicSP void BMClosedED_Servant::connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL) ACE_THROW_SPEC (( ::CORBA::SystemException, @@ -691,7 +782,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_PARAMETER); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMClosedED_Servant::disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC (( @@ -702,7 +793,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_SINGLE_ARG_PARAMETER); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMClosedED_Servant::get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) @@ -823,8 +914,8 @@ namespace CIAO_GLUE_BasicSP if (ACE_OS::strcmp (name, "event_channel") == 0) { - ::BasicSP::RTEventChannel_var _ciao_conn = - ::BasicSP::RTEventChannel::_narrow ( + ::RtecEventChannelAdmin::EventChannel_var _ciao_conn = + ::RtecEventChannelAdmin::EventChannel::_narrow ( connection ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (0); @@ -913,19 +1004,6 @@ namespace CIAO_GLUE_BasicSP // Operations for Events interface. - // NEW - void - BMClosedED_Servant::connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)) - { - this->context_->connect_proxy_consumer (proxy_consumer); - } - // END NEW - ::Components::EventConsumerBase_ptr BMClosedED_Servant::get_consumer ( const char *sink_name diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.h b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.h index 3e3daf15b4c..7c8f398b333 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.h +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMClosedED/BMClosedED_svnt.h @@ -28,12 +28,12 @@ #include "ciao/Container_Base.h" #include "tao/LocalObject.h" #include "tao/PortableServer/Key_Adapters.h" -#include "ace/Active_Map_Manager_T.h" +// #include "ace/Active_Map_Manager_T.h" -//NEW -#include "orbsvcs/RtecEventChannelAdminC.h" -#include "Event_Utilities.h" -// END NEW +// START new event code +#include "../RTEventService/RTEventService_exec.h" +#include "tao/ORB_Core.h" +// END new event code #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once @@ -152,7 +152,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -194,37 +194,40 @@ namespace CIAO_GLUE_BasicSP virtual void connect_event_channel ( - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::AlreadyConnected, ::Components::InvalidConnection)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::NoConnection)); - // NEW + // START new event code + ::Components::Cookie * + connect_event_consumer ( + ::BasicSP::DataAvailableConsumer_ptr c); + void - connect_proxy_consumer ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer); - // END NEW + connect_event_supplier (); + // END new protected: - // NEW - RtecEventChannelAdmin::ProxyPushConsumer_var - ciao_proxy_consumer_; - // END NEW - // Simplex datain connection. ::BasicSP::ReadData_var ciao_uses_datain_; + // START new event code + RtecEventChannelAdmin::ProxyPushConsumer_var + ciao_proxy_out_avail_consumer_; + // END new + /* ACE_Active_Map_Manager< ::BasicSP::DataAvailableConsumer_var> @@ -232,7 +235,7 @@ namespace CIAO_GLUE_BasicSP */ // Simplex event_channel connection. - ::BasicSP::RTEventChannel_var + ::RtecEventChannelAdmin::EventChannel_var ciao_uses_event_channel_; ::Components::CCMHome_var @@ -347,19 +350,19 @@ namespace CIAO_GLUE_BasicSP virtual void connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::AlreadyConnected, ::Components::InvalidConnection)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -442,16 +445,6 @@ namespace CIAO_GLUE_BasicSP // Operations for Events interface. - // NEW - virtual void - connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)); - // END NEW - virtual ::Components::EventConsumerBase_ptr get_consumer ( const char *sink_name diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice.idl b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice.idl index 3732aa091ad..071a89cc82a 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice.idl +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice.idl @@ -20,7 +20,7 @@ module BasicSP provides ReadData data_read; publishes DataAvailable data_available; consumes TimeOut timeout; - uses RTEventChannel event_channel; + uses RtecEventChannelAdmin::EventChannel event_channel; }; home BMDeviceHome manages BMDevice diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.cpp b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.cpp index be9d6180a01..38111d83a41 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.cpp +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.cpp @@ -86,12 +86,19 @@ namespace CIAO_GLUE_BasicSP BMDevice_Servant *sv) : home_ (::Components::CCMHome::_duplicate (home)), container_ (c), - servant_ (sv) + servant_ (sv), + // START new event code + ciao_proxy_data_available_consumer_ (RtecEventChannelAdmin::ProxyPushConsumer::_nil ()) + // END new { } BMDevice_Context::~BMDevice_Context (void) { + // START new event code + this->ciao_uses_event_channel_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + // END new } // Operations from ::Components::CCMContext. @@ -201,17 +208,17 @@ namespace CIAO_GLUE_BasicSP ACE_THROW_SPEC ((CORBA::SystemException)) { - // NEW + // START new event code RtecEventComm::EventSet events (1); events.length (1); events[0].header.source = ACE_ES_EVENT_SOURCE_ANY + 2; events[0].header.type = ACE_ES_EVENT_UNDEFINED + 2; - ::Components::EventBase * ev_base = ev; + Components::EventBase * any_event = ev; ev->_add_ref (); - events[0].data.any_value <<= ev_base; - ciao_proxy_consumer_->push (events ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - // END NEW + events[0].data.any_value <<= any_event; + ciao_proxy_data_available_consumer_->push (events ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + // END new /* ACE_Active_Map_Manager<::BasicSP::DataAvailableConsumer_var>::iterator end = @@ -246,35 +253,16 @@ namespace CIAO_GLUE_BasicSP ::Components::ExceededConnectionLimit)) { - // NEW - char * argv[1] = { "BMDevice_exec" }; - int argc = sizeof (argv) / sizeof (argv[0]); - CORBA::ORB_var orb = CORBA::ORB_init (argc, argv ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - if (CORBA::is_nil (this->ciao_proxy_consumer_.in ())) - { - ::CORBA::Object_var me = - this->get_CCM_object (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - CORBA::String_var ior = orb->object_to_string - (me.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + // ACE_DEBUG ((LM_DEBUG, "BMDevice_Context::subscribe_data_available\n")); - this->ciao_uses_event_channel_->connect_supplier - ("DataAvailable", "data_available", ior.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - } - - CORBA::String_var ior = orb->object_to_string (c ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - ciao_uses_event_channel_->connect_consumer - ("DataAvailable", "in_avail", ior.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + if (CORBA::is_nil (c)) + { + ACE_THROW_RETURN (CORBA::BAD_PARAM (), 0); + } - return 0; - // END NEW + if (CORBA::is_nil (this->ciao_proxy_data_available_consumer_.in ())) + this->connect_event_supplier (); + return this->connect_event_consumer (c); /* if (CORBA::is_nil (c)) @@ -295,6 +283,95 @@ namespace CIAO_GLUE_BasicSP */ } + void + BMDevice_Context::connect_event_supplier () + { + + // ACE_DEBUG ((LM_DEBUG, "BMDevice_Context::connect_event_supplier\n")); + + // Get a reference to the ORB. + CORBA::ORB_var orb = this->container_->_ciao_the_ORB (); + + RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + this->ciao_uses_event_channel_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + this->ciao_proxy_data_available_consumer_ = + supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Create and register supplier servant + MyImpl::RTEventServiceSupplier_impl * supplier_servant; + ACE_NEW (supplier_servant, + MyImpl::RTEventServiceSupplier_impl (orb.in ())); + RtecEventComm::PushSupplier_var push_supplier = + supplier_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Set QoS properties and connect + ACE_SupplierQOS_Factory qos; + qos.insert (ACE_ES_EVENT_SOURCE_ANY + 2, + ACE_ES_EVENT_UNDEFINED + 2, + 0, + 1); + + this->ciao_proxy_data_available_consumer_->connect_push_supplier (push_supplier.in (), + qos.get_SupplierQOS () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + } + + ::Components::Cookie * + BMDevice_Context::connect_event_consumer ( + ::BasicSP::DataAvailableConsumer_ptr c) + { + + // ACE_DEBUG ((LM_DEBUG, "EC_Context::connect_event_consumer\n")); + + // @@ Bala, am I reference counting parameter 'c' correctly? + + // Get a reference to the ORB. + CORBA::ORB_var orb = this->container_->_ciao_the_ORB (); + + ::BasicSP::DataAvailableConsumer_var dup = + ::BasicSP::DataAvailableConsumer::_duplicate (c); + + RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = + this->ciao_uses_event_channel_->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier = + consumer_admin->obtain_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Create and register consumer servant + MyImpl::RTEventServiceConsumer_impl * consumer_servant; + ACE_NEW_RETURN (consumer_servant, + MyImpl::RTEventServiceConsumer_impl (orb.in (), dup.in ()), + 0); + RtecEventComm::PushConsumer_var push_consumer = + consumer_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Set QoS properties and connect + ACE_ConsumerQOS_Factory qos; + qos.start_logical_and_group (2); + qos.insert_type (ACE_ES_EVENT_UNDEFINED + 2, + 0); + qos.insert_source (ACE_ES_EVENT_SOURCE_ANY + 2, + 0); + proxy_supplier->connect_push_consumer (push_consumer.in (), + qos.get_ConsumerQOS () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + dup._retn (); + + ::Components::Cookie * return_cookie; + ACE_NEW_RETURN (return_cookie, + ::CIAO::Object_Reference_Cookie (push_consumer.in ()), + 0); + return return_cookie; + } + ::BasicSP::DataAvailableConsumer_ptr BMDevice_Context::unsubscribe_data_available ( ::Components::Cookie *ck @@ -303,6 +380,31 @@ namespace CIAO_GLUE_BasicSP ::CORBA::SystemException, ::Components::InvalidConnection)) { + + CORBA::Object_var obj = CORBA::Object::_nil (); + ::BasicSP::DataAvailableConsumer_var return_consumer; + + if (ck == 0 || ::CIAO::Object_Reference_Cookie::extract (ck, obj.out ()) == -1) + { + ACE_THROW_RETURN ( + ::Components::InvalidConnection (), + ::BasicSP::DataAvailableConsumer::_nil ()); + } + + RtecEventComm::PushConsumer_var push_consumer = + ::RtecEventComm::PushConsumer::_narrow (obj.in ()); + + if (CORBA::is_nil (push_consumer.in ())) + { + ACE_THROW_RETURN ( + ::Components::InvalidConnection (), + ::BasicSP::DataAvailableConsumer::_nil ()); + } + + push_consumer->disconnect_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // @@ Bala, what should I return here? return ::BasicSP::DataAvailableConsumer::_nil (); /* @@ -327,27 +429,18 @@ namespace CIAO_GLUE_BasicSP */ } - // NEW - void - BMDevice_Context::connect_proxy_consumer ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer) - { - ciao_proxy_consumer_ = proxy_consumer; - } - // END NEW - - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMDevice_Context::get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - return ::BasicSP::RTEventChannel::_duplicate ( + return ::RtecEventChannelAdmin::EventChannel::_duplicate ( this->ciao_uses_event_channel_.in ()); } void BMDevice_Context::connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL) ACE_THROW_SPEC (( ::CORBA::SystemException, @@ -365,10 +458,10 @@ namespace CIAO_GLUE_BasicSP } this->ciao_uses_event_channel_ = - ::BasicSP::RTEventChannel::_duplicate (c); + ::RtecEventChannelAdmin::EventChannel::_duplicate (c); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMDevice_Context::disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC (( @@ -379,7 +472,7 @@ namespace CIAO_GLUE_BasicSP { ACE_THROW_RETURN ( ::Components::NoConnection (), - ::BasicSP::RTEventChannel::_nil ()); + ::RtecEventChannelAdmin::EventChannel::_nil ()); } return this->ciao_uses_event_channel_._retn (); @@ -595,7 +688,7 @@ namespace CIAO_GLUE_BasicSP void BMDevice_Servant::connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL) ACE_THROW_SPEC (( ::CORBA::SystemException, @@ -607,7 +700,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_PARAMETER); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMDevice_Servant::disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC (( @@ -618,7 +711,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_SINGLE_ARG_PARAMETER); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr BMDevice_Servant::get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) @@ -718,8 +811,8 @@ namespace CIAO_GLUE_BasicSP if (ACE_OS::strcmp (name, "event_channel") == 0) { - ::BasicSP::RTEventChannel_var _ciao_conn = - ::BasicSP::RTEventChannel::_narrow ( + ::RtecEventChannelAdmin::EventChannel_var _ciao_conn = + ::RtecEventChannelAdmin::EventChannel::_narrow ( connection ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (0); @@ -802,19 +895,6 @@ namespace CIAO_GLUE_BasicSP // Operations for Events interface. - // NEW - void - BMDevice_Servant::connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)) - { - this->context_->connect_proxy_consumer (proxy_consumer); - } - // END NEW - ::Components::EventConsumerBase_ptr BMDevice_Servant::get_consumer ( const char *sink_name diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.h b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.h index 830e900d59c..f6e99a97e7c 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.h +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BMDevice/BMDevice_svnt.h @@ -28,12 +28,12 @@ #include "ciao/Container_Base.h" #include "tao/LocalObject.h" #include "tao/PortableServer/Key_Adapters.h" -#include "ace/Active_Map_Manager_T.h" +// #include "ace/Active_Map_Manager_T.h" -//NEW -#include "orbsvcs/RtecEventChannelAdminC.h" -#include "Event_Utilities.h" -// END NEW +// START new event code +#include "../RTEventService/RTEventService_exec.h" +#include "tao/ORB_Core.h" +// END new event code #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once @@ -147,7 +147,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -173,43 +173,46 @@ namespace CIAO_GLUE_BasicSP virtual void connect_event_channel ( - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::AlreadyConnected, ::Components::InvalidConnection)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::NoConnection)); - // NEW + // START new event code + ::Components::Cookie * + connect_event_consumer ( + ::BasicSP::DataAvailableConsumer_ptr c); + void - connect_proxy_consumer ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer); - // END NEW + connect_event_supplier (); + // END new protected: - // NEW + // START new event code RtecEventChannelAdmin::ProxyPushConsumer_var - ciao_proxy_consumer_; - // END NEW + ciao_proxy_data_available_consumer_; + // END new - // OLD - /* + // START old event code + /* ACE_Active_Map_Manager< ::BasicSP::DataAvailableConsumer_var> ciao_publishes_data_available_map_; */ - // END OLD + // END old // Simplex event_channel connection. - ::BasicSP::RTEventChannel_var + ::RtecEventChannelAdmin::EventChannel_var ciao_uses_event_channel_; ::Components::CCMHome_var @@ -305,19 +308,19 @@ namespace CIAO_GLUE_BasicSP virtual void connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::AlreadyConnected, ::Components::InvalidConnection)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -400,16 +403,6 @@ namespace CIAO_GLUE_BasicSP // Operations for Events interface. - // NEW - virtual void - connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)); - // END NEW - virtual ::Components::EventConsumerBase_ptr get_consumer ( const char *sink_name diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BasicSP.idl b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BasicSP.idl index 5ea22ff5c99..8cbdc2967bc 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BasicSP.idl +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/BasicSP.idl @@ -13,6 +13,7 @@ #define CIAO_BASIC_SP_IDL #include <Components.idl> +#include <RtecEventChannelAdmin.idl> // @@NOTE: Do we need a pragma prefix. Anyway its broken now in TAO.. // #pragma prefix "" @@ -34,18 +35,6 @@ module BasicSP string get_data (); }; - interface RTEventChannel - { - void connect_consumer (in string event_type, - in string sink_name, - in string consumer_oid); - - void connect_supplier (in string event_type, - in string source_name, - in string supplier_oid); - - }; - /** * @eventtype Events that represent timeouts */ @@ -58,4 +47,201 @@ module BasicSP }; +/*module TimeBase +{ + typedef unsigned long long TimeT; +}; + + +typedef sequence<octet> EventPayload; + +struct RtecEventData +{ + long pad1; + + EventPayload payload; + + any any_value; +}; + +module RtecEventComm +{ + + typedef RtecEventData EventData; + + typedef TimeBase::TimeT Time; + + typedef long EventSourceID; + + typedef long _EventType; + + struct EventHeader + { + _EventType type; + + EventSourceID source; + + long ttl; + + Time creation_time; + + Time ec_recv_time; + + Time ec_send_time; + }; + + struct Event + { + EventHeader header; + + EventData data; + }; + + typedef sequence<Event> EventSet; + + interface PushConsumer + { + oneway void push (in EventSet data); + + void disconnect_push_consumer (); + }; + + interface PushSupplier + { + void disconnect_push_supplier (); + }; + +}; + +module RtecBase +{ + + enum Dependency_Type_t + { + ONE_WAY_CALL, + TWO_WAY_CALL + }; + + typedef long handle_t; + + struct Dependency_Info + { + Dependency_Type_t dependency_type; + + long number_of_calls; + + handle_t rt_info; + }; + +}; + +module RtecEventChannelAdmin +{ + exception AlreadyConnected {}; + + exception TypeError {}; + + struct Dependency + { + RtecEventComm::Event event; + + RtecBase::handle_t rt_info; + }; + + typedef sequence<Dependency> DependencySet; + + struct Publication + { + RtecEventComm::Event event; + + RtecBase::Dependency_Info dependency_info; + }; + + typedef sequence<Publication> PublicationSet; + + struct ConsumerQOS + { + DependencySet dependencies; + + boolean is_gateway; + }; + + struct SupplierQOS + { + PublicationSet publications; + + boolean is_gateway; + }; + + interface ProxyPushConsumer : RtecEventComm::PushConsumer + { + void connect_push_supplier (in RtecEventComm::PushSupplier push_supplier, + in SupplierQOS qos) + raises (AlreadyConnected); + }; + + interface ProxyPushSupplier : RtecEventComm::PushSupplier + { + void connect_push_consumer(in RtecEventComm::PushConsumer push_consumer, + in ConsumerQOS qos) + raises(AlreadyConnected, TypeError); + + void suspend_connection (); + + void resume_connection (); + + }; + + interface ConsumerAdmin + { + ProxyPushSupplier obtain_push_supplier (); + }; + + interface SupplierAdmin + { + ProxyPushConsumer obtain_push_consumer (); + }; + + interface Observer + { + void update_consumer (in ConsumerQOS sub); + + void update_supplier (in SupplierQOS pub); + }; + + typedef unsigned long Observer_Handle; + + interface EventChannel + { + + exception SYNCHRONIZATION_ERROR {}; + + exception CANT_APPEND_OBSERVER {}; + + exception CANT_REMOVE_OBSERVER {}; + + exception QOS_ERROR {}; + + exception SUBSCRIPTION_ERROR {}; + + exception CORRELATION_ERROR {}; + + exception DISPATCH_ERROR {}; + + ConsumerAdmin for_consumers (); + + SupplierAdmin for_suppliers (); + + void destroy (); + + Observer_Handle append_observer (in Observer gw) + raises (SYNCHRONIZATION_ERROR,CANT_APPEND_OBSERVER); + + void remove_observer (in Observer_Handle gw) + raises (SYNCHRONIZATION_ERROR,CANT_REMOVE_OBSERVER); + }; + +}; +*/ + #endif /*CIAO_BASIC_SP_IDL*/ diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC.idl b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC.idl index 5cd5a1a30e9..300ff2f33c2 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC.idl +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC.idl @@ -24,7 +24,7 @@ module BasicSP component EC supports trigger { publishes TimeOut timeout; - uses RTEventChannel event_channel; + uses RtecEventChannelAdmin::EventChannel event_channel; /// The attribute can be configured via the home or the /// component property file. diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.cpp b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.cpp index 5175df61f35..330283166a9 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.cpp +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.cpp @@ -29,12 +29,19 @@ namespace CIAO_GLUE_BasicSP EC_Servant *sv) : home_ (::Components::CCMHome::_duplicate (home)), container_ (c), - servant_ (sv) + servant_ (sv), + // START new event code + ciao_proxy_timeout_consumer_ (RtecEventChannelAdmin::ProxyPushConsumer::_nil ()) + // END new { } EC_Context::~EC_Context (void) { + // START new event code + this->ciao_uses_event_channel_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + // END new } // Operations from ::Components::CCMContext. @@ -143,18 +150,17 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - ACE_DEBUG ((LM_DEBUG, "EC_Context::push_timeout\n")); - // NEW + // START new event code RtecEventComm::EventSet events (1); events.length (1); events[0].header.source = ACE_ES_EVENT_SOURCE_ANY + 1; events[0].header.type = ACE_ES_EVENT_UNDEFINED + 1; - ::Components::EventBase * ev_base = ev; + Components::EventBase * any_event = ev; ev->_add_ref (); - events[0].data.any_value <<= ev_base; - ciao_proxy_consumer_->push (events ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - // END NEW + events[0].data.any_value <<= any_event; + ciao_proxy_timeout_consumer_->push (events ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + // END new /* ACE_Active_Map_Manager<::BasicSP::TimeOutConsumer_var>::iterator end = @@ -188,36 +194,17 @@ namespace CIAO_GLUE_BasicSP ::CORBA::SystemException, ::Components::ExceededConnectionLimit)) { - ACE_DEBUG ((LM_DEBUG, "EC_Context::subscribe_timeout\n")); - // NEW - char * argv[1] = { "EC_exec" }; - int argc = sizeof (argv) / sizeof (argv[0]); - CORBA::ORB_var orb = CORBA::ORB_init (argc, argv ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - if (CORBA::is_nil (this->ciao_proxy_consumer_.in ())) - { - ::CORBA::Object_var me = - this->get_CCM_object (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - CORBA::String_var ior = orb->object_to_string - (me.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + ACE_DEBUG ((LM_DEBUG, "EC_Context::subscribe_timeout\n")); - this->ciao_uses_event_channel_->connect_supplier - ("TimeOut", "timeout", ior.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - } - - CORBA::String_var ior = orb->object_to_string (c ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - ciao_uses_event_channel_->connect_consumer - ("TimeOut", "timeout", ior.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + if (CORBA::is_nil (c)) + { + ACE_THROW_RETURN (CORBA::BAD_PARAM (), 0); + } - return 0; - // END NEW + if (CORBA::is_nil (this->ciao_proxy_timeout_consumer_.in ())) + this->connect_event_supplier (); + return this->connect_event_consumer (c); /* if (CORBA::is_nil (c)) @@ -238,6 +225,95 @@ namespace CIAO_GLUE_BasicSP */ } + void + EC_Context::connect_event_supplier () + { + + ACE_DEBUG ((LM_DEBUG, "EC_Context::connect_event_supplier\n")); + + // Get a reference to the ORB. + CORBA::ORB_var orb = this->container_->_ciao_the_ORB (); + + RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + this->ciao_uses_event_channel_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + this->ciao_proxy_timeout_consumer_ = + supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Create and register supplier servant + MyImpl::RTEventServiceSupplier_impl * supplier_servant; + ACE_NEW (supplier_servant, + MyImpl::RTEventServiceSupplier_impl (orb.in ())); + RtecEventComm::PushSupplier_var push_supplier = + supplier_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Set QoS properties and connect + ACE_SupplierQOS_Factory qos; + qos.insert (ACE_ES_EVENT_SOURCE_ANY + 1, + ACE_ES_EVENT_UNDEFINED + 1, + 0, + 1); + + this->ciao_proxy_timeout_consumer_->connect_push_supplier (push_supplier.in (), + qos.get_SupplierQOS () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + } + + ::Components::Cookie * + EC_Context::connect_event_consumer ( + ::BasicSP::TimeOutConsumer_ptr c) + { + + ACE_DEBUG ((LM_DEBUG, "EC_Context::connect_event_consumer\n")); + + // @@ Bala, am I reference counting parameter 'c' correctly? + + // Get a reference to the ORB. + CORBA::ORB_var orb = this->container_->_ciao_the_ORB (); + + ::BasicSP::TimeOutConsumer_var dup = + ::BasicSP::TimeOutConsumer::_duplicate (c); + + RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = + this->ciao_uses_event_channel_->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier = + consumer_admin->obtain_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Create and register consumer servant + MyImpl::RTEventServiceConsumer_impl * consumer_servant; + ACE_NEW_RETURN (consumer_servant, + MyImpl::RTEventServiceConsumer_impl (orb.in (), dup.in ()), + 0); + RtecEventComm::PushConsumer_var push_consumer = + consumer_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // Set QoS properties and connect + ACE_ConsumerQOS_Factory qos; + qos.start_logical_and_group (2); + qos.insert_type (ACE_ES_EVENT_UNDEFINED + 1, + 0); + qos.insert_source (ACE_ES_EVENT_SOURCE_ANY + 1, + 0); + proxy_supplier->connect_push_consumer (push_consumer.in (), + qos.get_ConsumerQOS () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + dup._retn (); + + ::Components::Cookie * return_cookie; + ACE_NEW_RETURN (return_cookie, + ::CIAO::Object_Reference_Cookie (push_consumer.in ()), + 0); + return return_cookie; + } + ::BasicSP::TimeOutConsumer_ptr EC_Context::unsubscribe_timeout ( ::Components::Cookie *ck @@ -246,6 +322,31 @@ namespace CIAO_GLUE_BasicSP ::CORBA::SystemException, ::Components::InvalidConnection)) { + + CORBA::Object_var obj = CORBA::Object::_nil (); + ::BasicSP::TimeOutConsumer_var return_consumer; + + if (ck == 0 || ::CIAO::Object_Reference_Cookie::extract (ck, obj.out ()) == -1) + { + ACE_THROW_RETURN ( + ::Components::InvalidConnection (), + ::BasicSP::TimeOutConsumer::_nil ()); + } + + RtecEventComm::PushConsumer_var push_consumer = + ::RtecEventComm::PushConsumer::_narrow (obj.in ()); + + if (CORBA::is_nil (push_consumer.in ())) + { + ACE_THROW_RETURN ( + ::Components::InvalidConnection (), + ::BasicSP::TimeOutConsumer::_nil ()); + } + + push_consumer->disconnect_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + // @@ Bala, what should I return here? return ::BasicSP::TimeOutConsumer::_nil (); /* @@ -270,27 +371,18 @@ namespace CIAO_GLUE_BasicSP */ } - // NEW - void - EC_Context::connect_proxy_consumer ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer) - { - ciao_proxy_consumer_ = proxy_consumer; - } - // END NEW - - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr EC_Context::get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - return ::BasicSP::RTEventChannel::_duplicate ( + return ::RtecEventChannelAdmin::EventChannel::_duplicate ( this->ciao_uses_event_channel_.in ()); } void EC_Context::connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL) ACE_THROW_SPEC (( ::CORBA::SystemException, @@ -308,10 +400,10 @@ namespace CIAO_GLUE_BasicSP } this->ciao_uses_event_channel_ = - ::BasicSP::RTEventChannel::_duplicate (c); + ::RtecEventChannelAdmin::EventChannel::_duplicate (c); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr EC_Context::disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC (( @@ -322,7 +414,7 @@ namespace CIAO_GLUE_BasicSP { ACE_THROW_RETURN ( ::Components::NoConnection (), - ::BasicSP::RTEventChannel::_nil ()); + ::RtecEventChannelAdmin::EventChannel::_nil ()); } return this->ciao_uses_event_channel_._retn (); @@ -410,7 +502,7 @@ namespace CIAO_GLUE_BasicSP void EC_Servant::connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL) ACE_THROW_SPEC (( ::CORBA::SystemException, @@ -422,7 +514,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_PARAMETER); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr EC_Servant::disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC (( @@ -433,7 +525,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_SINGLE_ARG_PARAMETER); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr EC_Servant::get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) @@ -548,8 +640,8 @@ namespace CIAO_GLUE_BasicSP if (ACE_OS::strcmp (name, "event_channel") == 0) { - ::BasicSP::RTEventChannel_var _ciao_conn = - ::BasicSP::RTEventChannel::_narrow ( + ::RtecEventChannelAdmin::EventChannel_var _ciao_conn = + ::RtecEventChannelAdmin::EventChannel::_narrow ( connection ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (0); @@ -718,20 +810,6 @@ namespace CIAO_GLUE_BasicSP ::Components::EventConsumerBase::_nil ()); } - // NEW - void - EC_Servant::connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)) - { - ACE_DEBUG ((LM_DEBUG, "EC_Servant::connect_publisher\n")); - this->context_->connect_proxy_consumer (proxy_consumer); - } - // END NEW - void EC_Servant::connect_consumer ( const char *emitter_name, diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.h b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.h index 66bb912b0fc..7c3d79d5ab4 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.h +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/EC/EC_svnt.h @@ -28,12 +28,12 @@ #include "ciao/Container_Base.h" #include "tao/LocalObject.h" #include "tao/PortableServer/Key_Adapters.h" -#include "ace/Active_Map_Manager_T.h" +// #include "ace/Active_Map_Manager_T.h" -//NEW -#include "orbsvcs/RtecEventChannelAdminC.h" -#include "Event_Utilities.h" -// END NEW +// START new event code +#include "../RTEventService/RTEventService_exec.h" +#include "tao/ORB_Core.h" +// END new event code #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once @@ -113,7 +113,7 @@ namespace CIAO_GLUE_BasicSP ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -139,43 +139,46 @@ namespace CIAO_GLUE_BasicSP virtual void connect_event_channel ( - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::AlreadyConnected, ::Components::InvalidConnection)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::NoConnection)); - // NEW + // START new event code + ::Components::Cookie * + connect_event_consumer ( + ::BasicSP::TimeOutConsumer_ptr c); + void - connect_proxy_consumer ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer); - // END NEW + connect_event_supplier (); + // END new protected: - // NEW + // START new event code RtecEventChannelAdmin::ProxyPushConsumer_var - ciao_proxy_consumer_; - // END NEW + ciao_proxy_timeout_consumer_; + // END new - // OLD + // START old event code /* ACE_Active_Map_Manager< ::BasicSP::TimeOutConsumer_var> ciao_publishes_timeout_map_; */ - // END OLD + // END old // Simplex event_channel connection. - ::BasicSP::RTEventChannel_var + ::RtecEventChannelAdmin::EventChannel_var ciao_uses_event_channel_; ::Components::CCMHome_var @@ -231,19 +234,19 @@ namespace CIAO_GLUE_BasicSP virtual void connect_event_channel ( - ::BasicSP::RTEventChannel_ptr c + ::RtecEventChannelAdmin::EventChannel_ptr c ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC (( ::CORBA::SystemException, ::Components::AlreadyConnected, ::Components::InvalidConnection)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr disconnect_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr get_connection_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -366,16 +369,6 @@ namespace CIAO_GLUE_BasicSP ::Components::InvalidName, ::Components::InvalidConnection)); - // NEW - virtual void - connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)); - // END NEW - virtual void connect_consumer ( const char *emitter_name, diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService.idl b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService.idl index 53f578f07b6..c70b608ca4d 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService.idl +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService.idl @@ -20,7 +20,7 @@ module BasicSP component RTEventService { - provides RTEventChannel rt_event_channel; + provides RtecEventChannelAdmin::EventChannel rt_event_channel; }; home RTEventServiceHome manages RTEventService diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventServiceEI.idl b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventServiceEI.idl index b125b7058b0..9b16e368baf 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventServiceEI.idl +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventServiceEI.idl @@ -17,13 +17,10 @@ module BasicSP { /** * @interface RTEventService_Exec - * - * The actual RTEventService executor inherits from both CCM_RTEventService - * and session_component interfaces as a monolithic implementation. */ local interface RTEventService_Exec : CCM_RTEventService, - CCM_RTEventChannel, + RtecEventChannelAdmin::CCM_EventChannel, Components::SessionComponent { }; diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.cpp b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.cpp index 2d25405105b..fa891b5685a 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.cpp +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.cpp @@ -44,153 +44,66 @@ MyImpl::RTEventService_exec_impl::RTEventService_exec_impl () MyImpl::RTEventService_exec_impl::~RTEventService_exec_impl () { - + } -void MyImpl::RTEventService_exec_impl::connect_consumer ( - const char * event_type, - const char * sink_name, - const char * consumer_oid - ACE_ENV_SINGLE_ARG_DECL - ) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - ACE_DEBUG ((LM_DEBUG, "RTEventService_exec_impl::connect_consumer\n")); - - CORBA::Object_var obj = this->orb_->string_to_object (consumer_oid - ACE_ENV_ARG_PARAMETER); - Components::EventConsumerBase_var event_base = - Components::EventConsumerBase::_narrow (obj.in () - ACE_ENV_ARG_PARAMETER); - if (CORBA::is_nil (event_base.in ())) - ACE_ERROR ((LM_ERROR, "Nil event consumer\n")); - RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = +::RtecEventChannelAdmin::ConsumerAdmin_ptr +MyImpl::RTEventService_exec_impl::for_consumers ( +ACE_ENV_SINGLE_ARG_DECL) +ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::RtecEventChannelAdmin::ConsumerAdmin_ptr ret_val = this->event_channel_->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK; - RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier = - consumer_admin->obtain_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - // Create and register consumer servant - // @@ Bala, the consumer_servant is deactivated in the disconnect_push_consumer method, below - RTEventServiceConsumer_impl * consumer_servant; - ACE_NEW (consumer_servant, RTEventServiceConsumer_impl - (orb_.in (), Components::EventConsumerBase::_duplicate (event_base.in ()))); - RtecEventComm::PushConsumer_var consumer = consumer_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - // Put reference to this PushConsumer in the map so we can disconnect later - ACE_Active_Map_Manager_Key key; - this->proxy_supplier_map_.bind (proxy_supplier.in (), key); - - // Set QoS properties and connect - ACE_ConsumerQOS_Factory qos; - CORBA::Long event_flag; - CORBA::Long source_flag; - - // @@ Bala, let me know the right way to do this - if (ACE_OS::strcmp (event_type, "TimeOut") == 0) - event_flag = ACE_ES_EVENT_UNDEFINED + 1; - - if (ACE_OS::strcmp (event_type, "DataAvailable") == 0) - event_flag = ACE_ES_EVENT_UNDEFINED + 2; - - if (ACE_OS::strcmp (sink_name, "timeout") == 0) - source_flag = ACE_ES_EVENT_SOURCE_ANY + 1; - - if (ACE_OS::strcmp (sink_name, "in_avail") == 0) - source_flag = ACE_ES_EVENT_SOURCE_ANY + 2; - - if (ACE_OS::strcmp (sink_name, "data_ready") == 0) - source_flag = ACE_ES_EVENT_SOURCE_ANY + 3; - - qos.start_logical_and_group (2); - qos.insert_type (event_flag, - 0); - qos.insert_source (source_flag, - 0); - proxy_supplier->connect_push_consumer (consumer.in (), - qos.get_ConsumerQOS () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - + return ret_val; } -void MyImpl::RTEventService_exec_impl::connect_supplier ( - const char * event_type, - const char * source_name, - const char * supplier_oid - ACE_ENV_SINGLE_ARG_DECL - ) - ACE_THROW_SPEC (( - CORBA::SystemException - )) +::RtecEventChannelAdmin::SupplierAdmin_ptr +MyImpl::RTEventService_exec_impl::for_suppliers ( +ACE_ENV_SINGLE_ARG_DECL) +ACE_THROW_SPEC ((CORBA::SystemException)) { - ACE_DEBUG ((LM_DEBUG, "RTEventService_exec_impl::connect_supplier\n")); - - RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + ::RtecEventChannelAdmin::SupplierAdmin_ptr ret_val = this->event_channel_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK; - RtecEventChannelAdmin::ProxyPushConsumer_var proxy_consumer = - supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - // Create and register supplier servant - RTEventServiceSupplier_impl * supplier_servant; - ACE_NEW (supplier_servant, RTEventServiceSupplier_impl (orb_.in ())); - RtecEventComm::PushSupplier_var supplier = supplier_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - // Set QoS properties and connect - ACE_SupplierQOS_Factory qos; - CORBA::Long event_flag; - CORBA::Long source_flag; - - if (ACE_OS::strcmp (event_type, "TimeOut") == 0) - event_flag = ACE_ES_EVENT_UNDEFINED + 1; - - if (ACE_OS::strcmp (event_type, "DataAvailable") == 0) - event_flag = ACE_ES_EVENT_UNDEFINED + 2; - - if (ACE_OS::strcmp (source_name, "timeout") == 0) - source_flag = ACE_ES_EVENT_SOURCE_ANY + 1; - - if (ACE_OS::strcmp (source_name, "data_available") == 0) - source_flag = ACE_ES_EVENT_SOURCE_ANY + 2; - - if (ACE_OS::strcmp (source_name, "out_avail") == 0) - source_flag = ACE_ES_EVENT_SOURCE_ANY + 3; - - qos.insert (source_flag, - event_flag, - 0, - 1); - - proxy_consumer->connect_push_supplier (supplier.in (), - qos.get_SupplierQOS () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + return ret_val; +} - CORBA::Object_var obj = this->orb_->string_to_object (supplier_oid - ACE_ENV_ARG_PARAMETER); +void +MyImpl::RTEventService_exec_impl::destroy ( +ACE_ENV_SINGLE_ARG_DECL) +ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->event_channel_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK; +} - Components::CCMObject_var ccm_obj = - Components::CCMObject::_narrow (obj.in () - ACE_ENV_ARG_PARAMETER); +RtecEventChannelAdmin::Observer_Handle +MyImpl::RTEventService_exec_impl::append_observer ( + RtecEventChannelAdmin::Observer_ptr gw + ACE_ENV_ARG_DECL) +ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER)) +{ + RtecEventChannelAdmin::Observer_Handle ret_val = + this->event_channel_->append_observer (gw ACE_ENV_ARG_PARAMETER); ACE_CHECK; + return ret_val; +} - if (CORBA::is_nil (ccm_obj.in ())) - ACE_ERROR ((LM_ERROR, "Nil event supplier\n")); - - // @@ Bala, the connect_publisher method was added to the Events interface in - // CCM_Event.idl. Let me know if there is a better way. - ccm_obj->connect_publisher - (RtecEventChannelAdmin::ProxyPushConsumer::_duplicate (proxy_consumer.in ()) - ACE_ENV_ARG_PARAMETER); +void +MyImpl::RTEventService_exec_impl::remove_observer ( + RtecEventChannelAdmin::Observer_Handle gw + ACE_ENV_ARG_DECL) +ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER)) +{ + this->event_channel_->remove_observer (gw ACE_ENV_ARG_PARAMETER); ACE_CHECK; } @@ -199,6 +112,8 @@ void MyImpl::RTEventService_exec_impl::set_session_context (Components::SessionC ACE_THROW_SPEC ((CORBA::SystemException, Components::CCMException)) { + ACE_DEBUG ((LM_DEBUG, "MyImpl::RTEventService_exec_impl::set_session_context\n")); + context_ = BasicSP::CCM_RTEventService_Context::_narrow (ctx); } @@ -206,7 +121,7 @@ void MyImpl::RTEventService_exec_impl::ccm_activate (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException, Components::CCMException)) { - + ACE_DEBUG ((LM_DEBUG, "MyImpl::RTEventService_exec_impl::ccm_activate\n")); } void MyImpl::RTEventService_exec_impl::ccm_passivate (ACE_ENV_SINGLE_ARG_DECL) @@ -223,12 +138,12 @@ void MyImpl::RTEventService_exec_impl::ccm_remove (ACE_ENV_SINGLE_ARG_DECL) } -BasicSP::CCM_RTEventChannel_ptr +RtecEventChannelAdmin::CCM_EventChannel_ptr MyImpl::RTEventService_exec_impl::get_rt_event_channel (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { ACE_DEBUG ((LM_DEBUG, "RTEventService_exec_impl::get_rt_event_channel\n")); - return BasicSP::CCM_RTEventChannel::_duplicate (this); + return RtecEventChannelAdmin::CCM_EventChannel::_duplicate (this); } MyImpl::RTEventServiceHome_exec_impl::RTEventServiceHome_exec_impl () @@ -317,3 +232,58 @@ void MyImpl::RTEventServiceConsumer_impl::disconnect_push_consumer (void) PortableServer::ObjectId_var oid = root_poa->servant_to_id (this); root_poa->deactivate_object (oid); } + +CIAO::Object_Reference_Cookie::Object_Reference_Cookie () +{ + +} + +CIAO::Object_Reference_Cookie::~Object_Reference_Cookie () +{ + +} + +CIAO::Object_Reference_Cookie::Object_Reference_Cookie (CORBA::Object_ptr obj) +{ + +} + +int +CIAO::Object_Reference_Cookie::insert (CORBA::Object_ptr obj) +{ + return 0; +} + +int +CIAO::Object_Reference_Cookie::extract (::Components::Cookie *ck, + CORBA::Object_ptr obj) +{ + CIAO::Cookie * c = CIAO::Cookie::_downcast (ck); + + if (c == 0) + return -1; + + ::CORBA::OctetSeq * x = c->get_cookie (); + + //if (x->length () != CORBA::Object::size ()) + // return -1; + + return 0; +} + + +CORBA::ValueBase * +CIAO::Object_Reference_Cookie_init::create_for_unmarshal (void) +{ + CORBA::ValueBase * return_value = 0; + ACE_NEW_RETURN (return_value, + CIAO::Object_Reference_Cookie, + 0); + return return_value; +} + +::CORBA::OctetSeq * +CIAO::Object_Reference_Cookie::get_cookie (ACE_ENV_SINGLE_ARG_DECL) +{ + return &this->cookieValue (); +} diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.h b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.h index 4d272945a49..45c3f51bf8c 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.h +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_exec.h @@ -29,6 +29,8 @@ #include "tao/PortableServer/Key_Adapters.h" #include "ace/Active_Map_Manager_T.h" +#include "CIAO_ValueC.h" + namespace MyImpl { /** @@ -47,26 +49,41 @@ namespace MyImpl /// Default destructor. ~RTEventService_exec_impl (); - // Operations from BasicSP::CCM_RTEventService + // Operations from RtecEventChannel::CCM_EventChannel + + virtual ::RtecEventChannelAdmin::ConsumerAdmin_ptr + for_consumers ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual void connect_consumer ( - const char * event_type, - const char * sink_name, - const char * consumer_oid - ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS - ) - ACE_THROW_SPEC (( - CORBA::SystemException + virtual ::RtecEventChannelAdmin::SupplierAdmin_ptr + for_suppliers ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual void + destroy ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual RtecEventChannelAdmin::Observer_Handle + append_observer ( + RtecEventChannelAdmin::Observer_ptr gw + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER )); - virtual void connect_supplier ( - const char * event_type, - const char * source_name, - const char * supplier_oid - ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS - ) - ACE_THROW_SPEC (( - CORBA::SystemException + virtual void + remove_observer ( + RtecEventChannelAdmin::Observer_Handle gw + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER )); // Operations from Components::SessionComponent @@ -92,7 +109,7 @@ namespace MyImpl ACE_THROW_SPEC ((CORBA::SystemException, Components::CCMException)); - virtual BasicSP::CCM_RTEventChannel_ptr + virtual RtecEventChannelAdmin::CCM_EventChannel_ptr get_rt_event_channel (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -104,10 +121,6 @@ namespace MyImpl // Reference to event channel RtecEventChannelAdmin::EventChannel_var event_channel_; - ACE_Active_Map_Manager< - ::RtecEventChannelAdmin::ProxyPushSupplier_var> - proxy_supplier_map_; - CORBA::ORB_var orb_; PortableServer::POA_var poa_; @@ -139,13 +152,12 @@ namespace MyImpl Components::CCMException)); }; - // NEW - class RTEventServiceSupplier_impl : + class RTEVENTSERVICE_EXEC_Export RTEventServiceSupplier_impl : public virtual POA_RtecEventComm::PushSupplier, public virtual PortableServer::RefCountServantBase { - public: + public: RTEventServiceSupplier_impl (void); RTEventServiceSupplier_impl (CORBA::ORB_ptr orb); @@ -157,12 +169,12 @@ namespace MyImpl CORBA::ORB_var orb_; }; - class RTEventServiceConsumer_impl : + class RTEVENTSERVICE_EXEC_Export RTEventServiceConsumer_impl : public virtual POA_RtecEventComm::PushConsumer, public virtual PortableServer::RefCountServantBase { - public: + public: RTEventServiceConsumer_impl (void); RTEventServiceConsumer_impl (CORBA::ORB_ptr orb, @@ -177,7 +189,41 @@ namespace MyImpl CORBA::ORB_var orb_; Components::EventConsumerBase_var event_consumer_; }; - // END NEW + +} + +namespace CIAO +{ + + class RTEVENTSERVICE_EXEC_Export Object_Reference_Cookie + : public virtual OBV_CIAO::Cookie + { + + public: + Object_Reference_Cookie (); + + Object_Reference_Cookie (CORBA::Object_ptr obj); + + virtual ::CORBA::OctetSeq * get_cookie (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS); + + ~Object_Reference_Cookie (); + + int insert (CORBA::Object_ptr obj); + + static int extract (::Components::Cookie *c, + CORBA::Object_ptr obj); + }; + + class Object_Reference_Cookie_init : public virtual ::Components::Cookie_init + { + + public: + Object_Reference_Cookie_init (void); + + virtual ~Object_Reference_Cookie_init (void); + + virtual CORBA::ValueBase * create_for_unmarshal (void); + }; } diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.cpp b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.cpp index e2311f744ec..63987dc43b3 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.cpp +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.cpp @@ -21,52 +21,79 @@ #include "RTEventService_svnt.h" #include "Cookies.h" -namespace CIAO_GLUE_BasicSP +namespace CIAO_GLUE_RtecEventChannelAdmin { - RTEventChannel_Servant::RTEventChannel_Servant ( - ::BasicSP::CCM_RTEventChannel_ptr executor, + EventChannel_Servant::EventChannel_Servant ( + ::RtecEventChannelAdmin::CCM_EventChannel_ptr executor, ::Components::CCMContext_ptr c) - : executor_ (::BasicSP::CCM_RTEventChannel::_duplicate (executor)), + : executor_ (::RtecEventChannelAdmin::CCM_EventChannel::_duplicate (executor)), ctx_ (::Components::CCMContext::_duplicate (c)) { } - RTEventChannel_Servant::~RTEventChannel_Servant (void) + EventChannel_Servant::~EventChannel_Servant (void) + { + } + + ::RtecEventChannelAdmin::ConsumerAdmin_ptr + EventChannel_Servant::for_consumers ( + ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + return this->executor_->for_consumers ( + ACE_ENV_SINGLE_ARG_PARAMETER); + } + + ::RtecEventChannelAdmin::SupplierAdmin_ptr + EventChannel_Servant::for_suppliers ( + ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) { + return this->executor_->for_suppliers ( + ACE_ENV_SINGLE_ARG_PARAMETER); } void - RTEventChannel_Servant::connect_consumer ( - const char * event_type, - const char * sink_name, - const char * consumer_oid - ACE_ENV_ARG_DECL) + EventChannel_Servant::destroy ( + ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - this->executor_->connect_consumer ( - event_type, - sink_name, - consumer_oid + this->executor_->destroy ( + ACE_ENV_SINGLE_ARG_PARAMETER); + } + + RtecEventChannelAdmin::Observer_Handle + EventChannel_Servant::append_observer ( + RtecEventChannelAdmin::Observer_ptr gw + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER + )) + { + return this->executor_->append_observer ( + gw ACE_ENV_ARG_PARAMETER); } void - RTEventChannel_Servant::connect_supplier ( - const char * event_type, - const char * source_name, - const char * supplier_oid + EventChannel_Servant::remove_observer ( + RtecEventChannelAdmin::Observer_Handle gw ACE_ENV_ARG_DECL) - ACE_THROW_SPEC ((CORBA::SystemException)) + ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER + )) { - this->executor_->connect_supplier ( - event_type, - source_name, - supplier_oid + this->executor_->remove_observer ( + gw ACE_ENV_ARG_PARAMETER); } CORBA::Object_ptr - RTEventChannel_Servant::_get_component ( + EventChannel_Servant::_get_component ( ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { @@ -269,26 +296,26 @@ namespace CIAO_GLUE_BasicSP this->context_->_remove_ref (); } - ::BasicSP::RTEventChannel_ptr + ::RtecEventChannelAdmin::EventChannel_ptr RTEventService_Servant::provide_rt_event_channel ( ACE_ENV_SINGLE_ARG_PARAMETER) ACE_THROW_SPEC ((CORBA::SystemException)) { if (::CORBA::is_nil (this->provide_rt_event_channel_.in ())) { - ::BasicSP::CCM_RTEventChannel_var fexe = + ::RtecEventChannelAdmin::CCM_EventChannel_var fexe = this->executor_->get_rt_event_channel (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (::BasicSP::RTEventChannel::_nil ()); + ACE_CHECK_RETURN (::RtecEventChannelAdmin::EventChannel::_nil ()); if (::CORBA::is_nil (fexe.in ())) { ACE_THROW_RETURN ( ::CORBA::INTERNAL (), - ::BasicSP::RTEventChannel::_nil ()); + ::RtecEventChannelAdmin::EventChannel::_nil ()); } - RTEventChannel_Servant *svt = - new RTEventChannel_Servant ( + CIAO_GLUE_RtecEventChannelAdmin::EventChannel_Servant *svt = + new CIAO_GLUE_RtecEventChannelAdmin::EventChannel_Servant ( fexe.in (), this->context_); PortableServer::ServantBase_var safe_servant (svt); @@ -297,18 +324,18 @@ namespace CIAO_GLUE_BasicSP this->container_->install_servant ( svt ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (::BasicSP::RTEventChannel::_nil ()); + ACE_CHECK_RETURN (::RtecEventChannelAdmin::EventChannel::_nil ()); - ::BasicSP::RTEventChannel_var fo = - ::BasicSP::RTEventChannel::_narrow ( + ::RtecEventChannelAdmin::EventChannel_var fo = + ::RtecEventChannelAdmin::EventChannel::_narrow ( obj.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (::BasicSP::RTEventChannel::_nil ()); + ACE_CHECK_RETURN (::RtecEventChannelAdmin::EventChannel::_nil ()); this->provide_rt_event_channel_ = fo; } - return ::BasicSP::RTEventChannel::_duplicate (this->provide_rt_event_channel_.in ()); + return ::RtecEventChannelAdmin::EventChannel::_duplicate (this->provide_rt_event_channel_.in ()); } // Operations for Navigation interface. @@ -459,20 +486,6 @@ namespace CIAO_GLUE_BasicSP // Operations for Events interface. - // NEW - void - RTEventService_Servant::connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)) - { - ACE_THROW ( - ::Components::InvalidName ()); - } - // END NEW - ::Components::EventConsumerBase_ptr RTEventService_Servant::get_consumer ( const char *sink_name diff --git a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.h b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.h index ac196b89dd3..24252c75543 100644 --- a/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.h +++ b/TAO/CIAO/examples/handcrafted/BasicSP_EC2/RTEventService/RTEventService_svnt.h @@ -34,34 +34,53 @@ # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ -namespace CIAO_GLUE_BasicSP +namespace CIAO_GLUE_RtecEventChannelAdmin { - class RTEVENTSERVICE_SVNT_Export RTEventChannel_Servant - : public virtual POA_BasicSP::RTEventChannel, + class RTEVENTSERVICE_SVNT_Export EventChannel_Servant + : public virtual POA_RtecEventChannelAdmin::EventChannel, public virtual PortableServer::RefCountServantBase { public: - RTEventChannel_Servant ( - ::BasicSP::CCM_RTEventChannel_ptr executor, + EventChannel_Servant ( + ::RtecEventChannelAdmin::CCM_EventChannel_ptr executor, ::Components::CCMContext_ptr ctx); - virtual ~RTEventChannel_Servant (void); + virtual ~EventChannel_Servant (void); + + virtual ::RtecEventChannelAdmin::ConsumerAdmin_ptr + for_consumers ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::RtecEventChannelAdmin::SupplierAdmin_ptr + for_suppliers ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void - connect_consumer ( - const char * event_type, - const char * sink_name, - const char * consumer_oid - ACE_ENV_ARG_DECL_WITH_DEFAULTS) + destroy ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); + virtual RtecEventChannelAdmin::Observer_Handle + append_observer ( + RtecEventChannelAdmin::Observer_ptr gw + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER + )); + virtual void - connect_supplier ( - const char * event_type, - const char * source_name, - const char * supplier_oid + remove_observer ( + RtecEventChannelAdmin::Observer_Handle gw ACE_ENV_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC ((CORBA::SystemException)); + ACE_THROW_SPEC (( + CORBA::SystemException, + RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR, + RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER + )); // Get component implementation. virtual CORBA::Object_ptr @@ -71,7 +90,7 @@ namespace CIAO_GLUE_BasicSP protected: // Facet executor. - ::BasicSP::CCM_RTEventChannel_var executor_; + ::RtecEventChannelAdmin::CCM_EventChannel_var executor_; // Context object. ::Components::CCMContext_var ctx_; @@ -176,7 +195,7 @@ namespace CIAO_GLUE_BasicSP virtual ~RTEventService_Servant (void); - virtual ::BasicSP::RTEventChannel_ptr + virtual ::RtecEventChannelAdmin::EventChannel_ptr provide_rt_event_channel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException)); @@ -259,16 +278,6 @@ namespace CIAO_GLUE_BasicSP // Operations for Events interface. - // NEW - virtual void - connect_publisher ( - RtecEventChannelAdmin::ProxyPushConsumer * proxy_consumer - ACE_ENV_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC (( - ::CORBA::SystemException, - ::Components::InvalidName)); - // END NEW - virtual ::Components::EventConsumerBase_ptr get_consumer ( const char *sink_name @@ -423,7 +432,7 @@ namespace CIAO_GLUE_BasicSP ::CIAO::Session_Container * container_; - ::BasicSP::RTEventChannel_var + ::RtecEventChannelAdmin::EventChannel_var provide_rt_event_channel_; }; |