📄 endpoint_strategy_t.cpp
字号:
// Endpoint_Strategy_T.cpp,v 5.36 2003/10/30 20:59:10 bala Exp
#ifndef TAO_AV_ENDPOINT_STRATEGY_T_C
#define TAO_AV_ENDPOINT_STRATEGY_T_C
#include "Endpoint_Strategy_T.h"
#include "tao/debug.h"
#include "ace/Process_Semaphore.h"
// ----------------------------------------------------------------------
// TAO_AV_Endpoint_Reactive_Strategy
// ----------------------------------------------------------------------
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Endpoint_Reactive_Strategy (void)
: stream_endpoint_a_servant_(0), stream_endpoint_b_servant_(0), vdev_servant_(0),
media_ctrl_servant_(0)
{
}
template <class T_StreamEndpoint, class T_VDev, class T_MediaCtrl>
TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Endpoint_Reactive_Strategy (void)
{
// Do not allow exceptions to escape from the destructor
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
if(this->stream_endpoint_a_servant_ )
{
stream_endpoint_a_servant_->_remove_ref (
ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
if(this->stream_endpoint_b_servant_)
{
stream_endpoint_b_servant_->_remove_ref (
ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
if(this->vdev_servant_)
{
vdev_servant_->_remove_ref (
ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
if(this->media_ctrl_servant_)
{
media_ctrl_servant_->_remove_ref (
ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
}
ACE_CATCHANY
{
}
# if defined (ACE_HAS_EXCEPTIONS) \
&& defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
ACE_CATCHALL
{
}
# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
ACE_ENDTRY;
}
// Create, activate the objects with the POA
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate (void)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
this->activate_stream_endpoint (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activated stream_endpoint\n"));
this->activate_vdev (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activated vdev\n"));
this->activate_mediactrl (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activated mediactrl\n"));
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Endpoint_Reactive_Strategy::activate");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
char *
TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_with_poa (PortableServer::Servant servant ACE_ENV_ARG_DECL)
{
PortableServer::ObjectId_var id =
this->poa_->activate_object (servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
CORBA::Object_var obj =
this->poa_->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
CORBA::String_var str =
this->orb_->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return str._retn ();
}
// Activate VDev into the POA
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_vdev (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
// Bridge pattern. Allow subclasses to override this behavior
T_VDev *vdev = 0;
if (this->make_vdev (vdev) == -1)
return -1;
// Activate the object under the root poa.
// CORBA::String_var vdev_ior = this->activate_with_poa (vdev,
// ACE_ENV_ARG_PARAMETER);
// ACE_TRY_CHECK;
// if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)TAO_AV_Endpoint_Reactive_Strategy::activate_vdev, vdev ior is:%s\n",
// vdev_ior. in ()));
// Save the object reference, so that create_A can return it
this->vdev_ = vdev->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy::activate_vdev");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// Activate the media_controller
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_mediactrl (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
// Bridge pattern. Subclasses can override this
if (this->make_mediactrl ( media_ctrl_servant_ ) == -1)
return -1;
// Associate the media controller object reference with the vdev, as per the OMG spec
CORBA::Any anyval;
media_ctrl_obj_
= media_ctrl_servant_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
anyval <<= media_ctrl_obj_.in();
ACE_TRY_CHECK;
this->vdev_->define_property ("Related_MediaCtrl",
anyval
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy::activate_mediactrl");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// Bridge method
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_stream_endpoint (T_StreamEndpoint *&stream_endpoint)
{
ACE_NEW_RETURN (stream_endpoint,
T_StreamEndpoint,
-1);
return 0;
}
// Bridge method
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_vdev (T_VDev *&vdev)
{
ACE_NEW_RETURN (vdev,
T_VDev,
-1);
return 0;
}
// Bridge method
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_mediactrl (T_MediaCtrl *&media_ctrl)
{
ACE_NEW_RETURN (media_ctrl,
T_MediaCtrl,
-1);
return 0;
}
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// TAO_AV_Endpoint_Reactive_Strategy_A
// ----------------------------------------------------------------------
//Constructor
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Endpoint_Reactive_Strategy_A (void)
{
}
// Destructor
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Endpoint_Reactive_Strategy_A (void)
{
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::init (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
{
this->orb_ = CORBA::ORB::_duplicate (orb);
this->poa_ = PortableServer::POA::_duplicate (poa);
return 0;
}
// Creates an "A" type streamendpoint, and a vdev and returns the
// object references
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy_A<T_StreamEndpoint, T_VDev, T_MediaCtrl>::create_A (AVStreams::StreamEndPoint_A_ptr &stream_endpoint,
AVStreams::VDev_ptr &vdev
ACE_ENV_ARG_DECL_NOT_USED/* ACE_ENV_SINGLE_ARG_PARAMETER */)
{
if (this->activate () == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"(%P|%t) TAO_AV_Endpoint_Reactive_Strategy_A: Error in activate ()\n"),
-1);
stream_endpoint = AVStreams::StreamEndPoint_A::_duplicate( this->stream_endpoint_a_.in() );
vdev = AVStreams::VDev::_duplicate( this->vdev_.in() );
return 0;
}
// Put the stream_endpoint into the POA
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_stream_endpoint (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
// Use the bridge method
if (this->make_stream_endpoint (this->stream_endpoint_a_servant_) == -1)
return -1;
// Save the object references, so that create_a can return them
this->stream_endpoint_a_ = this->stream_endpoint_a_servant_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy_A::activate_stream_endpoint");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// ----------------------------------------------------------------------
// TAO_AV_Endpoint_Reactive_Strategy_B
// ----------------------------------------------------------------------
// Constructor
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Endpoint_Reactive_Strategy_B (void)
{
}
// Destructor
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Endpoint_Reactive_Strategy_B (void)
{
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::init (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
{
this->orb_ = CORBA::ORB::_duplicate (orb);
this->poa_ = PortableServer::POA::_duplicate (poa);
return 0;
}
// Activate stream_endpoint
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy_B <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_stream_endpoint (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
if (this->make_stream_endpoint ( this->stream_endpoint_b_servant_ ) == -1)
return -1;
this->stream_endpoint_b_ = this->stream_endpoint_b_servant_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Endpoint_Reactive_Strategy_B::activate_stream_endpoint");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// Returns a "B" type stream_endpoint and a vdev
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Endpoint_Reactive_Strategy_B<T_StreamEndpoint, T_VDev, T_MediaCtrl>::create_B (AVStreams::StreamEndPoint_B_ptr &stream_endpoint,
AVStreams::VDev_ptr &vdev
ACE_ENV_ARG_DECL_NOT_USED/* ACE_ENV_SINGLE_ARG_PARAMETER */)
{
if (this->activate () == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"(%P|%t) TAO_AV_Endpoint_Reactive_Strategy_B: Error in activate ()\n"),
-1);
stream_endpoint = AVStreams::StreamEndPoint_B::_duplicate( this->stream_endpoint_b_.in() );
vdev = AVStreams::VDev::_duplicate( this->vdev_.in() );
return 0;
}
// ----------------------------------------------------------------------
// TAO_AV_Child_Process
// ----------------------------------------------------------------------
// Constructor
template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
TAO_AV_Child_Process <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::TAO_AV_Child_Process ()
: stream_endpoint_name_ (0),
pid_ (-1)
{
this->pid_ = ACE_OS::getpid ();
if (this->pid_ == 0)
ACE_ERROR ((LM_ERROR,"getpid () failed\n"));
ACE_OS::hostname (this->host_,
sizeof this->host_);
}
// Initializes the ORB, activates the objects, and release the semaphore
template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::init (int argc,
char **argv,
CORBA::ORB_ptr orb,
PortableServer::POA_ptr poa)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
this->orb_ = orb;
this->poa_ = poa;
// create the objects and activate them in the poa
this->activate_objects (argc,
argv
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Get ourselves a naming_service object reference
this->bind_to_naming_service (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
// Register the vdev with the naming service
this->register_vdev (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -