TAO_Basic_StreamCtrl Class Reference

Base class for StreamCtrl, implements basic stream start and stop functionality. More...

#include <AVStreams_i.h>

Inheritance diagram for TAO_Basic_StreamCtrl:

Inheritance graph
[legend]
Collaboration diagram for TAO_Basic_StreamCtrl:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_Basic_StreamCtrl (void)
 Default Constructor.
virtual void stop (const AVStreams::flowSpec &the_spec)
virtual void start (const AVStreams::flowSpec &the_spec)
virtual void destroy (const AVStreams::flowSpec &the_spec)
virtual CORBA::Boolean modify_QoS (AVStreams::streamQoS &new_qos, const AVStreams::flowSpec &the_spec)
virtual void push_event (const struct CosPropertyService::Property &the_event)
virtual void set_FPStatus (const AVStreams::flowSpec &the_spec, const char *fp_name, const CORBA::Any &fp_settings)
 Used to control the flow protocol parameters.
virtual CORBA::Object_ptr get_flow_connection (const char *flow_name)
virtual void set_flow_connection (const char *flow_name, CORBA::Object_ptr flow_connection)

Protected Types

typedef ACE_Hash_Map_Manager<
ACE_CString, AVStreams::FlowConnection_var,
ACE_Null_Mutex
FlowConnection_Map
 Hash table for the flow names and its corresponding flowconnection object reference.
typedef ACE_Hash_Map_Iterator<
ACE_CString, AVStreams::FlowConnection_var,
ACE_Null_Mutex
FlowConnection_Map_Iterator
typedef ACE_Hash_Map_Entry<
ACE_CString, AVStreams::FlowConnection_var > 
FlowConnection_Map_Entry

Protected Member Functions

virtual ~TAO_Basic_StreamCtrl (void)
 Destructor.

Protected Attributes

AVStreams::VDev_var vdev_a_
 The Virtual Devices for this stream.
AVStreams::VDev_var vdev_b_
AVStreams::StreamEndPoint_A_var sep_a_
 The Endpoints for this stream.
AVStreams::StreamEndPoint_B_var sep_b_
FlowConnection_Map flow_connection_map_
AVStreams::FlowConnection_seq flowConnections_
u_int flow_count_
 sequence of flow names.
AVStreams::flowSpec flows_

Detailed Description

Base class for StreamCtrl, implements basic stream start and stop functionality.

Definition at line 75 of file AVStreams_i.h.


Member Typedef Documentation

typedef ACE_Hash_Map_Manager<ACE_CString,AVStreams::FlowConnection_var,ACE_Null_Mutex> TAO_Basic_StreamCtrl::FlowConnection_Map [protected]

Hash table for the flow names and its corresponding flowconnection object reference.

Definition at line 137 of file AVStreams_i.h.

typedef ACE_Hash_Map_Entry<ACE_CString,AVStreams::FlowConnection_var> TAO_Basic_StreamCtrl::FlowConnection_Map_Entry [protected]

Definition at line 139 of file AVStreams_i.h.

typedef ACE_Hash_Map_Iterator<ACE_CString,AVStreams::FlowConnection_var,ACE_Null_Mutex> TAO_Basic_StreamCtrl::FlowConnection_Map_Iterator [protected]

Definition at line 138 of file AVStreams_i.h.


Constructor & Destructor Documentation

TAO_Basic_StreamCtrl::TAO_Basic_StreamCtrl ( void   ) 

Default Constructor.

Definition at line 70 of file AVStreams_i.cpp.

00071   :flow_count_ (0)
00072 {
00073 }

TAO_Basic_StreamCtrl::~TAO_Basic_StreamCtrl ( void   )  [protected, virtual]

Destructor.

Definition at line 296 of file AVStreams_i.cpp.

00297 {
00298 }


Member Function Documentation

void TAO_Basic_StreamCtrl::destroy ( const AVStreams::flowSpec the_spec  )  [virtual]

Tears down the stream. This will close the connection, and delete the streamendpoint and vdev associated with this stream Empty the_spec means apply operation to all flows

Reimplemented in TAO_StreamCtrl.

Definition at line 182 of file AVStreams_i.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_Hash_Map_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::advance(), TAO_AV_Core::get_flowname(), ACE_Hash_Map_Entry< EXT_ID, INT_ID >::int_id_, and ACE_Hash_Map_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::next().

Referenced by TAO_StreamCtrl::destroy().

00183 {
00184   try
00185     {
00186       // call stop on the flow connections.
00187       if (this->flow_connection_map_.current_size () > 0)
00188         {
00189           if (flow_spec.length () > 0)
00190           {
00191             for (u_int i=0;i<flow_spec.length ();i++)
00192               {
00193                 char *flowname = TAO_AV_Core::get_flowname (flow_spec[i]);
00194                 ACE_CString flow_name_key (flowname);
00195                 FlowConnection_Map::ENTRY *flow_connection_entry = 0;
00196                 if (this->flow_connection_map_.find (flow_name_key, flow_connection_entry) == 0)
00197                   {
00198                     flow_connection_entry->int_id_->destroy ();
00199                   }
00200               }
00201           }
00202           else
00203             {
00204               // call destroy on all the flows.
00205               FlowConnection_Map_Iterator iterator (this->flow_connection_map_);
00206               FlowConnection_Map_Entry *entry = 0;
00207               for (;iterator.next (entry) !=  0;iterator.advance ())
00208                 {
00209                   entry->int_id_->destroy ();
00210                 }
00211             }
00212         }
00213     }
00214   catch (const CORBA::Exception& ex)
00215     {
00216       ex._tao_print_exception ("TAO_Basic_StreamCtrl::destroy");
00217       return;
00218     }
00219 }

CORBA::Object_ptr TAO_Basic_StreamCtrl::get_flow_connection ( const char *  flow_name  )  [virtual]

Not implemented in the light profile, will raise the notsupported exception

Definition at line 255 of file AVStreams_i.cpp.

References ACE_DEBUG, LM_DEBUG, and TAO_debug_level.

Referenced by TAO_StreamCtrl::bind().

00256 {
00257   ACE_CString flow_name_key (flow_name);
00258   AVStreams::FlowConnection_var flow_connection_entry;
00259 
00260   if (this->flow_connection_map_.find (flow_name_key, flow_connection_entry) == 0){
00261     return flow_connection_entry._retn();
00262   }
00263   else{
00264     if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "(%N,%l) Cannot find flow: %s\n", flow_name ));
00265     throw AVStreams::noSuchFlow ();
00266   }
00267 }

CORBA::Boolean TAO_Basic_StreamCtrl::modify_QoS ( AVStreams::streamQoS new_qos,
const AVStreams::flowSpec the_spec 
) [virtual]

Changes the QoS associated with the stream Empty the_spec means apply operation to all flows

Reimplemented in TAO_StreamCtrl.

Definition at line 225 of file AVStreams_i.cpp.

00227 {
00228   return 1;
00229 }

void TAO_Basic_StreamCtrl::push_event ( const struct CosPropertyService::Property &  the_event  )  [virtual]

Used by StreamEndPoint and VDev to inform StreamCtrl of events. E.g., loss of flow, reestablishment of flow, etc..

Definition at line 234 of file AVStreams_i.cpp.

References ACE_DEBUG, LM_DEBUG, and TAO_debug_level.

00235 {
00236   if (TAO_debug_level > 0)
00237     ACE_DEBUG ((LM_DEBUG, "\n(%P|%t) Recieved event \""));
00238 }

void TAO_Basic_StreamCtrl::set_flow_connection ( const char *  flow_name,
CORBA::Object_ptr  flow_connection 
) [virtual]

Not implemented in the light profile, will raise the notsupported exception

Definition at line 271 of file AVStreams_i.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_DEBUG, flow_count_, flows_, LM_DEBUG, CORBA::string_dup(), and TAO_debug_level.

Referenced by TAO_StreamCtrl::bind().

00273 {
00274   AVStreams::FlowConnection_var flow_connection;
00275   try
00276     {
00277       flow_connection = AVStreams::FlowConnection::_narrow (flow_connection_obj);
00278     }
00279   catch (const CORBA::Exception& ex)
00280     {
00281       ex._tao_print_exception (
00282         "TAO_Basic_StreamCtrl::set_flow_connection");
00283       return;
00284     }
00285   // add the flowname and the flowconnection to the hashtable.
00286   this->flows_.length (this->flow_count_ + 1);
00287   this->flows_ [this->flow_count_++] = CORBA::string_dup (flow_name);
00288   ACE_CString flow_name_key (flow_name);
00289   if (this->flow_connection_map_.bind (flow_name_key, flow_connection) != 0)
00290   {
00291     if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "(%N,%l) Cannot find flow: %s\n", flow_name ));
00292     throw AVStreams::noSuchFlow ();// is this right?
00293   }
00294 }

void TAO_Basic_StreamCtrl::set_FPStatus ( const AVStreams::flowSpec the_spec,
const char *  fp_name,
const CORBA::Any &  fp_settings 
) [virtual]

Used to control the flow protocol parameters.

Definition at line 242 of file AVStreams_i.cpp.

References CORBA::is_nil(), and sep_a_.

00246 {
00247   if (!CORBA::is_nil (this->sep_a_.in ()))
00248     {
00249       this->sep_a_->set_FPStatus (flow_spec, fp_name, fp_settings);
00250     }
00251 }

void TAO_Basic_StreamCtrl::start ( const AVStreams::flowSpec the_spec  )  [virtual]

Start the transfer of data in the stream. Empty the_spec means apply operation to all flows

Reimplemented in TAO_StreamCtrl.

Definition at line 129 of file AVStreams_i.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_Hash_Map_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::advance(), TAO_AV_Core::get_flowname(), ACE_Hash_Map_Entry< EXT_ID, INT_ID >::int_id_, ACE_Hash_Map_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::next(), and printf().

Referenced by TAO_StreamCtrl::start().

00130 {
00131   try
00132     {
00133       // @@Call start on the Related MediaCtrl.
00134 
00135       // call start on the flow connections.
00136       if (this->flow_connection_map_.current_size () > 0)
00137         {
00138           if (flow_spec.length () > 0)
00139             for (u_int i = 0; i < flow_spec.length (); i++)
00140               {
00141                 char *flowname = TAO_AV_Core::get_flowname (flow_spec[i]);
00142                 ACE_CString flow_name_key (flowname);
00143                 FlowConnection_Map::ENTRY *flow_connection_entry = 0;
00144                 if (this->flow_connection_map_.find (flow_name_key,
00145                                                      flow_connection_entry) == 0)
00146                   {
00147                     flow_connection_entry->int_id_->start ();
00148                   }
00149               }
00150           else
00151             {
00152               // call start on all the flows.
00153               FlowConnection_Map_Iterator iterator (this->flow_connection_map_);
00154               FlowConnection_Map_Entry *entry = 0;
00155               for (;iterator.next (entry) !=  0;iterator.advance ())
00156                 {
00157                   entry->int_id_->start ();
00158                 }
00159             }
00160         }
00161     }
00162  catch(AVStreams::noSuchFlow& ex)
00163       {
00164       throw; //ACS mod 2007-08
00165       }
00166   catch (const CORBA::Exception& ex)
00167     {
00168     ex._tao_print_exception ("TAO_Basic_StreamCtrl::start");
00169     throw;  //ACS mod 2007-08
00170     }
00171   catch(...)
00172     {
00173       printf ("TAO_Basic_StreamCtrl::start - unknown exception\n");
00174     }
00175 }

void TAO_Basic_StreamCtrl::stop ( const AVStreams::flowSpec the_spec  )  [virtual]

