diff options
author | mhengstmengel <mhengstmengel@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-08-05 10:27:45 +0000 |
---|---|---|
committer | mhengstmengel <mhengstmengel@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-08-05 10:27:45 +0000 |
commit | a3929fe15062d8d2805f4fe41c88bb20a4df2771 (patch) | |
tree | 65e80f97cdc3e4cc70c11003ea526b448efd6173 /CIAO/connectors/dds4ccm/examples/ShapesContr/Receiver/Shapes_Receiver_exec.cpp | |
parent | 8e3e4f4ce5980a0a371db07691edad58c4f73307 (diff) | |
download | ATCD-a3929fe15062d8d2805f4fe41c88bb20a4df2771.tar.gz |
added ShapesContr test
Diffstat (limited to 'CIAO/connectors/dds4ccm/examples/ShapesContr/Receiver/Shapes_Receiver_exec.cpp')
-rw-r--r-- | CIAO/connectors/dds4ccm/examples/ShapesContr/Receiver/Shapes_Receiver_exec.cpp | 662 |
1 files changed, 662 insertions, 0 deletions
diff --git a/CIAO/connectors/dds4ccm/examples/ShapesContr/Receiver/Shapes_Receiver_exec.cpp b/CIAO/connectors/dds4ccm/examples/ShapesContr/Receiver/Shapes_Receiver_exec.cpp new file mode 100644 index 00000000000..b6132e55f40 --- /dev/null +++ b/CIAO/connectors/dds4ccm/examples/ShapesContr/Receiver/Shapes_Receiver_exec.cpp @@ -0,0 +1,662 @@ +// -*- C++ -*- +// $Id$ + +/** + * Code generated by the The ACE ORB (TAO) IDL Compiler v2.0.0 + * TAO and the TAO IDL Compiler have been developed by: + * Center for Distributed Object Computing + * Washington University + * St. Louis, MO + * USA + * http://www.cs.wustl.edu/~schmidt/doc-center.html + * and + * Distributed Object Computing Laboratory + * University of California at Irvine + * Irvine, CA + * USA + * and + * Institute for Software Integrated Systems + * Vanderbilt University + * Nashville, TN + * USA + * http://www.isis.vanderbilt.edu/ + * + * Information about TAO is available at: + * http://www.cs.wustl.edu/~schmidt/TAO.html + **/ + +#include "Shapes_Receiver_exec.h" +#include "tao/ORB_Core.h" +#include "ace/Reactor.h" +#include "ace/OS_NS_time.h" +#include "dds4ccm/impl/TimeUtilities.h" + +namespace CIAO_Shapes_Receiver_Impl +{ + + shape_received_i::shape_received_i (Receiver_exec_i& callback) + : callback_ (callback) + { + } + CORBA::UShort + shape_received_i::number_of_shapes () + { + return callback_.length_shape_list(); + } + + //return all collected shapes + ShapeInfoSeq * + shape_received_i::get_info_shapes() + { + ShapeInfoSeq_var info_seq = callback_.get_shapes_list(); + return info_seq._retn (); + } + + /** + * Read action generator + */ + + read_action_Generator::read_action_Generator (Receiver_exec_i &callback) + : pulse_callback_ (callback) + { + } + + read_action_Generator::~read_action_Generator () + { + } + + int + read_action_Generator::handle_timeout (const ACE_Time_Value &, const void *) + { + if (pulse_callback_.read_data ()) + { + this->pulse_callback_.read_one(); + this->pulse_callback_.read_all(); + } + if (pulse_callback_.get_data ()) + { + this->pulse_callback_.get_one (); + } + return 0; + } + + + /** + * Facet Executor Implementation Class: info_out_data_listener_exec_i + */ + + info_out_data_listener_exec_i::info_out_data_listener_exec_i ( + ::Shapes::CCM_Receiver_Context_ptr ctx, + Receiver_exec_i & callback) + : ciao_context_ ( + ::Shapes::CCM_Receiver_Context::_duplicate (ctx)) + , callback_ (callback) + { + } + + info_out_data_listener_exec_i::~info_out_data_listener_exec_i (void) + { + } + + // Operations from ::Shapes::Listener + + void + info_out_data_listener_exec_i::on_one_data (const ::ShapeType & datum, + const ::CCM_DDS::ReadInfo & /* info */) + { + ::Shapes::Reader_var reader = + this->ciao_context_->get_connection_info_out_data (); + ::CORBA::Object_var cmp = reader->_get_component (); + if (::CORBA::is_nil (cmp.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: info_out_data_listener_exec_i::on_one_data - " + "Unable to get component interface\n")); + throw ::CORBA::INTERNAL (); + } + ::Shapes::CCM_DDS_Event_var conn = + ::Shapes::CCM_DDS_Event::_narrow (cmp.in ()); + if (::CORBA::is_nil (conn.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: info_out_data_listener_exec_i::on_one_data - " + "Unable to narrow connector interface\n")); + throw ::CORBA::INTERNAL (); + } + CORBA::String_var topic = conn->topic_name (); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ShapeType_Listener: ") + ACE_TEXT ("received shape_info <%C> for <%C> at X <%u> Y <%u> size <%u>\n"), + topic.in (), + datum.color.in (), + datum.x, + datum.y, + datum.shapesize)); + + //Save all received shape's + callback_.add_shape_to_list(topic.in (), datum.color.in (), + datum.shapesize, datum.x,datum.y ); + + } + + void + info_out_data_listener_exec_i::on_many_data (const ::ShapeTypeSeq & /* data */, + const ::CCM_DDS::ReadInfoSeq & /* infos */) + { + /* Your code here. */ + } + + /** + * Facet Executor Implementation Class: info_out_status_exec_i + */ + + info_out_status_exec_i::info_out_status_exec_i ( + ::Shapes::CCM_Receiver_Context_ptr ctx) + : ciao_context_ ( + ::Shapes::CCM_Receiver_Context::_duplicate (ctx)) + { + } + + info_out_status_exec_i::~info_out_status_exec_i (void) + { + } + + // Operations from ::CCM_DDS::PortStatusListener + + void + info_out_status_exec_i::on_requested_deadline_missed (::DDS::DataReader_ptr /* the_reader */, + const ::DDS::RequestedDeadlineMissedStatus & /* status */) + { + /* Your code here. */ + } + + void + info_out_status_exec_i::on_sample_lost (::DDS::DataReader_ptr /* the_reader */, + const ::DDS::SampleLostStatus & /* status */) + { + /* Your code here. */ + } + + /** + * Facet Executor Implementation Class: info_get_status_exec_i + */ + + info_get_status_exec_i::info_get_status_exec_i ( + ::Shapes::CCM_Receiver_Context_ptr ctx) + : ciao_context_ ( + ::Shapes::CCM_Receiver_Context::_duplicate (ctx)) + { + } + + info_get_status_exec_i::~info_get_status_exec_i (void) + { + } + + // Operations from ::CCM_DDS::PortStatusListener + + void + info_get_status_exec_i::on_requested_deadline_missed (::DDS::DataReader_ptr /* the_reader */, + const ::DDS::RequestedDeadlineMissedStatus & /* status */) + { + /* Your code here. */ + } + + void + info_get_status_exec_i::on_sample_lost (::DDS::DataReader_ptr /* the_reader */, + const ::DDS::SampleLostStatus & /* status */) + { + /* Your code here. */ + } + + /** + * Component Executor Implementation Class: Receiver_exec_i + */ + + Receiver_exec_i::Receiver_exec_i (void) + : rate_ (0) + , get_data_ (true) + , read_data_ (true) + , raw_listen_ (false) + { + ACE_NEW_THROW_EX (this->ticker_, + read_action_Generator (*this), + ::CORBA::NO_MEMORY ()); + shape_info_seq_.length(0); + } + + Receiver_exec_i::~Receiver_exec_i (void) + { + delete this->ticker_; + } + + // Supported operations and attributes. + ACE_Reactor* + Receiver_exec_i::reactor (void) + { + ACE_Reactor* reactor = 0; + ::CORBA::Object_var ccm_object = + this->ciao_context_->get_CCM_object(); + if (! ::CORBA::is_nil (ccm_object.in ())) + { + ::CORBA::ORB_var orb = ccm_object->_get_orb (); + if (! ::CORBA::is_nil (orb.in ())) + { + reactor = orb->orb_core ()->reactor (); + } + } + if (reactor == 0) + { + throw ::CORBA::INTERNAL (); + } + return reactor; + } + + void + Receiver_exec_i::read_one (void) + { + ShapeType shape_info; + shape_info.color = "GREEN"; + ::CCM_DDS::ReadInfo readinfo; + + try + { + ::Shapes::Reader_var reader = + this->ciao_context_->get_connection_info_out_data (); + if (! ::CORBA::is_nil (reader.in ())) + { + ::CORBA::Object_var cmp = reader->_get_component (); + if (::CORBA::is_nil (cmp.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Receiver_exec_i::read_one - " + "Unable to get component interface\n")); + throw ::CORBA::INTERNAL (); + } + ::Shapes::CCM_DDS_Event_var conn = + ::Shapes::CCM_DDS_Event::_narrow (cmp.in ()); + if (::CORBA::is_nil (conn.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Receiver_exec_i::read_one - " + "Unable to narrow connector interface\n")); + throw ::CORBA::INTERNAL (); + } + CORBA::String_var topic = conn->topic_name (); + + reader->read_one_last (shape_info, readinfo, ::DDS::HANDLE_NIL); + ACE_Time_Value time; + time <<= readinfo.source_timestamp; + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("READ_ONE Read_Info ") + ACE_TEXT (" -> date = %#T\n"), &time)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("READ ON shape info : ") + ACE_TEXT ("received shape_info <%C> for <%C> at X <%u> Y <%u> size <%u>\n"), + topic.in (), + shape_info.color.in (), + shape_info.x, + shape_info.y, + shape_info.shapesize)); + } + else + { + ACE_ERROR ((LM_ERROR, "Receiver_exec_i::read_one - " + "ERROR: reader seems to be nil.\n")); + } + } + catch(const CCM_DDS::NonExistent& ) + { + ACE_ERROR ((LM_ERROR, ACE_TEXT ("ShapeType_Read_One: ") + ACE_TEXT ("no shape_info received\n"))); + } + + } + + void + Receiver_exec_i::read_all (void) + { + ShapeTypeSeq shape_infos; + ::CCM_DDS::ReadInfoSeq readinfoseq; + ::Shapes::Reader_var reader = + this->ciao_context_->get_connection_info_out_data (); + if (! ::CORBA::is_nil (reader.in ())) + { + ::CORBA::Object_var cmp = reader->_get_component (); + if (::CORBA::is_nil (cmp.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Receiver_exec_i::read_all - " + "Unable to get component interface\n")); + throw ::CORBA::INTERNAL (); + } + ::Shapes::CCM_DDS_Event_var conn = + ::Shapes::CCM_DDS_Event::_narrow (cmp.in ()); + if (::CORBA::is_nil (conn.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Receiver_exec_i::read_all - " + "Unable to narrow connector interface\n")); + throw ::CORBA::INTERNAL (); + } + CORBA::String_var topic = conn->topic_name (); + + reader->read_all(shape_infos, readinfoseq); + for(CORBA::ULong i = 0; i < readinfoseq.length(); ++i) + { + ACE_Time_Value time; + time <<= readinfoseq[i].source_timestamp; + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("READ_ALL ReadInfo ") + ACE_TEXT ("-> UTC date = %#T\n"), &time)); + } + for(CORBA::ULong i = 0; i < shape_infos.length(); ++i) + { + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("READ_ALL Shape Info : ") + ACE_TEXT ("received shape_info <%C> for <%C> at X <%u> Y <%u> size <%u>\n"), + topic.in (), + shape_infos[i].color.in (), + shape_infos[i].x, + shape_infos[i].y, + shape_infos[i].shapesize)); + } + } + else + { + ACE_ERROR ((LM_ERROR, "Receiver_exec_i::read_all - " + "ERROR: reader seems to be nil.\n")); + } + + } + + void + Receiver_exec_i::get_one (void) + { + ShapeType_var shape_info; + ::CCM_DDS::ReadInfo_var readinfo; + + try + { + ::Shapes::Getter_var getter = + this->ciao_context_->get_connection_info_get_fresh_data (); + if (! ::CORBA::is_nil (getter.in ())) + { + ::CORBA::Object_var cmp = getter->_get_component (); + if (::CORBA::is_nil (cmp.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Receiver_exec_i::get_one - " + "Unable to get component interface\n")); + throw ::CORBA::INTERNAL (); + } + ::Shapes::CCM_DDS_Event_var conn = + ::Shapes::CCM_DDS_Event::_narrow (cmp.in ()); + if (::CORBA::is_nil (conn.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Receiver_exec_i::get_one - " + "Unable to narrow connector interface\n")); + throw ::CORBA::INTERNAL (); + } + CORBA::String_var topic = conn->topic_name (); + + if (getter->get_one (shape_info.out (), readinfo.out ())) + { + ACE_Time_Value time; + time <<= readinfo->source_timestamp; + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("GET_ONE ReadInfo -> ") + ACE_TEXT ("date = %#T\n"), &time)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("GET_ONE ShapeType : ") + ACE_TEXT ("received shape_info <%C> for <%C> at X <%u> Y <%u> size <%u>\n"), + topic.in (), + shape_info->color.in (), + shape_info->x, + shape_info->y, + shape_info->shapesize)); + } + else + { + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("GET_ONE No data available for <%C>\n"), + shape_info->color.in ())); + } + } + else + { + ACE_ERROR ((LM_ERROR, "Receiver_exec_i::get_one - " + "ERROR: Getter seems nil\n")); + } + } + catch(const CCM_DDS::NonExistent& ) + { + ACE_ERROR ((LM_ERROR, ACE_TEXT ("ShapeType_Read_One: no shape_info receieved\n"))); + } + + } + + // Component attributes and port operations. + + ::Shapes::CCM_Listener_ptr + Receiver_exec_i::get_info_out_data_listener (void) + { + if ( ::CORBA::is_nil (this->ciao_info_out_data_listener_.in ())) + { + info_out_data_listener_exec_i *tmp = 0; + ACE_NEW_RETURN ( + tmp, + info_out_data_listener_exec_i ( + this->ciao_context_.in (), + (*this)), + ::Shapes::CCM_Listener::_nil ()); + + this->ciao_info_out_data_listener_ = tmp; + } + + return + ::Shapes::CCM_Listener::_duplicate ( + this->ciao_info_out_data_listener_.in ()); + } + + ::CCM_DDS::CCM_PortStatusListener_ptr + Receiver_exec_i::get_info_out_status (void) + { + if ( ::CORBA::is_nil (this->ciao_info_out_status_.in ())) + { + info_out_status_exec_i *tmp = 0; + ACE_NEW_RETURN ( + tmp, + info_out_status_exec_i ( + this->ciao_context_.in ()), + ::CCM_DDS::CCM_PortStatusListener::_nil ()); + + this->ciao_info_out_status_ = tmp; + } + + return + ::CCM_DDS::CCM_PortStatusListener::_duplicate ( + this->ciao_info_out_status_.in ()); + } + + ::CCM_DDS::CCM_PortStatusListener_ptr + Receiver_exec_i::get_info_get_status (void) + { + if ( ::CORBA::is_nil (this->ciao_info_get_status_.in ())) + { + info_get_status_exec_i *tmp = 0; + ACE_NEW_RETURN ( + tmp, + info_get_status_exec_i ( + this->ciao_context_.in ()), + ::CCM_DDS::CCM_PortStatusListener::_nil ()); + + this->ciao_info_get_status_ = tmp; + } + + return + ::CCM_DDS::CCM_PortStatusListener::_duplicate ( + this->ciao_info_get_status_.in ()); + } + + CCM_shape_received* + Receiver_exec_i::get_shapeReceivedPub () + { + return ( new shape_received_i (*this) ); + } + + ::CORBA::ULong + Receiver_exec_i::rate (void) + { + return this->rate_; + } + + void + Receiver_exec_i::rate ( + const ::CORBA::ULong rate) + { + this->rate_ = rate; + } + + ::CORBA::Boolean + Receiver_exec_i::get_data (void) + { + return this->get_data_; + } + + void + Receiver_exec_i::get_data ( + const ::CORBA::Boolean get_data) + { + this->get_data_ = get_data; + } + + ::CORBA::Boolean + Receiver_exec_i::read_data (void) + { + return this->read_data_; + } + + void + Receiver_exec_i::read_data ( + const ::CORBA::Boolean read_data) + { + this->read_data_ = read_data; + } + + ::CORBA::Boolean + Receiver_exec_i::raw_listen (void) + { + return this->raw_listen_; + } + + void + Receiver_exec_i::raw_listen ( + const ::CORBA::Boolean raw_listen) + { + this->raw_listen_ = raw_listen; + } + + void + Receiver_exec_i::add_shape_to_list (const char* topic, const char* color, CORBA::UShort size, + CORBA::UShort pos_x, CORBA::UShort pos_y) + { + ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard, + this->mutex_, CORBA::INTERNAL ()); + + CORBA::ULong seq_length = this->shape_info_seq_.length(); + this->shape_info_seq_.length(seq_length + 1); + this->shape_info_seq_[seq_length].shape = CORBA::string_dup (topic); + this->shape_info_seq_[seq_length].color = CORBA::string_dup (color); + this->shape_info_seq_[seq_length].size = size; + this->shape_info_seq_[seq_length].posX = pos_x; + this->shape_info_seq_[seq_length].posY = pos_y; + } + + void + Receiver_exec_i::clear_shape_list () + { + ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard, + this->mutex_, CORBA::INTERNAL ()); + this->shape_info_seq_.length(0); + } + + //get all collected shapes from list and then empty + // list . + ShapeInfoSeq* + Receiver_exec_i::get_shapes_list(void) + { + ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard, + this->mutex_, CORBA::INTERNAL ()); + ShapeInfoSeq_var info_seq = new ShapeInfoSeq(this->shape_info_seq_); + this->shape_info_seq_.length(0); + return info_seq._retn (); + } + + CORBA::UShort + Receiver_exec_i::length_shape_list () + { + ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard, + this->mutex_, CORBA::INTERNAL ()); + return this->shape_info_seq_.length(); + } + // Operations from Components::SessionComponent. + + void + Receiver_exec_i::set_session_context ( + ::Components::SessionContext_ptr ctx) + { + this->ciao_context_ = + ::Shapes::CCM_Receiver_Context::_narrow (ctx); + + if ( ::CORBA::is_nil (this->ciao_context_.in ())) + { + throw ::CORBA::INTERNAL (); + } + } + + void + Receiver_exec_i::configuration_complete (void) + { + /* Your code here. */ + } + + void + Receiver_exec_i::ccm_activate (void) + { + ::CCM_DDS::DataListenerControl_var lc = + this->ciao_context_->get_connection_info_out_data_control (); + + if (::CORBA::is_nil (lc.in ())) + { + ACE_ERROR ((LM_INFO, ACE_TEXT ("Error: Listener control receptacle is null!\n"))); + throw ::CORBA::INTERNAL (); + } + + lc->mode (this->raw_listen_ ? ::CCM_DDS::ONE_BY_ONE : ::CCM_DDS::NOT_ENABLED); + + //if using only raw_listen, the timer isn't needed. + if (this->get_data_ || this->read_data_) + { + // calculate the interval time + long const usec = 1000000 / this->rate_; + if (this->reactor ()->schedule_timer (this->ticker_, + 0, + ACE_Time_Value(0, usec), + ACE_Time_Value(0, usec)) == -1) + { + ACE_ERROR ((LM_ERROR, "Unable to schedule Timer\n")); + } + } + } + + void + Receiver_exec_i::ccm_passivate (void) + { + this->reactor ()->cancel_timer (this->ticker_); + } + + void + Receiver_exec_i::ccm_remove (void) + { + /* Your code here. */ + } + + extern "C" RECEIVER_EXEC_Export ::Components::EnterpriseComponent_ptr + create_Shapes_Receiver_Impl (void) + { + ::Components::EnterpriseComponent_ptr retval = + ::Components::EnterpriseComponent::_nil (); + + ACE_NEW_NORETURN ( + retval, + Receiver_exec_i); + + return retval; + } +} |