Endpoint_Strategy_T.cpp

Go to the documentation of this file.
00001 // Endpoint_Strategy_T.cpp,v 5.41 2006/03/14 06:14:24 jtc Exp
00002 
00003 #ifndef TAO_AV_ENDPOINT_STRATEGY_T_CPP
00004 #define TAO_AV_ENDPOINT_STRATEGY_T_CPP
00005 
00006 #include "orbsvcs/AV/Endpoint_Strategy_T.h"
00007 
00008 #include "tao/debug.h"
00009 
00010 #include "ace/Process_Semaphore.h"
00011 #include "ace/OS_NS_unistd.h"
00012 
00013 
00014 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00015 
00016 // ----------------------------------------------------------------------
00017 // TAO_AV_Endpoint_Reactive_Strategy
00018 // ----------------------------------------------------------------------
00019 
00020 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00021 TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Endpoint_Reactive_Strategy (void)
00022    :  stream_endpoint_a_servant_(0), stream_endpoint_b_servant_(0), vdev_servant_(0),
00023       media_ctrl_servant_(0)
00024 {
00025 }
00026 
00027 template <class T_StreamEndpoint, class T_VDev, class T_MediaCtrl>
00028 TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Endpoint_Reactive_Strategy (void)
00029 {
00030   // Do not allow exceptions to escape from the destructor
00031   ACE_DECLARE_NEW_CORBA_ENV;
00032   ACE_TRY
00033     {
00034       if(this->stream_endpoint_a_servant_ )
00035         {
00036           stream_endpoint_a_servant_->_remove_ref (
00037             ACE_ENV_SINGLE_ARG_PARAMETER);
00038           ACE_TRY_CHECK;
00039         }
00040 
00041       if(this->stream_endpoint_b_servant_)
00042         {
00043           stream_endpoint_b_servant_->_remove_ref (
00044             ACE_ENV_SINGLE_ARG_PARAMETER);
00045           ACE_TRY_CHECK;
00046         }
00047 
00048       if(this->vdev_servant_)
00049         {
00050           vdev_servant_->_remove_ref (
00051             ACE_ENV_SINGLE_ARG_PARAMETER);
00052           ACE_TRY_CHECK;
00053         }
00054 
00055       if(this->media_ctrl_servant_)
00056         {
00057           media_ctrl_servant_->_remove_ref (
00058             ACE_ENV_SINGLE_ARG_PARAMETER);
00059           ACE_TRY_CHECK;
00060         }
00061     }
00062   ACE_CATCHANY
00063     {
00064     }
00065 # if defined (ACE_HAS_EXCEPTIONS) \
00066      && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
00067   ACE_CATCHALL
00068     {
00069     }
00070 # endif  /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
00071   ACE_ENDTRY;
00072 
00073 }
00074 
00075 // Create, activate the objects with the POA
00076 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00077 int
00078 TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate (void)
00079 {
00080   ACE_DECLARE_NEW_CORBA_ENV;
00081   ACE_TRY
00082     {
00083       this->activate_stream_endpoint (ACE_ENV_SINGLE_ARG_PARAMETER);
00084       ACE_TRY_CHECK;
00085       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activated stream_endpoint\n"));
00086 
00087       this->activate_vdev (ACE_ENV_SINGLE_ARG_PARAMETER);
00088       ACE_TRY_CHECK;
00089       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activated vdev\n"));
00090 
00091       this->activate_mediactrl (ACE_ENV_SINGLE_ARG_PARAMETER);
00092       ACE_TRY_CHECK;
00093       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activated mediactrl\n"));
00094     }
00095   ACE_CATCHANY
00096     {
00097       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Endpoint_Reactive_Strategy::activate");
00098       return -1;
00099     }
00100   ACE_ENDTRY;
00101   ACE_CHECK_RETURN (-1);
00102   return 0;
00103 }
00104 
00105 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00106 char *
00107 TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_with_poa (PortableServer::Servant servant ACE_ENV_ARG_DECL)
00108 {
00109 
00110   PortableServer::ObjectId_var id =
00111     this->poa_->activate_object (servant
00112                                  ACE_ENV_ARG_PARAMETER);
00113   ACE_CHECK_RETURN (0);
00114 
00115   CORBA::Object_var obj =
00116     this->poa_->id_to_reference (id.in ()
00117                                  ACE_ENV_ARG_PARAMETER);
00118   ACE_CHECK_RETURN (0);
00119 
00120   CORBA::String_var str =
00121     this->orb_->object_to_string (obj.in ()
00122                                   ACE_ENV_ARG_PARAMETER);
00123   ACE_CHECK_RETURN (0);
00124 
00125   return str._retn ();
00126 }
00127 
00128 
00129 // Activate VDev into the POA
00130 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00131 int
00132 TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_vdev (ACE_ENV_SINGLE_ARG_DECL)
00133 {
00134   ACE_TRY
00135     {
00136       // Bridge pattern. Allow subclasses to override this behavior
00137       T_VDev *vdev = 0;
00138       if (this->make_vdev (vdev) == -1)
00139         return -1;
00140 
00141       // Activate the object under the root poa.
00142 //      CORBA::String_var vdev_ior = this->activate_with_poa (vdev,
00143 //                                                            ACE_ENV_ARG_PARAMETER);
00144 //      ACE_TRY_CHECK;
00145 //      if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activate_vdev, vdev ior is:%s\n",
00146 //                  vdev_ior. in ()));
00147 
00148       // Save the object reference, so that create_A can return it
00149       this->vdev_ = vdev->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00150       ACE_TRY_CHECK;
00151     }
00152   ACE_CATCHANY
00153     {
00154       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy::activate_vdev");
00155       return -1;
00156     }
00157   ACE_ENDTRY;
00158   ACE_CHECK_RETURN (-1);
00159   return 0;
00160 }
00161 
00162 
00163 // Activate the media_controller
00164 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00165 int
00166 TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_mediactrl (ACE_ENV_SINGLE_ARG_DECL)
00167 {
00168   ACE_TRY
00169     {
00170       // Bridge pattern. Subclasses can override this
00171       if (this->make_mediactrl ( media_ctrl_servant_ ) == -1)
00172         return -1;
00173 
00174       // Associate the media controller object reference with the vdev, as per the OMG spec
00175       CORBA::Any anyval;
00176       media_ctrl_obj_
00177         = media_ctrl_servant_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00178       ACE_TRY_CHECK;
00179 
00180       anyval <<= media_ctrl_obj_.in();
00181 
00182       ACE_TRY_CHECK;
00183 
00184      this->vdev_->define_property ("Related_MediaCtrl",
00185                                    anyval
00186                                    ACE_ENV_ARG_PARAMETER);
00187 
00188       ACE_TRY_CHECK;
00189     }
00190   ACE_CATCHANY
00191     {
00192       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy::activate_mediactrl");
00193       return -1;
00194     }
00195   ACE_ENDTRY;
00196   ACE_CHECK_RETURN (-1);
00197   return 0;
00198 }
00199 
00200 // Bridge method
00201 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00202 int
00203 TAO_AV_Endpoint_Reactive_Strategy<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_stream_endpoint (T_StreamEndpoint *&stream_endpoint)
00204 {
00205   ACE_NEW_RETURN (stream_endpoint,
00206                   T_StreamEndpoint,
00207                   -1);
00208   return 0;
00209 }
00210 
00211 // Bridge method
00212 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00213 int
00214 TAO_AV_Endpoint_Reactive_Strategy<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_vdev (T_VDev *&vdev)
00215 {
00216   ACE_NEW_RETURN (vdev,
00217                   T_VDev,
00218                   -1);
00219   return 0;
00220 }
00221 
00222 // Bridge method
00223 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00224 int
00225 TAO_AV_Endpoint_Reactive_Strategy<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_mediactrl (T_MediaCtrl *&media_ctrl)
00226 {
00227   ACE_NEW_RETURN (media_ctrl,
00228                   T_MediaCtrl,
00229                   -1);
00230   return 0;
00231 }
00232 
00233 
00234 // ----------------------------------------------------------------------
00235 
00236 // ----------------------------------------------------------------------
00237 // TAO_AV_Endpoint_Reactive_Strategy_A
00238 // ----------------------------------------------------------------------
00239 
00240 //Constructor
00241 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00242 TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Endpoint_Reactive_Strategy_A (void)
00243 {
00244 }
00245 
00246 
00247 // Destructor
00248 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00249 TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Endpoint_Reactive_Strategy_A (void)
00250 {
00251 }
00252 
00253 
00254 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00255 int
00256 TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::init (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
00257 {
00258   this->orb_ = CORBA::ORB::_duplicate (orb);
00259   this->poa_ = PortableServer::POA::_duplicate (poa);
00260   return 0;
00261 }
00262 
00263 // Creates an "A" type streamendpoint, and a vdev and returns the
00264 // object references
00265 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00266 int
00267 TAO_AV_Endpoint_Reactive_Strategy_A<T_StreamEndpoint, T_VDev, T_MediaCtrl>::create_A (AVStreams::StreamEndPoint_A_ptr &stream_endpoint,
00268                                                                                       AVStreams::VDev_ptr &vdev
00269                                                                                       ACE_ENV_ARG_DECL_NOT_USED/* ACE_ENV_SINGLE_ARG_PARAMETER */)
00270 {
00271   if (this->activate () == -1)
00272     ACE_ERROR_RETURN ((LM_ERROR,
00273                        "(%P|%t) TAO_AV_Endpoint_Reactive_Strategy_A: Error in activate ()\n"),
00274                       -1);
00275 
00276   stream_endpoint = AVStreams::StreamEndPoint_A::_duplicate( this->stream_endpoint_a_.in() );
00277   vdev = AVStreams::VDev::_duplicate( this->vdev_.in() );
00278   return 0;
00279 
00280 }
00281 
00282 // Put the stream_endpoint into the POA
00283 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00284 int
00285 TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_stream_endpoint (ACE_ENV_SINGLE_ARG_DECL)
00286 {
00287   ACE_TRY
00288     {
00289 
00290       // Use the bridge method
00291       if (this->make_stream_endpoint (this->stream_endpoint_a_servant_) == -1)
00292         return -1;
00293 
00294       // Save the object references, so that create_a can return them
00295       this->stream_endpoint_a_ = this->stream_endpoint_a_servant_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00296       ACE_TRY_CHECK;
00297     }
00298   ACE_CATCHANY
00299     {
00300       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy_A::activate_stream_endpoint");
00301       return -1;
00302     }
00303   ACE_ENDTRY;
00304   ACE_CHECK_RETURN (-1);
00305   return 0;
00306 }
00307 
00308 // ----------------------------------------------------------------------
00309 // TAO_AV_Endpoint_Reactive_Strategy_B
00310 // ----------------------------------------------------------------------
00311 
00312 
00313 // Constructor
00314 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00315 TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Endpoint_Reactive_Strategy_B (void)
00316 {
00317 }
00318 
00319 // Destructor
00320 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00321 TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Endpoint_Reactive_Strategy_B (void)
00322 {
00323 }
00324 
00325 
00326 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00327 int
00328 TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::init (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
00329 {
00330   this->orb_ = CORBA::ORB::_duplicate (orb);
00331   this->poa_ = PortableServer::POA::_duplicate (poa);
00332   return 0;
00333 }
00334 
00335 // Activate stream_endpoint
00336 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00337 int
00338 TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_stream_endpoint (ACE_ENV_SINGLE_ARG_DECL)
00339 {
00340   ACE_TRY
00341     {
00342       if (this->make_stream_endpoint ( this->stream_endpoint_b_servant_ ) == -1)
00343         return -1;
00344 
00345       this->stream_endpoint_b_ = this->stream_endpoint_b_servant_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00346       ACE_TRY_CHECK;
00347     }
00348   ACE_CATCHANY
00349     {
00350       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy_B::activate_stream_endpoint");
00351       return -1;
00352     }
00353   ACE_ENDTRY;
00354   ACE_CHECK_RETURN (-1);
00355   return 0;
00356 }
00357 
00358 // Returns a "B" type stream_endpoint and a vdev
00359 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00360 int
00361 TAO_AV_Endpoint_Reactive_Strategy_B<T_StreamEndpoint, T_VDev, T_MediaCtrl>::create_B (AVStreams::StreamEndPoint_B_ptr &stream_endpoint,
00362                                                                                       AVStreams::VDev_ptr &vdev
00363                                                                                       ACE_ENV_ARG_DECL_NOT_USED/* ACE_ENV_SINGLE_ARG_PARAMETER */)
00364 {
00365   if (this->activate () == -1)
00366     ACE_ERROR_RETURN ((LM_ERROR,
00367                        "(%P|%t) TAO_AV_Endpoint_Reactive_Strategy_B: Error in activate ()\n"),
00368                       -1);
00369 
00370   stream_endpoint = AVStreams::StreamEndPoint_B::_duplicate( this->stream_endpoint_b_.in() );
00371   vdev = AVStreams::VDev::_duplicate( this->vdev_.in() );
00372 
00373   return 0;
00374 }
00375 
00376 // ----------------------------------------------------------------------
00377 // TAO_AV_Child_Process
00378 // ----------------------------------------------------------------------
00379 
00380 // Constructor
00381 template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
00382 TAO_AV_Child_Process <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::TAO_AV_Child_Process ()
00383   : stream_endpoint_name_ (0),
00384     pid_ (-1)
00385 {
00386   this->pid_ = ACE_OS::getpid ();
00387   if (this->pid_ == 0)
00388     ACE_ERROR ((LM_ERROR,"getpid () failed\n"));
00389   ACE_OS::hostname (this->host_,
00390                     sizeof this->host_);
00391 }
00392 
00393 // Initializes the ORB, activates the objects, and release the semaphore
00394 template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
00395 int
00396 TAO_AV_Child_Process  <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::init (int argc,
00397                                                                        char **argv,
00398                                                                        CORBA::ORB_ptr orb,
00399                                                                        PortableServer::POA_ptr poa)
00400 {
00401   ACE_DECLARE_NEW_CORBA_ENV;
00402   ACE_TRY
00403     {
00404       this->orb_ = orb;
00405 
00406       this->poa_ = poa;
00407 
00408       // create the objects and activate them in the poa
00409       this->activate_objects (argc,
00410                               argv
00411                               ACE_ENV_ARG_PARAMETER);
00412       ACE_TRY_CHECK;
00413 
00414       // Get ourselves a naming_service object reference
00415       this->bind_to_naming_service (ACE_ENV_SINGLE_ARG_PARAMETER);
00416       ACE_TRY_CHECK;
00417 
00418       // Register the vdev with the naming service
00419       this->register_vdev (ACE_ENV_SINGLE_ARG_PARAMETER);
00420       ACE_TRY_CHECK;
00421 
00422       // register the stream_endpoing with the naming_service
00423       this->register_stream_endpoint (ACE_ENV_SINGLE_ARG_PARAMETER);
00424       ACE_TRY_CHECK;
00425     }
00426   ACE_CATCHANY
00427     {
00428       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Child_Process");
00429       return -1;
00430     }
00431   ACE_ENDTRY;
00432 
00433   // release the semaphore the parent is waiting on
00434   if (this->release_semaphore () == -1)
00435     ACE_ERROR_RETURN ((LM_ERROR,
00436                        "(%P|%t) Error releasing semaphores\n"),
00437                       -1);
00438 
00439   return 0;
00440 }
00441 
00442 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00443 char *
00444 TAO_AV_Child_Process <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_with_poa (PortableServer::Servant servant
00445                                                                                  ACE_ENV_ARG_DECL)
00446 {
00447 
00448   PortableServer::ObjectId_var id =
00449     this->poa_->activate_object (servant
00450                                  ACE_ENV_ARG_PARAMETER);
00451   ACE_CHECK_RETURN (0);
00452 
00453   CORBA::Object_var obj =
00454     this->poa_->id_to_reference (id.in ()
00455                                  ACE_ENV_ARG_PARAMETER);
00456   ACE_CHECK_RETURN (0);
00457 
00458   CORBA::String_var str =
00459     this->orb_->object_to_string (obj.in ()
00460                                   ACE_ENV_ARG_PARAMETER);
00461   ACE_CHECK_RETURN (0);
00462 
00463   return str._retn ();
00464 }
00465 
00466 // initializes the orb, and activates the objects
00467 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00468 int
00469 TAO_AV_Child_Process  <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_objects (int /*argc*/,
00470                                                                                  char ** /*argv*/
00471                                                                                  ACE_ENV_ARG_DECL)
00472 {
00473   ACE_TRY
00474     {
00475       // bridge method to make a new stream endpoint
00476       if (this->make_stream_endpoint (this->stream_endpoint_) == -1)
00477         return -1;
00478 
00479       // bridge method to make a new vdev
00480       if (this->make_vdev (this->vdev_) == -1)
00481         return -1;
00482 
00483       // bridge method to make a new media controller
00484       if (this->make_mediactrl (this->media_ctrl_) == -1)
00485         return -1;
00486 
00487       // activate the stream_endpoint
00488       CORBA::String_var stream_endpoint_ior = this->activate_with_poa (this->stream_endpoint_
00489                                                                        ACE_ENV_ARG_PARAMETER);
00490       ACE_TRY_CHECK;
00491       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
00492                                            "(%P|%t)TAO_AV_Child_Process::activate_objects,stream_endpoint_ior :%s\n",
00493                                            stream_endpoint_ior.in ()));
00494 
00495       // activate the vdev
00496       CORBA::String_var vdev_ior = this->activate_with_poa (this->vdev_
00497                                                             ACE_ENV_ARG_PARAMETER);
00498       ACE_TRY_CHECK;
00499       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
00500                                            "(%P|%t)TAO_AV_Child_Process::activate_objects, vdev ior is :%s\n",
00501                                            vdev_ior.in ()));
00502 
00503       // activate the media controller
00504       CORBA::String_var media_ctrl_ior = this->activate_with_poa (this->media_ctrl_
00505                                                                   ACE_ENV_ARG_PARAMETER);
00506 
00507       ACE_TRY_CHECK;
00508       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Child_Process::activate_objects,media_ctrl_ior is: %s\n",media_ctrl_ior.in ()));
00509     }
00510   ACE_CATCHANY
00511     {
00512       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::init ");
00513       return -1;
00514     }
00515   ACE_ENDTRY;
00516   ACE_CHECK_RETURN (-1);
00517   return 0;
00518 }
00519 
00520 // Bind to the namingservice
00521 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00522 int
00523 TAO_AV_Child_Process  <T_StreamEndpoint, T_VDev, T_MediaCtrl>::bind_to_naming_service (ACE_ENV_SINGLE_ARG_DECL)
00524 {
00525   ACE_TRY
00526     {
00527       CORBA::Object_var naming_obj =
00528         this->orb_->resolve_initial_references ("NameService" ACE_ENV_ARG_PARAMETER);
00529       ACE_TRY_CHECK;
00530       if (CORBA::is_nil (naming_obj.in ()))
00531         ACE_ERROR_RETURN ((LM_ERROR,
00532                            " (%P|%t) Unable to resolve the Name Service.\n"),
00533                           -1);
00534       //  if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "(%P|%t) %s:%d\n", __FILE__, __LINE__));
00535       this->naming_context_ =
00536         CosNaming::NamingContext::_narrow (naming_obj.in ()
00537                                            ACE_ENV_ARG_PARAMETER);
00538       ACE_TRY_CHECK;
00539     }
00540   ACE_CATCHANY
00541     {
00542       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::bind_to_naming_service");
00543       return -1;
00544     }
00545   ACE_ENDTRY;
00546   ACE_CHECK_RETURN (-1);
00547   return 0;
00548 }
00549 
00550 // register the vdev with the naming service
00551 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00552 int
00553 TAO_AV_Child_Process  <T_StreamEndpoint, T_VDev, T_MediaCtrl>::register_vdev (ACE_ENV_SINGLE_ARG_DECL)
00554 {
00555   ACE_TRY
00556     {
00557       char vdev_name [BUFSIZ];
00558       ACE_OS::sprintf (vdev_name,
00559                        "%s:%s:%ld",
00560                        "VDev",
00561                        this->host_,
00562                        static_cast<long> (this->pid_));
00563 
00564       if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)%s\n",vdev_name));
00565       // create the name
00566       this->vdev_name_.length (1);
00567       this->vdev_name_ [0].id = CORBA::string_dup (vdev_name);
00568 
00569       // make the media controller a property of the vdev
00570       CORBA::Any media_ctrl_property;
00571       media_ctrl_obj_ =
00572         this->media_ctrl_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00573       ACE_TRY_CHECK;
00574 
00575       this->vdev_->define_property ("Related_MediaCtrl",
00576                                     media_ctrl_obj_.in()
00577                                     ACE_ENV_ARG_PARAMETER);
00578       ACE_TRY_CHECK;
00579 
00580       vdev_obj_ = this->vdev_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00581       ACE_TRY_CHECK;
00582 
00583       ACE_TRY_CHECK;
00584       ACE_TRY_EX (bind)
00585         {
00586           // Register the vdev with the naming server.
00587           this->naming_context_->bind (this->vdev_name_,
00588                                        vdev_obj_.in()
00589                                        ACE_ENV_ARG_PARAMETER);
00590           ACE_TRY_CHECK_EX (bind);
00591         }
00592       ACE_CATCH (CosNaming::NamingContext::AlreadyBound,ex)
00593         {
00594           // If the object was already there, replace the older reference
00595           // with this one
00596           this->naming_context_->rebind (this->vdev_name_,
00597                                          vdev_obj_.in()
00598                                          ACE_ENV_ARG_PARAMETER);
00599           ACE_TRY_CHECK;
00600         }
00601       ACE_CATCHANY
00602         {
00603           ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::register_vdev");
00604           return -1;
00605         }
00606       ACE_ENDTRY;
00607       ACE_CHECK_RETURN (-1);
00608     }
00609   ACE_CATCHANY
00610     {
00611       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::register_vdev");
00612       return -1;
00613     }
00614   ACE_ENDTRY;
00615   ACE_CHECK_RETURN (-1);
00616   return 0;
00617 }
00618 
00619 // run the orb event look
00620 template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
00621 int
00622 TAO_AV_Child_Process  <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::run (ACE_Time_Value *tv)
00623 {
00624   ACE_DECLARE_NEW_CORBA_ENV;
00625   ACE_TRY
00626     {
00627       this->orb_->run (tv ACE_ENV_ARG_PARAMETER);
00628       ACE_TRY_CHECK;
00629     }
00630   ACE_CATCHANY
00631     {
00632       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"orb.run ()");
00633       return -1;
00634     }
00635   ACE_ENDTRY;
00636   return 0;
00637 }
00638 
00639 // release the semaphore the parent is waiting on
00640 template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
00641 int
00642 TAO_AV_Child_Process  <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::release_semaphore ()
00643 {
00644   char sem_str [BUFSIZ];
00645 
00646   long pid = this->pid_;
00647   sprintf (sem_str,
00648            "%s:%s:%ld",
00649            "TAO_AV_Process_Semaphore",
00650            this->host_,
00651            pid);
00652 
00653   if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
00654               "(%P|%t) semaphore is %s\n",
00655               sem_str));
00656 
00657   // Release the lock on which the server is waiting
00658   ACE_Process_Semaphore semaphore (0, // 0 means that the semaphore is
00659                                    // initially locked
00660                                    sem_str);
00661 
00662   if (semaphore.release () == -1)
00663     ACE_ERROR_RETURN ((LM_ERROR,
00664                        "(%P|%t) Error releasing semaphore %s: %p\n",
00665                        sem_str,
00666                        "semaphore.release ()"),
00667                       -1);
00668 
00669   return 0;
00670 }
00671 
00672 // register the stream_endpoint with the naming service
00673 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00674 int
00675 TAO_AV_Child_Process  <T_StreamEndpoint, T_VDev, T_MediaCtrl>::register_stream_endpoint (ACE_ENV_SINGLE_ARG_DECL)
00676 {
00677   CORBA::Object_ptr stream_endpoint_obj = CORBA::Object::_nil ();
00678   ACE_TRY
00679     {
00680       stream_endpoint_obj = this->stream_endpoint_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00681       ACE_TRY_CHECK;
00682 
00683       // Create a name for the video control object
00684       // subclasses can define their own name for the streamendpoint
00685       // Register the stream endpoint object with the naming server.
00686       this->naming_context_->bind (this->stream_endpoint_name_,
00687                                    stream_endpoint_obj
00688                                    ACE_ENV_ARG_PARAMETER);
00689       ACE_TRY_CHECK;
00690     }
00691   ACE_CATCH (CosNaming::NamingContext::AlreadyBound,ex)
00692     {
00693       // if the name was already there, replace the reference with the new one
00694       this->naming_context_->rebind (this->stream_endpoint_name_,
00695                                      stream_endpoint_obj
00696                                      ACE_ENV_ARG_PARAMETER);
00697       ACE_TRY_CHECK;
00698     }
00699   ACE_CATCHANY
00700     {
00701       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Endpoint_Reactive_Strategy::activate");
00702       return -1;
00703     }
00704   ACE_ENDTRY;
00705   ACE_CHECK_RETURN (-1);
00706   return 0;
00707 }
00708 
00709 // Bridge method to make a new stream_endpoint
00710 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00711 int
00712 TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_stream_endpoint (T_StreamEndpoint *&stream_endpoint)
00713 {
00714   ACE_NEW_RETURN (stream_endpoint,
00715                   T_StreamEndpoint,
00716                   -1);
00717   return 0;
00718 }
00719 
00720 // Bridge method to make a new vdev
00721 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00722 int
00723 TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_vdev (T_VDev *&vdev)
00724 {
00725   ACE_NEW_RETURN (vdev,
00726                   T_VDev,
00727                   -1);
00728   return 0;
00729 }
00730 
00731 // Bridge method to make a new media controller
00732 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00733 int
00734 TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_mediactrl (T_MediaCtrl *&media_ctrl)
00735 {
00736   if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t) TAO_AV_Child_Process::make_mediactrl ()\n"));
00737   ACE_NEW_RETURN (media_ctrl,
00738                   T_MediaCtrl,
00739                   -1);
00740   return 0;
00741 }
00742 
00743 
00744 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00745 int
00746 TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::unbind_names (void)
00747 {
00748   // Remove the names from the naming service
00749   ACE_DECLARE_NEW_CORBA_ENV;
00750   ACE_TRY
00751     {
00752       if (CORBA::is_nil (this->naming_context_.in ()) == 0)
00753         return 0;
00754       this->naming_context_->unbind (this->stream_endpoint_name_
00755                                      ACE_ENV_ARG_PARAMETER);
00756       ACE_TRY_CHECK;
00757 
00758       this->naming_context_->unbind (this->vdev_name_
00759                                      ACE_ENV_ARG_PARAMETER);
00760       ACE_TRY_CHECK;
00761     }
00762   ACE_CATCHANY
00763     {
00764       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Endpoint_Process_Strategy::activate");
00765       return -1;
00766     }
00767   ACE_ENDTRY;
00768   ACE_CHECK_RETURN (-1);
00769   return 0;
00770 }
00771 
00772 // %% its not clear whether we should be deleting the objects, since
00773 // if the application overrides the make_mediactrl methods etc.,
00774 // then, we may not own these objects.
00775 // For now, we dont delete the objects, since they exist for the
00776 // lifetime of the process anyway
00777 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00778 TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Child_Process ()
00779 {
00780   this->unbind_names ();
00781 }
00782 
00783 // ----------------------------------------------------------------------
00784 // TAO_AV_Child_Process_A
00785 // ----------------------------------------------------------------------
00786 
00787 // Define the name of the stream_endpoint, as used to register with
00788 // the  naming service
00789 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00790 TAO_AV_Child_Process_A<T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Child_Process_A ()
00791 {
00792   char stream_endpoint_name[BUFSIZ];
00793   ACE_OS::sprintf (stream_endpoint_name,
00794                    "%s:%s:%ld",
00795                    "Stream_Endpoint_A",
00796                    this->host_,
00797                    static_cast<long> (this->pid_));
00798 
00799   if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)%s\n",stream_endpoint_name));
00800   this->stream_endpoint_name_.length (1);
00801   this->stream_endpoint_name_ [0].id = CORBA::string_dup (stream_endpoint_name);
00802 }
00803 
00804 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00805 TAO_AV_Child_Process_A  <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Child_Process_A ()
00806 {
00807 }
00808 
00809 // ----------------------------------------------------------------------
00810 // TAO_AV_Child_Process_B
00811 // ----------------------------------------------------------------------
00812 
00813 // Define the name of the stream_endpoint, as used to register with
00814 // the  naming service
00815 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00816 TAO_AV_Child_Process_B<T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Child_Process_B ()
00817 {
00818   char stream_endpoint_name[BUFSIZ];
00819   ACE_OS::sprintf (stream_endpoint_name,
00820                    "%s:%s:%ld",
00821                    "Stream_Endpoint_B",
00822                    this->host_,
00823                    static_cast<long> (this->pid_));
00824 
00825   if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)%s\n",stream_endpoint_name));
00826   this->stream_endpoint_name_.length (1);
00827   this->stream_endpoint_name_ [0].id = CORBA::string_dup (stream_endpoint_name);
00828 }
00829 
00830 template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
00831 TAO_AV_Child_Process_B<T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Child_Process_B ()
00832 {
00833 }
00834 
00835 TAO_END_VERSIONED_NAMESPACE_DECL
00836 
00837 #endif /* TAO_AV_ENDPOINT_STRATEGY_T_CPP */

Generated on Thu Nov 9 13:44:41 2006 for TAO_AV by doxygen 1.3.6