Stop the transfer of data of the stream Empty the_spec means apply operation to all flows

Reimplemented in TAO_StreamCtrl.

Definition at line 79 of file AVStreams_i.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_Hash_Map_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::advance(), TAO_AV_Core::get_flowname(), ACE_Hash_Map_Entry< EXT_ID, INT_ID >::int_id_, ACE_Hash_Map_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::next(), and printf().

Referenced by TAO_StreamCtrl::stop().

00080 {
00081   try
00082     {
00083       // @@Call stop on the Related MediaCtrl.  call stop on the flow
00084       // connections.
00085       if (this->flow_connection_map_.current_size () > 0)
00086         {
00087           if (flow_spec.length () > 0)
00088             for (u_int i=0;i<flow_spec.length ();i++)
00089               {
00090                 char *flowname = TAO_AV_Core::get_flowname (flow_spec[i]);
00091                 ACE_CString flow_name_key (flowname);
00092                 AVStreams::FlowConnection_var flow_connection_entry;
00093                 if (this->flow_connection_map_.find (flow_name_key,
00094                                                      flow_connection_entry) == 0)
00095                   {
00096                     flow_connection_entry->stop ();
00097                   }
00098               }
00099           else
00100             {
00101               // call stop on all the flows.
00102               FlowConnection_Map_Iterator iterator (this->flow_connection_map_);
00103               FlowConnection_Map_Entry *entry;
00104               for (;iterator.next (entry) !=  0;iterator.advance ())
00105                 {
00106                   entry->int_id_->stop ();
00107                 }
00108             }
00109         }
00110     }
00111   catch(AVStreams::noSuchFlow& ex)
00112       {
00113       throw; //ACS mod 2007-08
00114       }
00115   catch (const CORBA::Exception& ex)
00116     {
00117     ex._tao_print_exception ("TAO_Basic_StreamCtrl::stop");
00118     throw;  //ACS mod 2007-08
00119     }
00120   catch(...)
00121     {
00122       printf ("TAO_Basic_StreamCtrl::stop - unknown exception\n");
00123     }
00124 }


Member Data Documentation

FlowConnection_Map TAO_Basic_StreamCtrl::flow_connection_map_ [protected]

Definition at line 140 of file AVStreams_i.h.

u_int TAO_Basic_StreamCtrl::flow_count_ [protected]

sequence of flow names.

Definition at line 144 of file AVStreams_i.h.

Referenced by set_flow_connection().

AVStreams::FlowConnection_seq TAO_Basic_StreamCtrl::flowConnections_ [protected]

Definition at line 141 of file AVStreams_i.h.

AVStreams::flowSpec TAO_Basic_StreamCtrl::flows_ [protected]

Definition at line 145 of file AVStreams_i.h.

Referenced by set_flow_connection().

AVStreams::StreamEndPoint_A_var TAO_Basic_StreamCtrl::sep_a_ [protected]

The Endpoints for this stream.

Definition at line 133 of file AVStreams_i.h.

Referenced by TAO_StreamCtrl::bind(), TAO_StreamCtrl::bind_devs(), and set_FPStatus().

AVStreams::StreamEndPoint_B_var TAO_Basic_StreamCtrl::sep_b_ [protected]

Definition at line 134 of file AVStreams_i.h.

Referenced by TAO_StreamCtrl::bind(), and TAO_StreamCtrl::bind_devs().

AVStreams::VDev_var TAO_Basic_StreamCtrl::vdev_a_ [protected]

The Virtual Devices for this stream.

Definition at line 129 of file AVStreams_i.h.

Referenced by TAO_StreamCtrl::bind_devs().

AVStreams::VDev_var TAO_Basic_StreamCtrl::vdev_b_ [protected]

Definition at line 130 of file AVStreams_i.h.

Referenced by TAO_StreamCtrl::bind_devs().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:48:08 2010 for TAO_AV by  doxygen 1.4.7