📄 endpoint_strategy_t.cpp
字号:
// register the stream_endpoing with the naming_service
this->register_stream_endpoint (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Child_Process");
return -1;
}
ACE_ENDTRY;
// release the semaphore the parent is waiting on
if (this->release_semaphore () == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"(%P|%t) Error releasing semaphores\n"),
-1);
return 0;
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
char *
TAO_AV_Child_Process <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 ();
}
// initializes the orb, and activates the objects
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint, T_VDev, T_MediaCtrl>::activate_objects (int /*argc*/,
char ** /*argv*/
ACE_ENV_ARG_DECL)
{
ACE_TRY
{
// bridge method to make a new stream endpoint
if (this->make_stream_endpoint (this->stream_endpoint_) == -1)
return -1;
// bridge method to make a new vdev
if (this->make_vdev (this->vdev_) == -1)
return -1;
// bridge method to make a new media controller
if (this->make_mediactrl (this->media_ctrl_) == -1)
return -1;
// activate the stream_endpoint
CORBA::String_var stream_endpoint_ior = this->activate_with_poa (this->stream_endpoint_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
"(%P|%t)TAO_AV_Child_Process::activate_objects,stream_endpoint_ior :%s\n",
stream_endpoint_ior.in ()));
// activate the vdev
CORBA::String_var vdev_ior = this->activate_with_poa (this->vdev_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
"(%P|%t)TAO_AV_Child_Process::activate_objects, vdev ior is :%s\n",
vdev_ior.in ()));
// activate the media controller
CORBA::String_var media_ctrl_ior = this->activate_with_poa (this->media_ctrl_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
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 ()));
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::init ");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// Bind to the namingservice
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint, T_VDev, T_MediaCtrl>::bind_to_naming_service (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
CORBA::Object_var naming_obj =
this->orb_->resolve_initial_references ("NameService" ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (CORBA::is_nil (naming_obj.in ()))
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to resolve the Name Service.\n"),
-1);
// if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "(%P|%t) %s:%d\n", __FILE__, __LINE__));
this->naming_context_ =
CosNaming::NamingContext::_narrow (naming_obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::bind_to_naming_service");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// register the vdev with the naming service
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint, T_VDev, T_MediaCtrl>::register_vdev (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
char vdev_name [BUFSIZ];
ACE_OS::sprintf (vdev_name,
"%s:%s:%ld",
"VDev",
this->host_,
ACE_static_cast (long, this->pid_));
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)%s\n",vdev_name));
// create the name
this->vdev_name_.length (1);
this->vdev_name_ [0].id = CORBA::string_dup (vdev_name);
// make the media controller a property of the vdev
CORBA::Any media_ctrl_property;
media_ctrl_obj_ =
this->media_ctrl_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
this->vdev_->define_property ("Related_MediaCtrl",
media_ctrl_obj_.in()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
vdev_obj_ = this->vdev_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
ACE_TRY_CHECK;
ACE_TRY_EX (bind)
{
// Register the vdev with the naming server.
this->naming_context_->bind (this->vdev_name_,
vdev_obj_.in()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK_EX (bind);
}
ACE_CATCH (CosNaming::NamingContext::AlreadyBound,ex)
{
// If the object was already there, replace the older reference
// with this one
this->naming_context_->rebind (this->vdev_name_,
vdev_obj_.in()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::register_vdev");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_AV_Child_Process::register_vdev");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// run the orb event look
template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::run (ACE_Time_Value *tv)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
this->orb_->run (tv ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"orb.run ()");
return -1;
}
ACE_ENDTRY;
return 0;
}
// release the semaphore the parent is waiting on
template <class T_StreamEndpoint_B, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint_B, T_VDev, T_MediaCtrl>::release_semaphore ()
{
char sem_str [BUFSIZ];
long pid = this->pid_;
sprintf (sem_str,
"%s:%s:%ld",
"TAO_AV_Process_Semaphore",
this->host_,
pid);
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
"(%P|%t) semaphore is %s\n",
sem_str));
// Release the lock on which the server is waiting
ACE_Process_Semaphore semaphore (0, // 0 means that the semaphore is
// initially locked
sem_str);
if (semaphore.release () == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"(%P|%t) Error releasing semaphore %s: %p\n",
sem_str,
"semaphore.release ()"),
-1);
return 0;
}
// register the stream_endpoint with the naming service
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process <T_StreamEndpoint, T_VDev, T_MediaCtrl>::register_stream_endpoint (ACE_ENV_SINGLE_ARG_DECL)
{
CORBA::Object_ptr stream_endpoint_obj = CORBA::Object::_nil ();
ACE_TRY
{
stream_endpoint_obj = this->stream_endpoint_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
// Create a name for the video control object
// subclasses can define their own name for the streamendpoint
// Register the stream endpoint object with the naming server.
this->naming_context_->bind (this->stream_endpoint_name_,
stream_endpoint_obj
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCH (CosNaming::NamingContext::AlreadyBound,ex)
{
// if the name was already there, replace the reference with the new one
this->naming_context_->rebind (this->stream_endpoint_name_,
stream_endpoint_obj
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Endpoint_Reactive_Strategy::activate");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// Bridge method to make a new stream_endpoint
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process<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 to make a new vdev
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_vdev (T_VDev *&vdev)
{
ACE_NEW_RETURN (vdev,
T_VDev,
-1);
return 0;
}
// Bridge method to make a new media controller
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::make_mediactrl (T_MediaCtrl *&media_ctrl)
{
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t) TAO_AV_Child_Process::make_mediactrl ()\n"));
ACE_NEW_RETURN (media_ctrl,
T_MediaCtrl,
-1);
return 0;
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
int
TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::unbind_names (void)
{
// Remove the names from the naming service
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
if (CORBA::is_nil (this->naming_context_.in ()) == 0)
return 0;
this->naming_context_->unbind (this->stream_endpoint_name_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
this->naming_context_->unbind (this->vdev_name_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"TAO_Endpoint_Process_Strategy::activate");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
// %% its not clear whether we should be deleting the objects, since
// if the application overrides the make_mediactrl methods etc.,
// then, we may not own these objects.
// For now, we dont delete the objects, since they exist for the
// lifetime of the process anyway
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Child_Process<T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Child_Process ()
{
this->unbind_names ();
}
// ----------------------------------------------------------------------
// TAO_AV_Child_Process_A
// ----------------------------------------------------------------------
// Define the name of the stream_endpoint, as used to register with
// the naming service
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Child_Process_A<T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Child_Process_A ()
{
char stream_endpoint_name[BUFSIZ];
ACE_OS::sprintf (stream_endpoint_name,
"%s:%s:%ld",
"Stream_Endpoint_A",
this->host_,
ACE_static_cast (long, this->pid_));
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)%s\n",stream_endpoint_name));
this->stream_endpoint_name_.length (1);
this->stream_endpoint_name_ [0].id = CORBA::string_dup (stream_endpoint_name);
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Child_Process_A <T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Child_Process_A ()
{
}
// ----------------------------------------------------------------------
// TAO_AV_Child_Process_B
// ----------------------------------------------------------------------
// Define the name of the stream_endpoint, as used to register with
// the naming service
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Child_Process_B<T_StreamEndpoint, T_VDev, T_MediaCtrl>::TAO_AV_Child_Process_B ()
{
char stream_endpoint_name[BUFSIZ];
ACE_OS::sprintf (stream_endpoint_name,
"%s:%s:%ld",
"Stream_Endpoint_B",
this->host_,
ACE_static_cast (long, this->pid_));
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"(%P|%t)%s\n",stream_endpoint_name));
this->stream_endpoint_name_.length (1);
this->stream_endpoint_name_ [0].id = CORBA::string_dup (stream_endpoint_name);
}
template <class T_StreamEndpoint, class T_VDev , class T_MediaCtrl>
TAO_AV_Child_Process_B<T_StreamEndpoint, T_VDev, T_MediaCtrl>::~TAO_AV_Child_Process_B ()
{
}
#endif /* TAO_AV_ENDPOINT_STRATEGY_T_C */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -